0x608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063a217fddf11610093578063d505accf1161006e578063d505accf146103ff578063d539139314610412578063d547741f14610439578063dd62ed3e1461044c575f80fd5b8063a217fddf146103d2578063a9059cbb146103d9578063ca15c873146103ec575f80fd5b806384b0196e116100ce57806384b0196e146103325780639010d07c1461034d57806391d148541461038557806395d89b41146103ca575f80fd5b806370a08231146102d757806379cc67901461030c5780637ecebe001461031f575f80fd5b80632f2ff15d1161015e5780633644e515116101395780633644e5151461029657806336568abe1461029e57806340c10f19146102b157806342966c68146102c4575f80fd5b80632f2ff15d1461024b578063313ce5671461026057806332cb6b0c1461026f575f80fd5b806318160ddd1161018e57806318160ddd1461020457806323b872dd14610216578063248a9ca314610229575f80fd5b806301ffc9a7146101b457806306fdde03146101dc578063095ea7b3146101f1575b5f80fd5b6101c76101c23660046118dd565b610491565b60405190151581526020015b60405180910390f35b6101e46104ec565b6040516101d3919061197d565b6101c76101ff3660046119b7565b61057c565b6002545b6040519081526020016101d3565b6101c76102243660046119df565b610593565b610208610237366004611a18565b5f9081526008602052604090206001015490565b61025e610259366004611a2f565b6105b6565b005b604051601281526020016101d3565b6102087f00000000000000000000000000000000000000000813f3978f8940984400000081565b6102086105e0565b61025e6102ac366004611a2f565b6105ee565b61025e6102bf3660046119b7565b61064c565b61025e6102d2366004611a18565b6106ee565b6102086102e5366004611a59565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b61025e61031a3660046119b7565b6106fb565b61020861032d366004611a59565b610714565b61033a61073e565b6040516101d39796959493929190611a72565b61036061035b366004611b32565b61079c565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6101c7610393366004611a2f565b5f91825260086020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101e46107ba565b6102085f81565b6101c76103e73660046119b7565b6107c9565b6102086103fa366004611a18565b6107d6565b61025e61040d366004611b52565b6107ec565b6102087f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61025e610447366004611a2f565b61099a565b61020861045a366004611bbf565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806104e657506104e6826109be565b92915050565b6060600380546104fb90611be7565b80601f016020809104026020016040519081016040528092919081815260200182805461052790611be7565b80156105725780601f1061054957610100808354040283529160200191610572565b820191905f5260205f20905b81548152906001019060200180831161055557829003601f168201915b5050505050905090565b5f33610589818585610a54565b5060019392505050565b5f336105a0858285610a61565b6105ab858585610b28565b506001949350505050565b5f828152600860205260409020600101546105d081610bd1565b6105da8383610bdb565b50505050565b5f6105e9610c0e565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116331461063d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106478282610d44565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661067681610bd1565b817f00000000000000000000000000000000000000000813f3978f89409844000000816106a260025490565b6106ac9190611c65565b11156106e4576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105da8484610d6f565b6106f83382610dc9565b50565b610706823383610a61565b6107108282610dc9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600760205260408120546104e6565b5f6060805f805f606061074f610e23565b610757610e50565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b5f8281526009602052604081206107b39083610e7d565b9392505050565b6060600480546104fb90611be7565b5f33610589818585610b28565b5f8181526009602052604081206104e690610e88565b8342111561082e576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108868c73ffffffffffffffffffffffffffffffffffffffff165f90815260076020526040902080546001810190915590565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108ed82610e91565b90505f6108fc82878787610ed8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610983576040517f4b800e4600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528b166024820152604401610825565b61098e8a8a8a610a54565b50505050505050505050565b5f828152600860205260409020600101546109b481610bd1565b6105da8383610d44565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104e657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146104e6565b6106478383836001610f04565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105da5781811015610b1a576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610825565b6105da84848484035f610f04565b73ffffffffffffffffffffffffffffffffffffffff8316610b77576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b73ffffffffffffffffffffffffffffffffffffffff8216610bc6576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b610647838383611049565b6106f881336111f0565b5f80610be78484611277565b905080156107b3575f848152600960205260409020610c069084611374565b509392505050565b5f3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000da987c655ebc38c801db64a8608bc1aa56cd9a3116148015610c7357507f000000000000000000000000000000000000000000000000000000000000000146145b15610c9d57507f8194917454bbc74828131cc9b71450577a5db1bbf17d76ad8a8cc2e154cc415390565b6105e9604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f07385c41d2970644e51156ce025575ec5a5f63607fb9466d16638baebeaa6207918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f80610d508484611395565b905080156107b3575f848152600960205260409020610c069084611452565b73ffffffffffffffffffffffffffffffffffffffff8216610dbe576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b6107105f8383611049565b73ffffffffffffffffffffffffffffffffffffffff8216610e18576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b610710825f83611049565b60606105e97f53796e7465726e657420546f6b656e000000000000000000000000000000000f6005611473565b60606105e97f31000000000000000000000000000000000000000000000000000000000000016006611473565b5f6107b3838361151c565b5f6104e6825490565b5f6104e6610e9d610c0e565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f80610ee888888888611542565b925092509250610ef88282611635565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416610f53576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b73ffffffffffffffffffffffffffffffffffffffff8316610fa2576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260016020908152604080832093871683529290522082905580156105da578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161103b91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316611080578060025f8282546110759190611c65565b909155506111309050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015611105576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610825565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661115957600280548290039055611184565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111e391815260200190565b60405180910390a3505050565b5f82815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610710576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610825565b5f82815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661136d575f83815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561130b3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104e6565b505f6104e6565b5f6107b38373ffffffffffffffffffffffffffffffffffffffff8416611738565b5f82815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561136d575f83815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104e6565b5f6107b38373ffffffffffffffffffffffffffffffffffffffff841661177d565b606060ff831461148d5761148683611860565b90506104e6565b81805461149990611be7565b80601f01602080910402602001604051908101604052809291908181526020018280546114c590611be7565b80156115105780601f106114e757610100808354040283529160200191611510565b820191905f5260205f20905b8154815290600101906020018083116114f357829003601f168201915b505050505090506104e6565b5f825f01828154811061153157611531611c78565b905f5260205f200154905092915050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561157b57505f9150600390508261162b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156115cc573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661162257505f92506001915082905061162b565b92505f91508190505b9450945094915050565b5f82600381111561164857611648611ca5565b03611651575050565b600182600381111561166557611665611ca5565b0361169c576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156116b0576116b0611ca5565b036116ea576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610825565b60038260038111156116fe576116fe611ca5565b03610710576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610825565b5f81815260018301602052604081205461136d57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556104e6565b5f8181526001830160205260408120548015611857575f61179f600183611cd2565b85549091505f906117b290600190611cd2565b9050808214611811575f865f0182815481106117d0576117d0611c78565b905f5260205f200154905080875f0184815481106117f0576117f0611c78565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061182257611822611ce5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506104e6565b5f9150506104e6565b60605f61186c8361189d565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f8111156104e6576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f602082840312156118ed575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146107b3575f80fd5b5f81518084525f5b8181101561194057602081850181015186830182015201611924565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6107b3602083018461191c565b803573ffffffffffffffffffffffffffffffffffffffff811681146119b2575f80fd5b919050565b5f80604083850312156119c8575f80fd5b6119d18361198f565b946020939093013593505050565b5f805f606084860312156119f1575f80fd5b6119fa8461198f565b9250611a086020850161198f565b9150604084013590509250925092565b5f60208284031215611a28575f80fd5b5035919050565b5f8060408385031215611a40575f80fd5b82359150611a506020840161198f565b90509250929050565b5f60208284031215611a69575f80fd5b6107b38261198f565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e06020840152611aae60e084018a61191c565b8381036040850152611ac0818a61191c565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015611b2057835183529284019291840191600101611b04565b50909c9b505050505050505050505050565b5f8060408385031215611b43575f80fd5b50508035926020909101359150565b5f805f805f805f60e0888a031215611b68575f80fd5b611b718861198f565b9650611b7f6020890161198f565b95506040880135945060608801359350608088013560ff81168114611ba2575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215611bd0575f80fd5b611bd98361198f565b9150611a506020840161198f565b600181811c90821680611bfb57607f821691505b602082108103611c32577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156104e6576104e6611c38565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b818103818111156104e6576104e6611c38565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea164736f6c6343000818000a
0x61018060405234801562000011575f80fd5b5060405162002389380380620023898339810160408190526200003491620003cc565b6040805180820190915260018152603160f81b60208201528490819081866003620000608382620004e3565b5060046200006f8282620004e3565b50620000819150839050600562000144565b610120526200009281600662000144565b61014052815160208084019190912060e052815190820120610100524660a0526200011f60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250620001355f836200017c565b50610160525062000607915050565b5f60208351101562000163576200015b83620001b5565b905062000176565b81620001708482620004e3565b5060ff90505b92915050565b5f806200018a848462000200565b90508015620001ae575f848152600960205260409020620001ac9084620002af565b505b9392505050565b5f80829050601f81511115620001eb578260405163305a27a960e01b8152600401620001e29190620005af565b60405180910390fd5b8051620001f882620005e3565b179392505050565b5f8281526008602090815260408083206001600160a01b038516845290915281205460ff16620002a7575f8381526008602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200025e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000176565b505f62000176565b5f620001ae836001600160a01b0384165f818152600183016020526040812054620002a757508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915562000176565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620003365781810151838201526020016200031c565b50505f910152565b5f82601f8301126200034e575f80fd5b81516001600160401b03808211156200036b576200036b62000306565b604051601f8301601f19908116603f0116810190828211818310171562000396576200039662000306565b81604052838152866020858801011115620003af575f80fd5b620003c28460208301602089016200031a565b9695505050505050565b5f805f8060808587031215620003e0575f80fd5b84516001600160401b0380821115620003f7575f80fd5b62000405888389016200033e565b955060208701519150808211156200041b575f80fd5b506200042a878288016200033e565b604087015190945090506001600160a01b038116811462000449575f80fd5b6060959095015193969295505050565b600181811c908216806200046e57607f821691505b6020821081036200048d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004de57805f5260205f20601f840160051c81016020851015620004ba5750805b601f840160051c820191505b81811015620004db575f8155600101620004c6565b50505b505050565b81516001600160401b03811115620004ff57620004ff62000306565b620005178162000510845462000459565b8462000493565b602080601f8311600181146200054d575f8415620005355750858301515b5f19600386901b1c1916600185901b178555620005a7565b5f85815260208120601f198616915b828110156200057d578886015182559484019460019091019084016200055c565b50858210156200059b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b602081525f8251806020840152620005cf8160408501602087016200031a565b601f01601f19169190910160400192915050565b805160208083015191908110156200048d575f1960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051611d1f6200066a5f395f8181610274015261067901525f610e5701525f610e2a01525f610cf401525f610ccc01525f610c2701525f610c5101525f610c7b0152611d1f5ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063a217fddf11610093578063d505accf1161006e578063d505accf146103ff578063d539139314610412578063d547741f14610439578063dd62ed3e1461044c575f80fd5b8063a217fddf146103d2578063a9059cbb146103d9578063ca15c873146103ec575f80fd5b806384b0196e116100ce57806384b0196e146103325780639010d07c1461034d57806391d148541461038557806395d89b41146103ca575f80fd5b806370a08231146102d757806379cc67901461030c5780637ecebe001461031f575f80fd5b80632f2ff15d1161015e5780633644e515116101395780633644e5151461029657806336568abe1461029e57806340c10f19146102b157806342966c68146102c4575f80fd5b80632f2ff15d1461024b578063313ce5671461026057806332cb6b0c1461026f575f80fd5b806318160ddd1161018e57806318160ddd1461020457806323b872dd14610216578063248a9ca314610229575f80fd5b806301ffc9a7146101b457806306fdde03146101dc578063095ea7b3146101f1575b5f80fd5b6101c76101c23660046118dd565b610491565b60405190151581526020015b60405180910390f35b6101e46104ec565b6040516101d3919061197d565b6101c76101ff3660046119b7565b61057c565b6002545b6040519081526020016101d3565b6101c76102243660046119df565b610593565b610208610237366004611a18565b5f9081526008602052604090206001015490565b61025e610259366004611a2f565b6105b6565b005b604051601281526020016101d3565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b6102086105e0565b61025e6102ac366004611a2f565b6105ee565b61025e6102bf3660046119b7565b61064c565b61025e6102d2366004611a18565b6106ee565b6102086102e5366004611a59565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b61025e61031a3660046119b7565b6106fb565b61020861032d366004611a59565b610714565b61033a61073e565b6040516101d39796959493929190611a72565b61036061035b366004611b32565b61079c565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6101c7610393366004611a2f565b5f91825260086020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101e46107ba565b6102085f81565b6101c76103e73660046119b7565b6107c9565b6102086103fa366004611a18565b6107d6565b61025e61040d366004611b52565b6107ec565b6102087f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61025e610447366004611a2f565b61099a565b61020861045a366004611bbf565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806104e657506104e6826109be565b92915050565b6060600380546104fb90611be7565b80601f016020809104026020016040519081016040528092919081815260200182805461052790611be7565b80156105725780601f1061054957610100808354040283529160200191610572565b820191905f5260205f20905b81548152906001019060200180831161055557829003601f168201915b5050505050905090565b5f33610589818585610a54565b5060019392505050565b5f336105a0858285610a61565b6105ab858585610b28565b506001949350505050565b5f828152600860205260409020600101546105d081610bd1565b6105da8383610bdb565b50505050565b5f6105e9610c0e565b905090565b73ffffffffffffffffffffffffffffffffffffffff8116331461063d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106478282610d44565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661067681610bd1565b817f0000000000000000000000000000000000000000000000000000000000000000816106a260025490565b6106ac9190611c65565b11156106e4576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105da8484610d6f565b6106f83382610dc9565b50565b610706823383610a61565b6107108282610dc9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600760205260408120546104e6565b5f6060805f805f606061074f610e23565b610757610e50565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b5f8281526009602052604081206107b39083610e7d565b9392505050565b6060600480546104fb90611be7565b5f33610589818585610b28565b5f8181526009602052604081206104e690610e88565b8342111561082e576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108868c73ffffffffffffffffffffffffffffffffffffffff165f90815260076020526040902080546001810190915590565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108ed82610e91565b90505f6108fc82878787610ed8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610983576040517f4b800e4600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528b166024820152604401610825565b61098e8a8a8a610a54565b50505050505050505050565b5f828152600860205260409020600101546109b481610bd1565b6105da8383610d44565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104e657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146104e6565b6106478383836001610f04565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105da5781811015610b1a576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610825565b6105da84848484035f610f04565b73ffffffffffffffffffffffffffffffffffffffff8316610b77576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b73ffffffffffffffffffffffffffffffffffffffff8216610bc6576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b610647838383611049565b6106f881336111f0565b5f80610be78484611277565b905080156107b3575f848152600960205260409020610c069084611374565b509392505050565b5f3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610c7357507f000000000000000000000000000000000000000000000000000000000000000046145b15610c9d57507f000000000000000000000000000000000000000000000000000000000000000090565b6105e9604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f80610d508484611395565b905080156107b3575f848152600960205260409020610c069084611452565b73ffffffffffffffffffffffffffffffffffffffff8216610dbe576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b6107105f8383611049565b73ffffffffffffffffffffffffffffffffffffffff8216610e18576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b610710825f83611049565b60606105e97f00000000000000000000000000000000000000000000000000000000000000006005611473565b60606105e97f00000000000000000000000000000000000000000000000000000000000000006006611473565b5f6107b3838361151c565b5f6104e6825490565b5f6104e6610e9d610c0e565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f80610ee888888888611542565b925092509250610ef88282611635565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416610f53576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b73ffffffffffffffffffffffffffffffffffffffff8316610fa2576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610825565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260016020908152604080832093871683529290522082905580156105da578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161103b91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316611080578060025f8282546110759190611c65565b909155506111309050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015611105576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610825565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661115957600280548290039055611184565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111e391815260200190565b60405180910390a3505050565b5f82815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610710576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610825565b5f82815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661136d575f83815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561130b3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104e6565b505f6104e6565b5f6107b38373ffffffffffffffffffffffffffffffffffffffff8416611738565b5f82815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561136d575f83815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104e6565b5f6107b38373ffffffffffffffffffffffffffffffffffffffff841661177d565b606060ff831461148d5761148683611860565b90506104e6565b81805461149990611be7565b80601f01602080910402602001604051908101604052809291908181526020018280546114c590611be7565b80156115105780601f106114e757610100808354040283529160200191611510565b820191905f5260205f20905b8154815290600101906020018083116114f357829003601f168201915b505050505090506104e6565b5f825f01828154811061153157611531611c78565b905f5260205f200154905092915050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561157b57505f9150600390508261162b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156115cc573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661162257505f92506001915082905061162b565b92505f91508190505b9450945094915050565b5f82600381111561164857611648611ca5565b03611651575050565b600182600381111561166557611665611ca5565b0361169c576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156116b0576116b0611ca5565b036116ea576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610825565b60038260038111156116fe576116fe611ca5565b03610710576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610825565b5f81815260018301602052604081205461136d57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556104e6565b5f8181526001830160205260408120548015611857575f61179f600183611cd2565b85549091505f906117b290600190611cd2565b9050808214611811575f865f0182815481106117d0576117d0611c78565b905f5260205f200154905080875f0184815481106117f0576117f0611c78565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061182257611822611ce5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506104e6565b5f9150506104e6565b60605f61186c8361189d565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f8111156104e6576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f602082840312156118ed575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146107b3575f80fd5b5f81518084525f5b8181101561194057602081850181015186830182015201611924565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6107b3602083018461191c565b803573ffffffffffffffffffffffffffffffffffffffff811681146119b2575f80fd5b919050565b5f80604083850312156119c8575f80fd5b6119d18361198f565b946020939093013593505050565b5f805f606084860312156119f1575f80fd5b6119fa8461198f565b9250611a086020850161198f565b9150604084013590509250925092565b5f60208284031215611a28575f80fd5b5035919050565b5f8060408385031215611a40575f80fd5b82359150611a506020840161198f565b90509250929050565b5f60208284031215611a69575f80fd5b6107b38261198f565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e06020840152611aae60e084018a61191c565b8381036040850152611ac0818a61191c565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015611b2057835183529284019291840191600101611b04565b50909c9b505050505050505050505050565b5f8060408385031215611b43575f80fd5b50508035926020909101359150565b5f805f805f805f60e0888a031215611b68575f80fd5b611b718861198f565b9650611b7f6020890161198f565b95506040880135945060608801359350608088013560ff81168114611ba2575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215611bd0575f80fd5b611bd98361198f565b9150611a506020840161198f565b600181811c90821680611bfb57607f821691505b602082108103611c32577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156104e6576104e6611c38565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b818103818111156104e6576104e6611c38565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea164736f6c6343000818000a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000f71f736bb50125109967da6572c5acfde03f146700000000000000000000000000000000000000000813f3978f89409844000000000000000000000000000000000000000000000000000000000000000000000f53796e7465726e657420546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453594e5400000000000000000000000000000000000000000000000000000000