tx · 7XLScQ29pXMkqHTw6ufUuSYViALYvGzS74qUESaqB5Lz

3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z:  -0.02000000 Waves

2021.12.15 15:47 [1835393] smart account 3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z > SELF 0.00000000 Waves

{ "type": 13, "id": "7XLScQ29pXMkqHTw6ufUuSYViALYvGzS74qUESaqB5Lz", "fee": 2000000, "feeAssetId": null, "timestamp": 1639572428670, "version": 2, "chainId": 84, "sender": "3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z", "senderPublicKey": "FsjTCE3KV2vD2r7Du9D3J6Ea2T643E6zxzn6y24outXr", "proofs": [ "4Yn5EXq3M3qizqKBxmGQb9vY7KHgCykjfRzy4kPPtcjcZnog1S4DfEPDAyn65pFMc3sziY2i5io8dVekiPWgU7Du" ], "script": "base64:AAIDAAAAAAAABwoIARIFCgMBAQESBAoCCAIaDwoBQRIKcmFuZHNDb3VudBoTCgFCEg5yZW1haW5pbmdSYW5kcxoSCgFDEg1kYXRhS2V5c0NvdW50GhEKAUQSDGRhdGFEb25lVHhJZBoPCgFFEgpsYXN0T2Zmc2V0Gg0KAUYSCHNsb3dJZHgxGg0KAUcSCHNsb3dJZHgyGg0KAUgSCGZhc3RJZHgxGg0KAUkSCGZhc3RJZHgyGhAKAUoSC3JhbmRPckVtcHR5GhEKAUsSDGZ1bGxTdGF0ZVN0choYCgFMEhNleHRyYWN0R2FtZURhdGFMaXN0Gg4KAU0SCXNlc3Npb25JZBoPCgFOEgpyYXdEYXRhU3RyGg0KAU8SCG5leHRSYW5kGggKAVASA2RpdhoICgFREgNtaW4aEQoBUhIMY3VyclJhbmRzU3RyGhIKAVMSDXJlbWFpbmluZ0hhc2gaEAoBVBILbmV4dFJhbmRJbnQaEAoBVRILbmV4dFJhbmRTdHIaDgoBVhIJZHVwbGljYXRlGhEKAVcSDGdlbmVyYXRlUmFuZBoJCgFYEgRmcm9tGgcKAVkSAnRvGgwKAVoSB3JzYVNpZ24aDgoBYRIJUlNBUFVCTElDGgwKAmFBEgZib3VuZDMaEAoCYUISCmJhc2VQcmljZTMaCgoCYUMSBGRpdjMaCwoCYUQSBWRpZmYzGhEKAmFFEgttaW5SYW5kc1BtdBoMCgJhRhIGbWluUG10GgcKAmFHEgFpGhEKAmFIEgtyYW5nZUxlbmd0aBoUCgJhSRIObWF4UmFuZ2VMZW5ndGgaDwoCYUoSCXJhbmRUb0xlbhoTCgJhSxINcmFuZHNDb3VudExlbhoWCgJhTBIQZHluYW1pY1N0YXR1c0xlbhoTCgJhTRINbWF4UmFuZHNDb3VudBoOCgJhThIIcmFuZHNQbXQaDQoCYU8SB2RhdGFQbXQaEQoCYVASC2RhdGFUeENvdW50GhMKAmFREg1yYW5kc0NvdW50U3RyGg8KAmFSEglpbml0U3RhdGUaFAoCYVMSDmRyYXdQYXJhbXNMaXN0GhYKAmFUEhByZW1haW5SYW5kc0NvdW50Gg0KAmFVEgdmcm9tU3RyGgsKAmFWEgV0b1N0choVCgJhVxIPb3JnYW5pemVyUHViS2V5GhEKAmFYEgtyYW5kR2VuSW5mbxoVCgJhYRIPbGFzdE9mZnNldEJ5dGVzGhIKAmFiEgxjdXJyU2xvd0lkeDEaEgoCYWMSDGN1cnJTbG93SWR4MhoSCgJhZBIMY3VyckZhc3RJZHgxGhIKAmFlEgxjdXJyRmFzdElkeDIaEAoCYWYSCm5ld0luY0xpc3QaFAoCYWcSDnZhbGlkYXRlRHR4S2V5GgoKAmFoEgRkYXRhGhEKAmFpEgtkYXRhS2V5SW5mbxoSCgJhahIMa2V5U2Vzc2lvbklkGhAKAmFrEgprZXlQb3N0Zml4GhYKAmFsEhBrZXlQb3N0Zml4SW50T3B0GhMKAmFtEg1rZXlQb3N0Zml4SW50Gg0KAmFuEgckbWF0Y2gwGgkKAmFvEgNzdHIaHAoCYXASFnZhbGlkYXRlQW5kR2V0UmFuZHNQbXQaCQoCYXESA3BtdBoQCgJhchIKbWluRGF0YVBtdBoMCgJhcxIGYm91bmQxGhAKAmF0EgpiYXNlUHJpY2UxGgoKAmF1EgRkaXYxGgsKAmF2EgVkaWZmMRoMCgJhdxIGYm91bmQyGhAKAmF4EgpiYXNlUHJpY2UyGgoKAmF5EgRkaXYyGgsKAmF6EgVkaWZmMhoLCgFiEgZTRVJWRVIaDAoBYxIHV0FWRUxFVBoVCgFkEhBTRVNTSU9OSURGSVhTSVpFGhMKAWUSDlJBTkRDWUNMRVBSSUNFGhUKAWYSEE1BWFJBTkRTUEVSQ1lDTEUaDgoBZxIJU1RBVEVJTklUGg0KAWgSCERBVEFET05FGhIKAWkSDVNUQVRFRklOSVNIRUQaDQoBahIISWR4U3RhdGUaFAoBaxIPSWR4T3JnYW5pemVyUHViGhAKAWwSC0lkeFJhbmRGcm9tGg4KAW0SCUlkeFJhbmRUbxoSCgFuEg1JZHhSYW5kc0NvdW50GhgKAW8SE0lkeFJlbWFpblJhbmRzQ291bnQaFQoBcBIQSWR4RGF0YUtleXNDb3VudBoUCgFxEg9JZHhEYXRhRG9uZVR4SWQaEgoBchINSWR4TGFzdE9mZnNldBoRCgFzEgxJZHhDdXJyUmFuZHMaCAoBdBIDYWJzGggKAXUSA3ZhbBoXCgF2EhJmb3JtYXRTdGF0ZURhdGFTdHIaDgoBdxIJZHJhd1N0YXRlGhYKAXgSEW9yZ2FuaXplclB1YktleTU4Gg0KAXkSCHJhbmRGcm9tGgsKAXoSBnJhbmRUbwAAABoAAAAAAWEJAAJbAAAAAQIAAAFzYmFzZTY0OkxTMHRMUzFDUlVkSlRpQlFWVUpNU1VNZ1MwVlpMUzB0TFMwS1RVbEhaazFCTUVkRFUzRkhVMGxpTTBSUlJVSkJVVlZCUVRSSFRrRkVRMEpwVVV0Q1oxRkRSMjVIZDNaVmJHMW1URzVaVGtkeVJTc3pjelIyUVRaUlpBb3dhMjlQTnpkWlVqSkRkVFpwT1dRdmFsRTJPVkprVTBoSFJGbHdiM2hLTTFndlNTODRNbXRwUzFKUmNIbHdjV0pqVVM5VVkzSXhWMVZSTTFSRFFtazFDbkZtWXl0NFpXVnlPUzluY25oVU9FeEphekV2VkZoWFZFWkJRekEyTTNSM1YxZFBiVnBYY0dOUE4za3labFJ1VWtsa1NGUmxhVXMwVDFwelN5dDFaMlVLT1RkR1MzQlRiV294Y21wRlZERm1NMEYzU1VSQlVVRkNDaTB0TFMwdFJVNUVJRkJWUWt4SlF5QkxSVmt0TFMwdExRPT0AAAAAAWIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM040dmRxTXNFc0FaU0pXZndZSmNhQ2dVekFTSlRDMkJXc1AAAAAAAWMJAABoAAAAAgkAAGgAAAACAAAAAAAAAABkAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAFkAAAAAAAAAAAsAAAAAAFlCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAABYwAAAAAAAAAD6AAAAAABZgAAAAAAAAAADgAAAAABZwIAAAAESU5JVAAAAAABaAIAAAAFUkVBRFkAAAAAAWkCAAAACEZJTklTSEVEAAAAAAFqAAAAAAAAAAAAAAAAAAFrAAAAAAAAAAABAAAAAAFsAAAAAAAAAAACAAAAAAFtAAAAAAAAAAADAAAAAAFuAAAAAAAAAAAEAAAAAAFvAAAAAAAAAAAFAAAAAAFwAAAAAAAAAAAGAAAAAAFxAAAAAAAAAAAHAAAAAAFyAAAAAAAAAAAIAAAAAAFzAAAAAAAAAAANAQAAAAF0AAAAAQAAAAF1AwkAAGYAAAACAAAAAAAAAAAABQAAAAF1CQEAAAABLQAAAAEFAAAAAXUFAAAAAXUBAAAAAXYAAAAOAAAAAXcAAAABeAAA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", "height": 1835393, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 44mqXyrhGCGN16GAczGDEKpFaKUPhnwNhKTtVi4YVKF1 Next: 3XK6M7LVrqCt8ibtUXQt8Eix4muLWgwnXrtWbhE48PFS Diff:
OldNewDifferences
7676 then [0, (currSlowIdx1 + 1), (currSlowIdx2 + 1), 0, 1]
7777 else [0, currSlowIdx1, currSlowIdx2, (currFastIdx1 + 1), (currFastIdx2 + 1)]
7878 else [(lastOffsetBytes + 1), currSlowIdx1, currSlowIdx2, currFastIdx1, currFastIdx2]
79- let newOffsetBytes = 3
80- let newSlowIdx1 = 4
81- let newSlowIdx2 = 5
82- let newFastIdx1 = 6
83- let newFastIdx2 = 7
84- let byteVect = (((((((take(drop(rsaSign, newSlowIdx1), 1) + take(drop(rsaSign, 1), 1)) + take(drop(rsaSign, newFastIdx1), 1)) + take(drop(rsaSign, 3), 1)) + take(drop(rsaSign, newSlowIdx2), 1)) + take(drop(rsaSign, 5), 1)) + take(drop(rsaSign, 6), 1)) + take(drop(rsaSign, newFastIdx2), 1))
85- byteVect
79+ ((((newIncList[0] + newIncList[1]) + newIncList[2]) + newIncList[3]) + newIncList[4])
8680 }
8781
8882
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDR25Hd3ZVbG1mTG5ZTkdyRSszczR2QTZRZAowa29PNzdZUjJDdTZpOWQvalE2OVJkU0hHRFlwb3hKM1gvSS84MmtpS1JRcHlwcWJjUS9UY3IxV1VRM1RDQmk1CnFmYyt4ZWVyOS9ncnhUOExJazEvVFhXVEZBQzA2M3R3V1dPbVpXcGNPN3kyZlRuUklkSFRlaUs0T1pzSyt1Z2UKOTdGS3BTbWoxcmpFVDFmM0F3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ==")
55
66 let SERVER = addressFromStringValue("3N4vdqMsEsAZSJWfwYJcaCgUzASJTC2BWsP")
77
88 let WAVELET = ((100 * 1000) * 1000)
99
1010 let SESSIONIDFIXSIZE = 44
1111
1212 let RANDCYCLEPRICE = ((5 * WAVELET) / 1000)
1313
1414 let MAXRANDSPERCYCLE = 14
1515
1616 let STATEINIT = "INIT"
1717
1818 let DATADONE = "READY"
1919
2020 let STATEFINISHED = "FINISHED"
2121
2222 let IdxState = 0
2323
2424 let IdxOrganizerPub = 1
2525
2626 let IdxRandFrom = 2
2727
2828 let IdxRandTo = 3
2929
3030 let IdxRandsCount = 4
3131
3232 let IdxRemainRandsCount = 5
3333
3434 let IdxDataKeysCount = 6
3535
3636 let IdxDataDoneTxId = 7
3737
3838 let IdxLastOffset = 8
3939
4040 let IdxCurrRands = 13
4141
4242 func abs (val) = if ((0 > val))
4343 then -(val)
4444 else val
4545
4646
4747 func formatStateDataStr (drawState,organizerPubKey58,randFrom,randTo,randsCount,remainingRands,dataKeysCount,dataDoneTxId,lastOffset,slowIdx1,slowIdx2,fastIdx1,fastIdx2,randOrEmpty) = {
4848 let fullStateStr = ((((((((((((((((((((((((drawState + "_") + organizerPubKey58) + "_") + randFrom) + "_") + randTo) + "_") + randsCount) + "_") + remainingRands) + "_") + dataKeysCount) + "_") + dataDoneTxId) + "_") + lastOffset) + "_") + slowIdx1) + "_") + slowIdx2) + "_") + fastIdx1) + "_") + fastIdx2)
4949 if ((randOrEmpty == ""))
5050 then ((fullStateStr + "_") + "-")
5151 else ((fullStateStr + "_") + randOrEmpty)
5252 }
5353
5454
5555 func extractGameDataList (sessionId) = {
5656 let rawDataStr = getStringValue(this, sessionId)
5757 split(rawDataStr, "_")
5858 }
5959
6060
6161 func nextRand (div,min,currRandsStr,remainingRands,remainingHash) = {
6262 let nextRandInt = ((abs(toInt(remainingHash)) % div) + min)
6363 let nextRandStr = toString(nextRandInt)
6464 let duplicate = isDefined(indexOf(currRandsStr, nextRandStr))
6565 if (if (!(duplicate))
6666 then (remainingRands > 0)
6767 else false)
6868 then [((currRandsStr + "-") + nextRandStr), "yes"]
6969 else [currRandsStr, ""]
7070 }
7171
7272
7373 func generateRand (sessionId,from,to,rsaSign,currRandsStr,remainingRands,lastOffsetBytes,currSlowIdx1,currSlowIdx2,currFastIdx1,currFastIdx2) = {
7474 let newIncList = if (((lastOffsetBytes + 1) > 87))
7575 then if ((currFastIdx2 > 241))
7676 then [0, (currSlowIdx1 + 1), (currSlowIdx2 + 1), 0, 1]
7777 else [0, currSlowIdx1, currSlowIdx2, (currFastIdx1 + 1), (currFastIdx2 + 1)]
7878 else [(lastOffsetBytes + 1), currSlowIdx1, currSlowIdx2, currFastIdx1, currFastIdx2]
79- let newOffsetBytes = 3
80- let newSlowIdx1 = 4
81- let newSlowIdx2 = 5
82- let newFastIdx1 = 6
83- let newFastIdx2 = 7
84- let byteVect = (((((((take(drop(rsaSign, newSlowIdx1), 1) + take(drop(rsaSign, 1), 1)) + take(drop(rsaSign, newFastIdx1), 1)) + take(drop(rsaSign, 3), 1)) + take(drop(rsaSign, newSlowIdx2), 1)) + take(drop(rsaSign, 5), 1)) + take(drop(rsaSign, 6), 1)) + take(drop(rsaSign, newFastIdx2), 1))
85- byteVect
79+ ((((newIncList[0] + newIncList[1]) + newIncList[2]) + newIncList[3]) + newIncList[4])
8680 }
8781
8882
8983 func validateDtxKey (sessionId,dataKeysCount,data) = {
9084 let dataKeyInfo = split(data.key, "_")
9185 if ((size(dataKeyInfo) != 2))
9286 then throw("Invalid data key format. It must follow to ${sessionId}_${num}")
9387 else {
9488 let keySessionId = dataKeyInfo[0]
9589 let keyPostfix = dataKeyInfo[1]
9690 if ((sessionId != keySessionId))
9791 then throw(((("Several data keys have different sessionId: " + sessionId) + " and ") + keySessionId))
9892 else if (isDefined(getString(this, data.key)))
9993 then throw(("One of the data keys has already presented in account state: key=" + data.key))
10094 else if ((size(keyPostfix) > 4))
10195 then throw("Invalid data key format. It must follow to ${sessionId}_${num} where ${num} length couldn't be greater than 4")
10296 else if ((take(keyPostfix, 1) == "0"))
10397 then throw("Invalid data key format. It must follow to ${sessionId}_${num} where ${num} couldn't start from 0")
10498 else {
10599 let keyPostfixIntOpt = parseInt(keyPostfix)
106100 if (isDefined(keyPostfixIntOpt))
107101 then {
108102 let keyPostfixInt = extract(keyPostfixIntOpt)
109103 if (if ((1 > keyPostfixInt))
110104 then true
111105 else (keyPostfixInt > dataKeysCount))
112106 then throw((((("Invalid data key format. It must follow to ${sessionId}_${num}" + " where ${num} must be a valid int value from 1 to ") + toString(dataKeysCount)) + " but actualNum=") + toString(keyPostfixInt)))
113107 else match data.value {
114108 case str: String =>
115109 true
116110 case _ =>
117111 throw((sessionId + " draw: only String type is accepted for data transactions"))
118112 }
119113 }
120114 else throw((("Invalid data key format. It must follow to ${sessionId}_${num}" + " where ${num} must be a valid int value from 1 to 31250 but actualNum=") + keyPostfix))
121115 }
122116 }
123117 }
124118
125119
126120 func validateAndGetRandsPmt (randsCount,pmt,minDataPmt) = {
127121 let bound1 = 1000
128122 let basePrice1 = ((13 * WAVELET) / 100)
129123 let div1 = 50
130124 let diff1 = ((8 * WAVELET) / 100)
131125 let bound2 = 5000
132126 let basePrice2 = ((297 * WAVELET) / 100)
133127 let div2 = 1000
134128 let diff2 = ((143 * WAVELET) / 100)
135129 let bound3 = 50000
136130 let basePrice3 = ((1427 * WAVELET) / 100)
137131 let div3 = 5000
138132 let diff3 = ((705 * WAVELET) / 100)
139133 let minRandsPmt = if ((bound1 > randsCount))
140134 then (basePrice1 + ((randsCount / div1) * diff1))
141135 else if ((bound2 > randsCount))
142136 then (basePrice2 + (((randsCount / div2) - 1) * diff2))
143137 else if ((bound3 > randsCount))
144138 then (basePrice3 + (((randsCount / div3) - 1) * diff3))
145139 else throw("Please contact our sales team to generate more than 50k rands")
146140 let minPmt = (minRandsPmt + minDataPmt)
147141 if (isDefined(pmt.assetId))
148142 then throw("Only WAVES can be used as a payment for rands generation")
149143 else if ((minPmt > pmt.amount))
150144 then throw(((((("Attached payment is to small to generate " + toString(randsCount)) + " unique randoms numbers and upload at least 1 data tx: actualPmt=") + toString(pmt.amount)) + " but minPmt is ") + toString(minPmt)))
151145 else minRandsPmt
152146 }
153147
154148
155149 @Callable(i)
156150 func initDraw (randFrom,randTo,randsCount) = {
157151 let sessionId = toBase58String(i.transactionId)
158152 let rangeLength = ((randTo - randFrom) + 1)
159153 let maxRangeLength = (rangeLength / 2)
160154 let randToLen = size(toString((randTo - 1)))
161155 let randsCountLen = size(toString(randsCount))
162156 let dynamicStatusLen = (((2 * randToLen) + (2 * randsCountLen)) + 4)
163157 let maxRandsCount = (((5120 - 175) - dynamicStatusLen) / (randToLen + 1))
164158 if (if ((0 >= randFrom))
165159 then true
166160 else (0 >= randTo))
167161 then throw("randFrom and randTo must be greater than 0")
168162 else if ((randFrom >= randTo))
169163 then throw("randFrom must be strict less then randTo")
170164 else if ((randsCount > rangeLength))
171165 then throw(((((((("Impossible to generate " + toString(randsCount)) + " unique numbers for provided random range [") + toString(randFrom)) + ", ") + toString(randTo)) + "] with actual size ") + toString(rangeLength)))
172166 else if ((randsCount > maxRangeLength))
173167 then throw(((((((((("randsCount must be less then 50% of passed range length: range=[" + toString(randFrom)) + ", ") + toString(randTo)) + "], rangeLength=") + toString(rangeLength)) + " randsCount=") + toString(randsCount)) + " allowedRandsCount=") + toString(maxRangeLength)))
174168 else if ((randsCount > maxRandsCount))
175169 then throw(((((("randsCount couldn't be kept in 1 data entry: 1_randNumSpace=" + toString((randToLen + 1))) + " maxAllowedRandsCount=") + toString(maxRandsCount)) + " actualRandsCount=") + toString(randsCount)))
176170 else if (!(isDefined(i.payment)))
177171 then throw("Please provide payment to generate unique random numbers")
178172 else {
179173 let pmt = extract(i.payment)
180174 let minDataPmt = ((((WAVELET * 1) / 1000) * 33) + ((WAVELET * 4) / 1000))
181175 let randsPmt = validateAndGetRandsPmt(randsCount, pmt, minDataPmt)
182176 let dataPmt = (pmt.amount - randsPmt)
183177 let dataTxCount = (dataPmt / minDataPmt)
184178 let dataKeysCount = if ((31250 >= (dataTxCount * 5)))
185179 then (dataTxCount * 5)
186180 else 31250
187181 let organizerPubKey58 = toBase58String(i.callerPublicKey)
188182 let randsCountStr = toString(randsCount)
189183 let initState = formatStateDataStr(DATADONE, organizerPubKey58, toString(randFrom), toString(randTo), randsCountStr, randsCountStr, toString(dataKeysCount), toBase58String(i.transactionId), "0", "0", "1", "0", "1", "")
190184 ScriptResult(WriteSet([DataEntry(sessionId, initState)]), TransferSet([ScriptTransfer(SERVER, randsPmt, unit)]))
191185 }
192186 }
193187
194188
195189
196190 @Callable(i)
197191 func random (sessionId,rsaSign) = {
198192 let drawParamsList = extractGameDataList(sessionId)
199193 let drawState = drawParamsList[IdxState]
200194 let organizerPubKey58 = drawParamsList[IdxOrganizerPub]
201195 let randsCountStr = drawParamsList[IdxRandsCount]
202196 let remainRandsCount = parseIntValue(drawParamsList[IdxRemainRandsCount])
203197 let lastOffsetBytes = parseIntValue(drawParamsList[IdxLastOffset])
204198 let currRandsStr = drawParamsList[IdxCurrRands]
205199 let fromStr = drawParamsList[IdxRandFrom]
206200 let toStr = drawParamsList[IdxRandTo]
207201 let dataDoneTxId = drawParamsList[IdxDataDoneTxId]
208202 let slowIdx1 = parseIntValue(drawParamsList[9])
209203 let slowIdx2 = parseIntValue(drawParamsList[10])
210204 let fastIdx1 = parseIntValue(drawParamsList[11])
211205 let fastIdx2 = parseIntValue(drawParamsList[12])
212206 let from = parseIntValue(fromStr)
213207 let to = parseIntValue(toStr)
214208 let organizerPubKey = fromBase58String(organizerPubKey58)
215209 if ((drawState != DATADONE))
216210 then throw((sessionId + " draw: it must be in READY state to generate random numbers"))
217211 else if (false)
218212 then throw("Invalid RSA signature")
219213 else {
220214 let randGenInfo = generateRand(sessionId, from, to, rsaSign, currRandsStr, remainRandsCount, lastOffsetBytes, slowIdx1, slowIdx2, fastIdx1, fastIdx2)
221215 WriteSet([DataEntry("byteVect", randGenInfo), DataEntry((sessionId + "test"), (toBytes(sessionId) + toBytes(dataDoneTxId))), DataEntry((sessionId + "test-2"), "ds")])
222216 }
223217 }
224218
225219

github/deemru/w8io/169f3d6 
42.89 ms