Contract con_uw_master__s__1


Contract Code


  
1 import currency
2 import con_uwarriors_lst001
3
4 I = importlib
5 S = Hash(default_value='')
6 balances = Hash(default_value=0)
7 metadata = Hash(default_value=0)
8 game = Hash(default_value=0)
9 nicks = Hash(default_value=0)
10 wp = ForeignHash(foreign_contract='con_uwarriors_lst001', foreign_name='balances')
11
12 @construct
13 def seed():
14 metadata['operator'] = ctx.caller
15 metadata['withdrawal'] = False
16 metadata['starter_pack_price'] = 1500
17 metadata['game_cost'] = 2
18 metadata['time'] = 21600
19 metadata['fees'] = decimal('0.15')
20 metadata['fees_withdrawal'] = decimal('0.20')
21 metadata['operator_user_data'] = ['con_uw_auction_season1']
22 metadata['operator_thing_meta'] = ['con_uw_nft_characters','con_uw_nft_crystal']
23 game['in'] = 0
24
25 @export
26 def set_nick_name(nickname: str):
27 caller = ctx.caller
28 assert len(nickname) <= 25, 'Nickname too long (25 chars max).'
29 assert len(nickname) > 0, 'Nickname too short.'
30 names_uid = hashlib.sha256(nickname.lower().replace(' ', ''))
31 assert not nicks['nicknames', names_uid], 'A form of this name already belongs to ' + nicks['nicknames', names_uid]
32 nicks[caller, 'nickname'] = nickname
33 nicks['nicknames', names_uid] = nickname
34
35
36 @export
37 def add_operator_data(operator: str, news: list):
38 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
39 metadata[operator] = news
40
41
42 @export
43 def change_nick_name(nickname: str, change: str):
44 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
45 assert len(nickname) <= 25, 'Nickname too long (25 chars max).'
46 assert len(nickname) > 0, 'Nickname too short.'
47 names_uid = hashlib.sha256(nickname.lower().replace(' ', ''))
48 assert not nicks['nicknames', names_uid], 'A form of this name already belongs to ' + nicks['nicknames', names_uid]
49 nicks[nickname, 'nickname'] = change
50 nicks['nicknames', names_uid] = change
51
52
53 @export
54 def play():
55 sender = ctx.caller
56 amount = metadata['game_cost']
57 operator = metadata['operator']
58 assert wp[sender] > amount , 'Not enough coins to send!'
59 con_uwarriors_lst001.transfer_from(amount, metadata['operator'], sender)
60 balances[sender, 'can_play'] = True
61 game['in'] += amount
62
63 @export
64 def play_2():
65 sender = ctx.caller
66 operator = metadata['operator']
67 balances[sender, 'can_play_free'] = True
68
69
70
71 @export
72 def buy_character():
73 sender = ctx.caller
74 amount = metadata['starter_pack_price']
75 operator = metadata['operator']
76 assert wp[sender] > amount , 'Not enough coins to send!'
77 con_uwarriors_lst001.transfer_from(amount, metadata['operator'], sender)
78 game['in'] += amount
79
80 @export
81 def buy_character_gift(wallet: str):
82 sender = ctx.caller
83 amount = metadata['starter_pack_price']
84 operator = metadata['operator']
85 assert wp[sender] > amount , 'Not enough coins to send!'
86 con_uwarriors_lst001.transfer_from(amount, metadata['operator'], sender)
87 game['in'] += amount
88
89 @export
90 def change_thing_meta(uid: str, meta: dict, contract: str):
91 assert ctx.caller == metadata['operator'] or metadata['operator_thing_meta'] == ctx.caller, 'Only operator can set metadata!'
92 thing_info = I.import_module(contract)
93 thing_uid = thing_info.change_meta(uid, meta)
94 return thing_uid
95
96 @export
97 def rewards(uid: str, amount: float):
98 assert ctx.caller == metadata['operator'], 'Only operator'
99 assert balances[uid, 'can_play'] == True, 'No can Play'
100
101 if metadata['withdrawal'] == True:
102 balances[uid, 'rewards'] += amount
103 balances[uid, 'total_rewards'] += amount
104 if balances[uid, 'rewards', 'time'] is None:
105 balances[uid, 'rewards', 'time'] = now
106 else:
107 balances[uid, 'total_rewards'] += amount
108 con_uwarriors_lst001.transfer_from(amount, uid, metadata['operator'])
109
110 balances[uid, 'can_play'] = False
111 game['total_rewards_pay'] += amount
112
113
114 @export
115 def withdrawal():
116 sender = ctx.caller
117 assert balances[sender, 'rewards'] > 0, 'Cannot send negative balances!'
118
119 amount = balances[sender, 'rewards']
120 if metadata['withdrawal'] == True:
121 if (now - balances[sender, 'rewards', 'time']).minute > metadata['time']:
122
123 con_uwarriors_lst001.transfer_from(amount, sender, metadata['operator'])
124 balances[sender, 'rewards'] = 0
125 balances[uid, 'rewards', 'time'] = now
126 game['total_rewards_pay'] += amount
127 else:
128 con_uwarriors_lst001.transfer_from(amount - (amount * metadata['fees_withdrawal']), sender, metadata['operator'])
129 balances[sender, 'rewards'] = 0
130 balances[uid, 'rewards', 'time'] = now
131 game['total_rewards_pay'] += amount
132
133 @export
134 def add_thing_meta(uid: str, meta:str, contract: str, value: Any):
135 assert ctx.caller == metadata['operator'] or ctx.caller in metadata['operator_thing_meta'] , 'Only operator can set metadata!'
136 thing_info = I.import_module(contract)
137 thing_uid = thing_info.add_meta(uid, meta, value)
138
139 return thing_uid
140
141 @export
142 def add_user_data(uid: str, meta: str, value: Any):
143 assert ctx.caller == metadata['operator'] or ctx.caller in metadata['operator_thing_meta'], 'Only operator can set metadata!'
144
145 if not balances[uid, meta]:
146 balances[uid, meta] = value
147
148 @export
149 def increment_user_data(uid: str, meta: str, value: int):
150 assert ctx.caller == metadata['operator'] or ctx.caller in metadata['operator_thing_meta'], 'Only operator can set metadata!'
151 balances[uid, meta] += value
152
153 @export
154 def change_user_data(uid: str, meta: str, value: int):
155 assert ctx.caller == metadata['operator'] or ctx.caller in metadata['operator_thing_meta'], 'Only operator can set metadata!'
156 balances[uid, meta] = value
157
158 @export
159 def change_metadata(key: str, value: Any):
160 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
161 metadata[key] = value
162
163 @export
164 def create_thing(contract: str, thing_string: str, name: str, owner: str, meta: dict = {}):
165 assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
166 thing_info = I.import_module(contract)
167 sender = ctx.caller
168 thing_uid = thing_info.add_thing(thing_string, name, meta, owner)
169
170 return thing_uid
171
172 @export
173 def buy_thing(uid: str, contract:str):
174 thing_info = I.import_module(contract)
175 sender = ctx.caller
176 owner = thing_info.get_owner(uid)
177 creator = thing_info.get_creator(uid)
178
179 assert_already_owned(uid, sender, contract)
180
181 price_amount = thing_info.get_price_amount(uid)
182
183 assert price_amount, uid + ' is not for sale'
184 assert price_amount > 0, uid + ' is not for sale'
185
186 price_amount_pay = price_amount - (price_amount * metadata['fees'])
187
188 con_uwarriors_lst001.transfer_from(price_amount_pay, owner, sender)
189 con_uwarriors_lst001.transfer_from((price_amount * metadata['fees']), metadata['operator'], sender)
190
191 transfer_ownership(uid, sender, contract)
192
193 game['in'] += (price_amount * metadata['fees'])
194
195
196
197
198 @export
199 def sell_thing(uid: str, amount: float, description: str, contract:str):
200 thing_info = I.import_module(contract)
201 auction = thing_info.get_auction(uid)
202
203 assert auction == False, ' is on auction'
204
205 assert_ownership(uid, ctx.caller, contract)
206
207 thing_info.set_price(uid, amount)
208
209 @export
210 def transfer(uid: str, new_owner: str, contract:str):
211 sender = ctx.caller
212 assert_ownership(uid, sender, contract)
213 assert_already_owned(uid, new_owner, contract)
214 transfer_ownership(uid, new_owner, contract)
215
216 @export
217 def approve(uid: str, to: str, contract:str):
218 sender = ctx.caller
219 assert_ownership(uid, sender, contract)
220 balances[sender, uid, to] = True
221
222
223 @export
224 def revoke(uid: str, to: str):
225 balances[ctx.caller, uid, to] = None
226
227
228 @export
229 def transfer_from(uid: str, to: str, main_account: str, contract: str):
230 sender = ctx.caller
231
232 assert balances[main_account, uid, sender], f"You have not been given approval to transfer this user's item. {main_account} {sender}"
233 assert_ownership(uid, main_account, contract)
234 assert_already_owned(uid, to, contract)
235 transfer_ownership(uid, to, contract)
236
237 balances[main_account, uid, sender] = None
238
239
240 def assert_already_owned(uid: str, sender: str, contract: str):
241 thing_info = I.import_module(contract)
242 owner = thing_info.get_owner(uid)
243 assert owner != sender, uid + ' already owned by ' + sender
244
245
246 def assert_ownership(uid: str, sender, contract: str):
247 thing_info = I.import_module(contract)
248 owner = thing_info.get_owner(uid)
249 assert owner == sender, uid + ' not owned by ' + sender
250
251
252 def transfer_ownership(uid:str, new_owner: str, contract: str):
253 thing_info = I.import_module(contract)
254 old_owner = thing_info.get_owner(uid)
255 thing_info.set_owner(uid, new_owner)
256 if thing_info.get_price_amount(uid) > 0:
257 thing_info.set_price(uid, 0)
258
259
260
261
262
263

Byte Code

e3000000000000000000000000080000004000000073b8020000640064016c005a00640064016c015a0165025a03650464026403640464058d035a05650464006403640664058d035a06650464006403640764058d035a07650464006403640864058d035a08650464006403640964058d035a09650a640a64066403640b640c8d045a0b640d640e84005a0c650d64038301650e640f9c0164106411840483015a0f650d64038301650e651064129c0264136414840483015a11650d64038301650e650e64159c0264166417840483015a12650d6403830164186419840083015a13650d64038301641a641b840083015a14650d64038301641c641d840083015a15650d64038301650e641e9c01641f6420840483015a16650d64038301650e6517650e64219c0364226423840483015a18650d64038301650e651964249c0264256426840483015a1a650d6403830164276428840083015a1b650d64038301650e650e650e651c64299c04642a642b840483015a1d650d64038301650e650e651c642c9c03642d642e840483015a1e650d64038301650e650e651f642c9c03642f6430840483015a20650d64038301650e650e651f642c9c0364316432840483015a21650d64038301650e651c64339c0264346435840483015a22650d6403830169006601650e650e650e650e651764369c0564376438840583015a23650d64038301650e650e64399c02643a643b840483015a24650d64038301650e6519650e650e643c9c04643d643e840483015a25650d64038301650e650e650e643f9c0364406441840483015a26650d64038301650e650e650e64429c0364436444840483015a27650d64038301650e650e64459c0264466447840483015a28650d64038301650e650e650e650e64489c046449644a840483015a29650e650e650e644b9c03644c644d84045a2a650e650e64399c02644e644f84045a2b650e650e650e643f9c036450645184045a2c640153002952e9000000004eda00da13636f6e5f75775f6d61737465725f5f735f5f31da01532903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da0862616c616e636573da086d65746164617461da0467616d65da056e69636b73da14636f6e5f7577617272696f72735f6c7374303031da0277702904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d6572060000007207000000630000000000000000000000000300000043000000736400000074006a01740264013c006402740264033c006404740264053c006406740264073c006408740264093c007403640a83017402640b3c007403640c83017402640d3c00640e67017402640f3c00641064116702740264123c006413740464143c006400530029154eda086f70657261746f7246da0a7769746864726177616c69dc050000da12737461727465725f7061636b5f7072696365e902000000da0967616d655f636f73746960540000da0474696d657a04302e3135da04666565737a04302e3230da0f666565735f7769746864726177616cda16636f6e5f75775f61756374696f6e5f736561736f6e31da126f70657261746f725f757365725f64617461da15636f6e5f75775f6e66745f63686172616374657273da12636f6e5f75775f6e66745f6372797374616cda136f70657261746f725f7468696e675f6d6574617201000000da02696e2905da03637478da0663616c6c6572da0a5f5f6d65746164617461da07646563696d616cda065f5f67616d65a900722300000072230000007202000000da045f5f5f5f0f000000731600000000010a0108010801080108010c010c010a0102010a0172240000002901da086e69636b6e616d65630100000000000000030000000500000043000000738200000074006a017d0174027c00830164016b01731a740364028301820174027c00830164036b04732e740364048301820174046a057c006a0683006a0764056406830283017d02740864077c02660219000c00736674036408740864077c02660219001700830182017c0074087c01640966023c007c00740864077c0266023c0064005300290a4ee9190000007a214e69636b6e616d6520746f6f206c6f6e6720283235206368617273206d6178292e72010000007a134e69636b6e616d6520746f6f2073686f72742efa01207202000000da096e69636b6e616d65737a274120666f726d206f662074686973206e616d6520616c72656164792062656c6f6e677320746f2072250000002909721e000000721f000000da036c656eda0e417373657274696f6e4572726f72da07686173686c6962da06736861323536da056c6f776572da077265706c616365da075f5f6e69636b7329037225000000721f000000da096e616d65735f756964722300000072230000007202000000da0d7365745f6e69636b5f6e616d651d000000731200000000020601140114011601100106010c010c01723100000029027210000000da046e657773630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174027c003c006400530029034e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212904721e000000721f0000007220000000722a000000290272100000007232000000722300000072230000007202000000da116164645f6f70657261746f725f646174612a0000007306000000000210010601723300000029027225000000da066368616e6765630200000000000000030000000500000043000000739200000074006a017402640119006b027316740364028301820174047c00830164036b01732a740364048301820174047c00830164056b04733e740364068301820174056a067c006a0783006a0864076408830283017d02740964097c02660219000c0073767403640a740964097c02660219001700830182017c0174097c00640b66023c007c01740964097c0266023c0064005300290c4e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d657461646174612172260000007a214e69636b6e616d6520746f6f206c6f6e6720283235206368617273206d6178292e72010000007a134e69636b6e616d6520746f6f2073686f72742e7227000000720200000072280000007a274120666f726d206f662074686973206e616d6520616c72656164792062656c6f6e677320746f207225000000290a721e000000721f0000007220000000722a0000007229000000722b000000722c000000722d000000722e000000722f0000002903722500000072340000007230000000722300000072230000007202000000da106368616e67655f6e69636b5f6e616d65310000007314000000000210010601140114011601100106010c010c017235000000630000000000000000030000000400000043000000735c00000074006a017d007402640119007d017402640219007d0274037c0019007c016b04732a740464038301820174056a067c017402640219007c0083030100640474077c00640566023c0074086406050019007c01370003003c006400530029074e721400000072100000007a194e6f7420656e6f75676820636f696e7320746f2073656e642154da0863616e5f706c6179721d0000002909721e000000721f0000007220000000da045f5f7770722a000000720c000000da0d7472616e736665725f66726f6dda0a5f5f62616c616e63657372220000002903da0673656e646572da06616d6f756e747210000000722300000072230000007202000000da04706c61793f000000730e0000000002060108010801140112010c01723c000000630000000000000000020000000400000043000000731e00000074006a017d007402640119007d01640274037c00640366023c006400530029044e721000000054da0d63616e5f706c61795f667265652904721e000000721f000000722000000072390000002902723a0000007210000000722300000072230000007202000000da06706c61795f324a0000007306000000000206010801723e000000630000000000000000030000000400000043000000735000000074006a017d007402640119007d017402640219007d0274037c0019007c016b04732a740464038301820174056a067c017402640219007c008303010074076404050019007c01370003003c006400530029054e721200000072100000007a194e6f7420656e6f75676820636f696e7320746f2073656e6421721d0000002908721e000000721f00000072200000007237000000722a000000720c000000723800000072220000002903723a000000723b0000007210000000722300000072230000007202000000da0d6275795f63686172616374657251000000730c000000000206010801080114011201723f0000002901da0677616c6c6574630100000000000000040000000400000043000000735000000074006a017d017402640119007d027402640219007d0374037c0119007c026b04732a740464038301820174056a067c027402640219007c018303010074076404050019007c02370003003c006400530029054e721200000072100000007a194e6f7420656e6f75676820636f696e7320746f2073656e6421721d0000002908721e000000721f00000072200000007237000000722a000000720c0000007238000000722200000029047240000000723a000000723b0000007210000000722300000072230000007202000000da126275795f6368617261637465725f676966745b000000730c00000000020601080108011401120172410000002903da03756964da046d6574617206000000630300000000000000050000000300000043000000733e00000074006a017402640119006b02732474026402190074006a016b027324740364038301820174046a057c0283017d037c036a067c007c0183027d047c04530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721e000000721f0000007220000000722a000000da0149da0d696d706f72745f6d6f64756c65da0b6368616e67655f6d6574612905724200000072430000007206000000da0a7468696e675f696e666fda097468696e675f756964722300000072230000007202000000da116368616e67655f7468696e675f6d65746165000000730a0000000002100114010a010c01724900000029027242000000723b00000063020000000000000002000000050000004300000073ca00000074006a017402640119006b027316740364028301820174047c0064036602190064046b02732e740364058301820174026406190064046b02728474047c0064076602050019007c01370003003c0074047c0064086602050019007c01370003003c0074047c00640764096603190064006b0872aa740574047c006407640966033c006e2674047c0064086602050019007c01370003003c0074066a077c017c0074026401190083030100640a74047c00640366023c007408640b050019007c01370003003c0064005300290c4e72100000007a0d4f6e6c79206f70657261746f727236000000547a0b4e6f2063616e20506c61797211000000da0772657761726473da0d746f74616c5f72657761726473721500000046da11746f74616c5f726577617264735f7061792909721e000000721f0000007220000000722a0000007239000000da036e6f77720c0000007238000000722200000029027242000000723b000000722300000072230000007202000000724a0000006e00000073160000000002160118010c011401140112011002140112010c01724a00000063000000000000000002000000050000004300000073dc00000074006a017d0074027c0064016602190064026b04731e740364038301820174027c006401660219007d0174046404190064056b0272d8740574027c00640164066603190018006a067404640619006b04729074076a087c017c0074046407190083030100640274027c00640166023c007405740274096401640666033c00740a6408050019007c01370003003c006e4874076a087c017c01740464091900140018007c0074046407190083030100640274027c00640166023c007405740274096401640666033c00740a6408050019007c01370003003c0064005300290a4e724a00000072010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e6365732172110000005472150000007210000000724c0000007217000000290b721e000000721f0000007239000000722a0000007220000000724d000000da066d696e757465720c0000007238000000724200000072220000002902723a000000723b00000072230000007223000000720200000072110000007e00000073200000000002060118010c010c01140108010a0108010c010e0112020a0114010c010e0172110000002904724200000072430000007206000000da0576616c7565630400000000000000060000000400000043000000734000000074006a017402640119006b02732474006a017402640219006b067324740364038301820174046a057c0283017d047c046a067c007c017c0383037d057c05530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721e000000721f0000007220000000722a00000072440000007245000000da086164645f6d6574612906724200000072430000007206000000724f00000072470000007248000000722300000072230000007202000000da0e6164645f7468696e675f6d65746193000000730a0000000002140110010a010e017251000000290372420000007243000000724f000000630300000000000000030000000400000043000000734000000074006a017402640119006b02732474006a017402640219006b067324740364038301820174047c007c0166021900733c7c0274047c007c0166023c006400530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212905721e000000721f0000007220000000722a0000007239000000290372420000007243000000724f000000722300000072230000007202000000da0d6164645f757365725f646174619c00000073080000000002140110010c017252000000630300000000000000030000000400000043000000733c00000074006a017402640119006b02732474006a017402640219006b067324740364038301820174047c007c016602050019007c02370003003c006400530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212905721e000000721f0000007220000000722a0000007239000000290372420000007243000000724f000000722300000072230000007202000000da13696e6372656d656e745f757365725f64617461a400000073060000000002140110017253000000630300000000000000030000000400000043000000733400000074006a017402640119006b02732474006a017402640219006b06732474036403830182017c0274047c007c0166023c006400530029044e7210000000721c0000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212905721e000000721f0000007220000000722a0000007239000000290372420000007243000000724f000000722300000072230000007202000000da106368616e67655f757365725f64617461ab000000730600000000021401100172540000002902da036b6579724f000000630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174027c003c006400530029034e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212904721e000000721f0000007220000000722a00000029027255000000724f000000722300000072230000007202000000da0f6368616e67655f6d65746164617461b20000007306000000000210010601725600000029057206000000da0c7468696e675f737472696e677207000000da056f776e65727243000000630500000000000000080000000500000043000000733a00000074006a017402640119006b027316740364028301820174046a057c0083017d0574006a017d067c056a067c017c027c047c0383047d077c07530029034e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721e000000721f0000007220000000722a00000072440000007245000000da096164645f7468696e672908720600000072570000007207000000725800000072430000007247000000723a0000007248000000722300000072230000007202000000da0c6372656174655f7468696e67b9000000730c0000000003100106010a0106011001725a00000029027242000000720600000063020000000000000008000000060000004300000073be00000074006a017c0183017d0274026a037d037c026a047c0083017d047c026a057c0083017d0574067c007c037c01830301007c026a077c0083017d067c06734a74087c0064011700830182017c0664026b04735e74087c0064011700830182017c067c06740964031900140018007d07740a6a0b7c077c047c0383030100740a6a0b7c0674096403190014007409640419007c0383030100740c7c007c037c0183030100740d6405050019007c067409640319001400370003003c006400530029064e7a10206973206e6f7420666f722073616c65720100000072160000007210000000721d000000290e72440000007245000000721e000000721f000000da096765745f6f776e6572da0b6765745f63726561746f72da165f5f6173736572745f616c72656164795f6f776e6564da106765745f70726963655f616d6f756e74722a0000007220000000720c0000007238000000da145f5f7472616e736665725f6f776e65727368697072220000002908724200000072060000007247000000723a0000007258000000da0763726561746f72da0c70726963655f616d6f756e74da1070726963655f616d6f756e745f706179722300000072230000007202000000da096275795f7468696e67c4000000731c00000000020a0106010a010a010c010a011001140110010e010e010c010c01726300000029047242000000723b000000da0b6465736372697074696f6e7206000000630400000000000000060000000400000043000000734200000074006a017c0383017d047c046a027c0083017d057c0564016b027324740364028301820174047c0074056a067c03830301007c046a077c007c01830201006400530029034e467a0e206973206f6e2061756374696f6e290872440000007245000000da0b6765745f61756374696f6e722a000000da125f5f6173736572745f6f776e657273686970721e000000721f000000da097365745f707269636529067242000000723b000000726400000072060000007247000000da0761756374696f6e722300000072230000007202000000da0a73656c6c5f7468696e67d6000000730a00000000020a010a0110010e01726900000029037242000000da096e65775f6f776e65727206000000630300000000000000040000000400000043000000732e00000074006a017d0374027c007c037c028303010074037c007c017c028303010074047c007c017c02830301006400530029014e2905721e000000721f0000007266000000725d000000725f00000029047242000000726a0000007206000000723a000000722300000072230000007202000000da087472616e73666572df0000007308000000000206010c010c01726b00000029037242000000da02746f7206000000630300000000000000040000000500000043000000732400000074006a017d0374027c007c037c0283030100640174037c037c007c0166033c006400530029024e542904721e000000721f0000007266000000723900000029047242000000726c0000007206000000723a000000722300000072230000007202000000da07617070726f7665e70000007306000000000206010c01726d00000029027242000000726c00000063020000000000000002000000050000004300000073140000006400740074016a027c007c0166033c006400530029014e29037239000000721e000000721f00000029027242000000726c000000722300000072230000007202000000da067265766f6b65ee00000073020000000002726e00000029047242000000726c000000da0c6d61696e5f6163636f756e747206000000630400000000000000050000000500000043000000735e00000074006a017d0474027c027c007c04660319007328740364017c029b0064027c049b009d048301820174047c007c027c038303010074057c007c017c038303010074067c007c017c0383030100640074027c027c007c0466033c006400530029034e7a3f596f752068617665206e6f74206265656e20676976656e20617070726f76616c20746f207472616e73666572207468697320757365722773206974656d2e2072270000002907721e000000721f0000007239000000722a0000007266000000725d000000725f00000029057242000000726c000000726f0000007206000000723a0000007223000000722300000072020000007238000000f3000000730e00000000020601100112010c010c010c01723800000029037242000000723a0000007206000000630300000000000000050000000300000043000000733000000074006a017c0283017d037c036a027c0083017d047c047c016b03732c74037c00640117007c011700830182016400530029024e7a1220616c7265616479206f776e656420627920290472440000007245000000725b000000722a00000029057242000000723a000000720600000072470000007258000000722300000072230000007202000000725d000000fe000000730600000000010a010a01725d000000630300000000000000050000000300000043000000733000000074006a017c0283017d037c036a027c0083017d047c047c016b02732c74037c00640117007c011700830182016400530029024e7a0e206e6f74206f776e656420627920290472440000007245000000725b000000722a00000029057242000000723a000000720600000072470000007258000000722300000072230000007202000000726600000004010000730600000000010a010a017266000000630300000000000000050000000300000043000000733e00000074006a017c0283017d037c036a027c0083017d047c036a037c007c01830201007c036a047c00830164016b04723a7c036a057c006401830201006400530029024e7201000000290672440000007245000000725b000000da097365745f6f776e6572725e000000726700000029057242000000726a00000072060000007247000000da096f6c645f6f776e6572722300000072230000007202000000725f0000000a010000730a00000000010a010a010c010e01725f000000292dda0863757272656e6379720c000000da09696d706f72746c69627244000000da0448617368da035f5f53723900000072200000007222000000722f000000da0b466f726569676e4861736872370000007224000000da085f5f6578706f7274da037374727231000000da046c69737472330000007235000000723c000000723e000000723f0000007241000000da04646963747249000000da05666c6f6174724a0000007211000000da03416e7972510000007252000000da03696e74725300000072540000007256000000725a00000072630000007269000000726b000000726d000000726e0000007238000000725d0000007266000000725f0000007223000000722300000072230000007202000000da083c6d6f64756c653e01000000736e0000000801080104010e0106010801060108010e010e0104010c03080e0601100c060112060601120d100b1007100a06011009060114080601120f1015060116080601140706011406060114060601120606021c0906011211060116080601140706011406060112040601160a12061006