// brython.js brython.info
// version [3, 3, 0, 'alpha', 0]
// implementation [3, 2, 4, 'final', 0]
// version compiled from commented, indented source files at github.com/brython-dev/brython
var __BRYTHON__=__BRYTHON__ ||{}
;(function($B){
var scripts=document.getElementsByTagName('script')
var this_url=scripts[scripts.length-1].src
var elts=this_url.split('/')
elts.pop()
var $path=$B.brython_path=elts.join('/')+'/'
var $href=$B.script_path=window.location.href
var $href_elts=$href.split('/')
$href_elts.pop()
var $script_dir=$B.script_dir=$href_elts.join('/')
$B.$py_module_path={}
$B.$py_src={}
$B.path=[$path+'Lib',$path+'libs',$script_dir,$path+'Lib/site-packages']
$B.bound={}
$B.type={}
$B.async_enabled=false
if($B.async_enabled)$B.block={}
$B.modules={}
$B.imported={}
$B.vars={}
$B._globals={}
$B.frames_stack=[]
$B.builtins={__repr__:function(){return "<module 'builtins>'"},__str__:function(){return "<module 'builtins'>"},}
$B.builtins_block={id:'__builtins__',module:'__builtins__'}
$B.modules['__builtins__']=$B.builtins_block
$B.bound['__builtins__']={'__BRYTHON__':true,'$eval':true,'$open': true}
$B.bound['__builtins__']['BaseException']=true
$B.type['__builtins__']={}
$B.builtin_funcs={}
$B.__getattr__=function(attr){return this[attr]}
$B.__setattr__=function(attr,value){
if(['debug','stdout','stderr'].indexOf(attr)>-1){$B[attr]=value}
else{throw $B.builtins.AttributeError('__BRYTHON__ object has no attribute '+attr)}}
$B.language=window.navigator.userLanguage ||window.navigator.language
$B.charset=document.characterSet ||document.inputEncoding ||"utf-8"
$B.max_int=Math.pow(2,53)-1
$B.min_int=-$B.max_int
$B.$py_next_hash=-Math.pow(2,53)
$B.$py_UUID=0
$B.lambda_magic=Math.random().toString(36).substr(2,8)
$B.callbacks={}
var has_storage=typeof(Storage)!=="undefined"
if(has_storage){$B.has_local_storage=false
try{
if(localStorage){$B.local_storage=localStorage
$B.has_local_storage=true}}catch(err){}
$B.has_session_storage=false
try{
if(sessionStorage){$B.session_storage=sessionStorage
$B.has_session_storage=true}}catch(err){}}else{
$B.has_local_storage=false
$B.has_session_storage=false}
$B.globals=function(){
return $B.frames_stack[$B.frames_stack.length-1][3]}})(__BRYTHON__)
__BRYTHON__.implementation=[3,2,4,'final',0]
__BRYTHON__.__MAGIC__="3.2.4"
__BRYTHON__.version_info=[3,3,0,'alpha',0]
__BRYTHON__.compiled_date="2016-01-16 09:01:25.098836"
__BRYTHON__.builtin_module_names=["posix","sys","errno","time","_ajax","_browser","_html","_jsre","_multiprocessing","_posixsubprocess","_svg","_sys","builtins","dis","hashlib","javascript","json","long_int","math","modulefinder","random","_abcoll","_codecs","_collections","_csv","_functools","_imp","_io","_random","_socket","_sre","_string","_struct","_sysconfigdata","_testcapi","_thread","_warnings","_weakref"]

;(function($B){var js,$pos,res,$op
var keys=$B.keys=function(obj){var res=[],pos=0
for(var attr in obj){res[pos++]=attr}
res.sort()
return res}
var clone=$B.clone=function(obj){var res={}
for(var attr in obj){res[attr]=obj[attr]}
return res}
$B.last=function(table){return table[table.length-1]}
$B.list2obj=function(list,value){var res={},i=list.length
if(value===undefined){value=true}
while(i-->0){res[list[i]]=value}
return res}
var $operators={"//=":"ifloordiv",">>=":"irshift","<<=":"ilshift","**=":"ipow","**":"pow","//":"floordiv","<<":"lshift",">>":"rshift","+=":"iadd","-=":"isub","*=":"imul","/=":"itruediv","%=":"imod","&=":"iand","|=":"ior","^=":"ixor","+":"add","-":"sub","*":"mul","/":"truediv","%":"mod","&":"and","|":"or","~":"invert","^":"xor","<":"lt",">":"gt","<=":"le",">=":"ge","==":"eq","!=":"ne","or":"or","and":"and","in":"in","is":"is","not_in":"not_in","is_not":"is_not" }
var $augmented_assigns={"//=":"ifloordiv",">>=":"irshift","<<=":"ilshift","**=":"ipow","+=":"iadd","-=":"isub","*=":"imul","/=":"itruediv","%=":"imod","&=":"iand","|=":"ior","^=":"ixor"}
var noassign=$B.list2obj(['True','False','None','__debug__'])
var $op_order=[['or'],['and'],['in','not_in'],['<','<=','>','>=','!=','==','is','is_not'],['|'],['^'],['&'],['>>','<<'],['+'],['-'],['*','/','//','%'],['unary_neg','unary_inv','unary_pos'],['**']
]
var $op_weight={}
var $weight=1
for(var $i=0;$i<$op_order.length;$i++){var _tmp=$op_order[$i]
for(var $j=0;$j<_tmp.length;$j++){$op_weight[_tmp[$j]]=$weight}
$weight++}
var $loop_num=0
$B.func_magic=Math.random().toString(36).substr(2,8)
function $_SyntaxError(C,msg,indent){
var ctx_node=C
while(ctx_node.type!=='node'){ctx_node=ctx_node.parent}
var tree_node=ctx_node.node
var module=tree_node.module
var line_num=tree_node.line_num
if(indent!==undefined){line_num++}
if(indent===undefined){if(Array.isArray(msg)){$B.$SyntaxError(module,msg[0],$pos)}
if(msg==="Triple string end not found"){
$B.$SyntaxError(module,'invalid syntax : triple string end not found',$pos)}
$B.$SyntaxError(module,'invalid syntax',$pos)}else{throw $B.$IndentationError(module,msg,$pos)}}
function $Node(type){this.type=type
this.children=[]
this.yield_atoms=[]
this.add=function(child){
this.children[this.children.length]=child
child.parent=this
child.module=this.module}
this.insert=function(pos,child){
this.children.splice(pos,0,child)
child.parent=this
child.module=this.module}
this.toString=function(){return "<object 'Node'>"}
this.show=function(indent){
var res=''
if(this.type==='module'){for(var i=0;i<this.children.length;i++){res +=this.children[i].show(indent)}
return res}
indent=indent ||0
res +=' '.repeat(indent)
res +=this.C
if(this.children.length>0)res +='{'
res +='\n'
for(var i=0;i<this.children.length;i++){res +='['+i+'] '+this.children[i].show(indent+4)}
if(this.children.length>0){res +=' '.repeat(indent)
res+='}\n'}
return res}
this.to_js=function(indent){
if(this.js!==undefined)return this.js
this.res=[]
var pos=0
this.unbound=[]
if(this.type==='module'){for(var i=0;i<this.children.length;i++){this.res[pos++]=this.children[i].to_js()
this.children[i].js_index=pos }
this.js=this.res.join('')
return this.js}
indent=indent ||0
var ctx_js=this.C.to_js()
if(ctx_js){
this.res[pos++]=' '.repeat(indent)
this.res[pos++]=ctx_js
this.js_index=pos 
if(this.children.length>0)this.res[pos++]='{'
this.res[pos++]='\n'
for(var i=0;i<this.children.length;i++){this.res[pos++]=this.children[i].to_js(indent+4)
this.children[i].js_index=pos }
if(this.children.length>0){this.res[pos++]=' '.repeat(indent)
this.res[pos++]='}\n'}}
this.js=this.res.join('')
return this.js}
this.transform=function(rank){
if(this.yield_atoms.length>0){
this.parent.children.splice(rank,1)
var offset=0
for(var i=0;i<this.yield_atoms.length;i++){
var temp_node=new $Node()
var js='$yield_value'+$loop_num
js +='='+(this.yield_atoms[i].to_js()||'None')
new $NodeJSCtx(temp_node,js)
this.parent.insert(rank+offset,temp_node)
var yield_node=new $Node()
this.parent.insert(rank+offset+1,yield_node)
var yield_expr=new $YieldCtx(new $NodeCtx(yield_node))
new $StringCtx(yield_expr,'$yield_value'+$loop_num)
var set_yield=new $Node()
set_yield.is_set_yield_value=true
js=$loop_num
new $NodeJSCtx(set_yield,js)
this.parent.insert(rank+offset+2,set_yield)
this.yield_atoms[i].to_js=(function(x){return function(){return '$yield_value'+x}})($loop_num)
$loop_num++
offset +=3}
this.parent.insert(rank+offset,this)
this.yield_atoms=[]
return offset+1}
if(this.type==='module'){
this.doc_string=$get_docstring(this)
var i=0
while(i<this.children.length){var offset=this.children[i].transform(i)
if(offset===undefined){offset=1}
i +=offset}}else{var elt=this.C.tree[0],ctx_offset
if(elt.transform !==undefined){ctx_offset=elt.transform(this,rank)}
var i=0
while(i<this.children.length){var offset=this.children[i].transform(i)
if(offset===undefined){offset=1}
i +=offset}
if(ctx_offset===undefined){ctx_offset=1}
return ctx_offset}}
this.clone=function(){var res=new $Node(this.type)
for(var attr in this){res[attr]=this[attr]}
return res}}
function $AbstractExprCtx(C,with_commas){this.type='abstract_expr'
this.with_commas=with_commas
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(abstract_expr '+with_commas+') '+this.tree}
this.to_js=function(){this.js_processed=true
if(this.type==='list')return '['+$to_js(this.tree)+']'
return $to_js(this.tree)}}
function $AliasCtx(C){
this.type='ctx_manager_alias'
this.parent=C
this.tree=[]
C.tree[C.tree.length-1].alias=this}
function $AnnotationCtx(C){
this.type='annotation'
this.parent=C
this.tree=[]
C.annotation=this
this.toString=function(){return '(annotation) '+this.tree}
this.to_js=function(){return $to_js(this.tree)}}
function $AssertCtx(C){
this.type='assert'
this.toString=function(){return '(assert) '+this.tree}
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.transform=function(node,rank){if(this.tree[0].type==='list_or_tuple'){
var condition=this.tree[0].tree[0]
var message=this.tree[0].tree[1]}else{var condition=this.tree[0]
var message=null}
var new_ctx=new $ConditionCtx(node.C,'if')
var not_ctx=new $NotCtx(new_ctx)
not_ctx.tree=[condition]
node.C=new_ctx
var new_node=new $Node()
var js='throw AssertionError("AssertionError")'
if(message !==null){js='throw AssertionError(str('+message.to_js()+'))'}
new $NodeJSCtx(new_node,js)
node.add(new_node)}}
function $AssignCtx(C){
var ctx=C
while(ctx){if(ctx.type=='assert'){$_SyntaxError(C,'invalid syntax - assign')}
ctx=ctx.parent}
this.type='assign'
C.parent.tree.pop()
C.parent.tree[C.parent.tree.length]=this
this.parent=C.parent
this.tree=[C]
var scope=$get_scope(this)
if(C.type=='expr' && C.tree[0].type=='call'){$_SyntaxError(C,["can't assign to function call "])}else if(C.type=='list_or_tuple' ||
(C.type=='expr' && C.tree[0].type=='list_or_tuple')){if(C.type=='expr'){C=C.tree[0]}
for(var name in C.ids()){$B.bound[scope.id][name]=true}}else if(C.type=='assign'){for(var i=0;i<C.tree.length;i++){var assigned=C.tree[i].tree[0]
if(assigned.type=='id'){$B.bound[scope.id][assigned.value]=true}}}else{var assigned=C.tree[0]
if(assigned && assigned.type=='id'){if(noassign[assigned.value]===true){$_SyntaxError(C,["can't assign to keyword"])}
assigned.bound=true
if(!$B._globals[scope.id]||
$B._globals[scope.id][assigned.value]===undefined){
var node=$get_node(this)
node.bound_before=$B.keys($B.bound[scope.id])
$B.bound[scope.id][assigned.value]=true}}}
this.guess_type=function(){if(this.tree[0].type=="expr" && this.tree[0].tree[0].type=="id"){$set_type(scope,this.tree[0],this.tree[1])}else if(this.tree[0].type=='assign'){var left=this.tree[0].tree[0].tree[0]
var right=this.tree[0].tree[1].tree[0]
$set_type(scope,right,this.tree[1].tree[0])
this.tree[0].guess_type()}else{}}
this.toString=function(){return '(assign) '+this.tree[0]+'='+this.tree[1]}
this.transform=function(node,rank){
var scope=$get_scope(this)
var left=this.tree[0],right=this.tree[1],assigned=[]
while(left.type=='assign'){assigned.push(left.tree[1])
left=left.tree[0]}
if(assigned.length>0){assigned.push(left)
var ctx=node.C
ctx.tree=[]
var nleft=new $RawJSCtx(ctx,'var $temp'+$loop_num)
nleft.tree=ctx.tree
nassign=new $AssignCtx(nleft)
nassign.tree[1]=right
for(var i=0;i<assigned.length;i++){var new_node=new $Node(),node_ctx=new $NodeCtx(new_node)
node.parent.insert(rank+1,new_node)
assigned[i].parent=node_ctx
var assign=new $AssignCtx(assigned[i])
new $RawJSCtx(assign,'$temp'+$loop_num)}
return assigned.length-1}
var left_items=null
switch(left.type){case 'expr':
if(left.tree.length>1){left_items=left.tree}else if(left.tree[0].type==='list_or_tuple'||left.tree[0].type==='target_list'){left_items=left.tree[0].tree}else if(left.tree[0].type=='id'){
var name=left.tree[0].value
if($B._globals && $B._globals[scope.id]
&& $B._globals[scope.id][name]){void(0)}else{left.tree[0].bound=true}}
break
case 'target_list': 
case 'list_or_tuple':
left_items=left.tree}
if(left_items===null){return}
var right=this.tree[1]
var right_items=null
if(right.type==='list'||right.type==='tuple'||
(right.type==='expr' && right.tree.length>1)){right_items=right.tree}
if(right_items!==null){
if(right_items.length>left_items.length){throw Error('ValueError : too many values to unpack (expected '+left_items.length+')')}else if(right_items.length<left_items.length){throw Error('ValueError : need more than '+right_items.length+' to unpack')}
var new_nodes=[],pos=0
var new_node=new $Node()
new $NodeJSCtx(new_node,'void(0)')
new_nodes[pos++]=new_node
var $var='$temp'+$loop_num
var new_node=new $Node()
new $NodeJSCtx(new_node,'var '+$var+'=[], $pos=0')
new_nodes[pos++]=new_node
for(var i=0;i<right_items.length;i++){var js=$var+'[$pos++]='+right_items[i].to_js()
var new_node=new $Node()
new $NodeJSCtx(new_node,js)
new_nodes[pos++]=new_node}
for(var i=0;i<left_items.length;i++){var new_node=new $Node()
new_node.id=$get_node(this).module
var C=new $NodeCtx(new_node)
left_items[i].parent=C
var assign=new $AssignCtx(left_items[i],false)
assign.tree[1]=new $JSCode($var+'['+i+']')
new_nodes[pos++]=new_node}
node.parent.children.splice(rank,1)
for(var i=new_nodes.length-1;i>=0;i--){node.parent.insert(rank,new_nodes[i])}
$loop_num++}else{
var new_node=new $Node()
new_node.line_num=node.line_num
var js='var $right'+$loop_num+'=getattr'
js +='(iter('+right.to_js()+'),"__next__");'
new $NodeJSCtx(new_node,js)
var new_nodes=[new_node],pos=1
var rlist_node=new $Node()
var $var='$rlist'+$loop_num
js='var '+$var+'=[], $pos=0;'
js +='while(1){try{'+$var+'[$pos++]=$right'
js +=$loop_num+'()}catch(err){break}};'
new $NodeJSCtx(rlist_node,js)
new_nodes[pos++]=rlist_node
var packed=null
for(var i=0;i<left_items.length;i++){var expr=left_items[i]
if(expr.type=='packed' ||
(expr.type=='expr' && expr.tree[0].type=='packed')){packed=i
break}}
var check_node=new $Node()
var min_length=left_items.length
if(packed!==null){min_length--}
js='if($rlist'+$loop_num+'.length<'+min_length+')'
js +='{throw ValueError("need more than "+$rlist'+$loop_num
js +='.length+" value" + ($rlist'+$loop_num+'.length>1 ?'
js +=' "s" : "")+" to unpack")}'
new $NodeJSCtx(check_node,js)
new_nodes[pos++]=check_node
if(packed==null){var check_node=new $Node()
var min_length=left_items.length
js='if($rlist'+$loop_num+'.length>'+min_length+')'
js +='{throw ValueError("too many values to unpack '
js +='(expected '+left_items.length+')")}'
new $NodeJSCtx(check_node,js)
new_nodes[pos++]=check_node}
var j=0
for(var i=0;i<left_items.length;i++){var new_node=new $Node()
new_node.id=scope.id
var C=new $NodeCtx(new_node)
left_items[i].parent=C
var assign=new $AssignCtx(left_items[i],false)
var js='$rlist'+$loop_num
if(packed==null ||i<packed){js +='['+i+']'}else if(i==packed){js +='.slice('+i+',$rlist'+$loop_num+'.length-'
js +=(left_items.length-i-1)+')'}else{js +='[$rlist'+$loop_num+'.length-'+(left_items.length-i)+']'}
assign.tree[1]=new $JSCode(js)
new_nodes[pos++]=new_node}
node.parent.children.splice(rank,1)
for(var i=new_nodes.length-1;i>=0;i--){node.parent.insert(rank,new_nodes[i])}
$loop_num++}}
this.to_js=function(){this.js_processed=true
if(this.parent.type==='call'){
return '{$nat:"kw",name:'+this.tree[0].to_js()+',value:'+this.tree[1].to_js()+'}'}
var left=this.tree[0]
if(left.type==='expr')left=left.tree[0]
var right=this.tree[1]
if(left.type=='attribute' ||left.type=='sub'){
var node=$get_node(this),right_js=right.to_js()
var res='',rvar='',$var='$temp'+$loop_num
if(right.type=='expr' && right.tree[0]!==undefined &&
right.tree[0].type=='call' &&
('eval'==right.tree[0].func.value ||
'exec'==right.tree[0].func.value)){res +='var '+$var+'='+right_js+';\n'
rvar=$var}else if(right.type=='expr' && right.tree[0]!==undefined &&
right.tree[0].type=='sub'){res +='var '+$var+'='+right_js+';\n'
rvar=$var}else{rvar=right_js}
if(left.type==='attribute'){
$loop_num++
left.func='setattr'
res +=left.to_js()
left.func='getattr'
res=res.substr(0,res.length-1)
return res + ','+rvar+');None;'}
if(left.type==='sub'){
var seq=left.value.to_js(),temp='$temp'+$loop_num,type
if(left.value.type=='id'){type=$get_node(this).locals[left.value.value]}
$loop_num++
var res='var '+temp+'='+seq+'\n'
if(type!=='list'){res +='if(Array.isArray('+temp+') && !'+temp+'.__class__){'}
if(left.tree.length==1){res +='$B.set_list_key('+temp+','+
(left.tree[0].to_js()+''||'null')+','+
right.to_js()+')'}else if(left.tree.length==2){res +='$B.set_list_slice('+temp+','+
(left.tree[0].to_js()+''||'null')+','+
(left.tree[1].to_js()+''||'null')+','+
right.to_js()+')'}else if(left.tree.length==3){res +='$B.set_list_slice_step('+temp+','+
(left.tree[0].to_js()+''||'null')+','+
(left.tree[1].to_js()+''||'null')+','+
(left.tree[2].to_js()+''||'null')+','+
right.to_js()+')'}
if(type=='list'){return res}
res +='\n}else{'
if(left.tree.length==1){res +='$B.$setitem('+left.value.to_js()
res +=','+left.tree[0].to_js()+','+right_js+')};None;'}else{left.func='setitem' 
res +=left.to_js()
res=res.substr(0,res.length-1)
left.func='getitem' 
res +=','+right_js+')};None;'}
return res}}
return left.to_js()+'='+right.to_js()}}
function $AttrCtx(C){
this.type='attribute'
this.value=C.tree[0]
this.parent=C
C.tree.pop()
C.tree[C.tree.length]=this
this.tree=[]
this.func='getattr' 
this.toString=function(){return '(attr) '+this.value+'.'+this.name}
this.to_js=function(){this.js_processed=true
return this.func+'('+this.value.to_js()+',"'+this.name+'")'}}
function $AugmentedAssignCtx(C,op){
this.type='augm_assign'
this.parent=C.parent
C.parent.tree.pop()
C.parent.tree[C.parent.tree.length]=this
this.op=op
this.tree=[C]
var scope=this.scope=$get_scope(this)
if(C.type=='expr' && C.tree[0].type=='id'){var name=C.tree[0].value
if(noassign[name]===true){$_SyntaxError(C,["can't assign to keyword"])}else if((scope.ntype=='def'||scope.ntype=='generator')&&
$B.bound[scope.id][name]===undefined){if(scope.globals===undefined ||scope.globals.indexOf(name)==-1){
C.tree[0].unbound=true}}}
$get_node(this).bound_before=$B.keys($B.bound[scope.id])
this.module=scope.module
this.toString=function(){return '(augm assign) '+this.tree}
this.transform=function(node,rank){var func='__'+$operators[op]+'__'
var offset=0,parent=node.parent
var line_num=node.line_num,lnum_set=false
parent.children.splice(rank,1)
var left_is_id=(this.tree[0].type=='expr' && 
this.tree[0].tree[0].type=='id')
if(left_is_id){
this.tree[0].tree[0].augm_assign=true
if($B.debug>0){var check_node=$NodeJS('if('+this.tree[0].to_js()+
'===undefined){throw NameError("name \''+
                    this.tree[0].tree[0].value+'\' is not defined")}')
node.parent.insert(rank,check_node)
offset++}
var left_id=this.tree[0].tree[0].value,was_bound=$B.bound[this.scope.id][left_id]!==undefined,left_id_unbound=this.tree[0].tree[0].unbound}
var right_is_int=(this.tree[1].type=='expr' && 
this.tree[1].tree[0].type=='int')
var right=right_is_int ? this.tree[1].tree[0].to_js(): '$temp'
if(!right_is_int){
var new_node=new $Node()
new_node.line_num=line_num
lnum_set=true
new $NodeJSCtx(new_node,'var $temp,$left;')
parent.insert(rank,new_node)
offset++
var new_node=new $Node()
new_node.id=this.scope.id
var new_ctx=new $NodeCtx(new_node)
var new_expr=new $ExprCtx(new_ctx,'js',false)
var _id=new $RawJSCtx(new_expr,'$temp')
var assign=new $AssignCtx(new_expr)
assign.tree[1]=this.tree[1]
_id.parent=assign
parent.insert(rank+offset,new_node)
offset++}
var prefix='',in_class=false
switch(op){case '+=':
case '-=':
case '*=':
case '/=':
if(left_is_id){var scope=this.scope,local_ns='$local_'+scope.id.replace(/\./g,'_'),global_ns='$local_'+scope.module.replace(/\./g,'_'),prefix
switch(scope.ntype){case 'module':
prefix=global_ns
break
case 'def':
case 'generator':
if(scope.globals && scope.globals.indexOf(C.tree[0].value)>-1){prefix=global_ns}else{prefix='$locals'}
break;
case 'class':
var new_node=new $Node()
if(!lnum_set){new_node.line_num=line_num;lnum_set=true}
new $NodeJSCtx(new_node,'var $left='+C.to_js())
parent.insert(rank+offset,new_node)
in_class=true
offset++}}}
var left=C.tree[0].to_js()
prefix=prefix && !C.tree[0].unknown_binding && left_id_unbound===undefined
var op1=op.charAt(0)
if(prefix){var left1=in_class ? '$left' : left
var new_node=new $Node()
if(!lnum_set){new_node.line_num=line_num;lnum_set=true}
js=right_is_int ? 'if(' : 'if(typeof $temp.valueOf()=="number" && '
js +=left1+'.constructor===Number' 
js +='&& '+left+op1+right+'>$B.min_int && '+left+op1+right+
'< $B.max_int){'
js +=right_is_int ? '(' : '(typeof $temp=="number" && '
js +='typeof '+left1+'=="number") ? '
js +=left+op+right
js +=' : ('+left1+'.constructor===Number ? '
js +=left+'=float('+left+op1
js +=right_is_int ? right : right+'.valueOf()'
js +=') : '+left + op
js +=right_is_int ? right : right+'.valueOf()'
js +=')}'
new $NodeJSCtx(new_node,js)
parent.insert(rank+offset,new_node)
offset++}
var aaops={'+=':'add','-=':'sub','*=':'mul'}
if(C.tree[0].type=='sub' &&
('+='==op ||'-='==op ||'*='==op)&& 
C.tree[0].tree.length==1){var js1='$B.augm_item_'+aaops[op]+'('
js1 +=C.tree[0].value.to_js()
js1 +=','+C.tree[0].tree[0].to_js()+','
js1 +=right+');None;'
var new_node=new $Node()
if(!lnum_set){new_node.line_num=line_num;lnum_set=true}
new $NodeJSCtx(new_node,js1)
parent.insert(rank+offset,new_node)
offset++
return}
var new_node=new $Node()
if(!lnum_set){new_node.line_num=line_num;lnum_set=true}
var js=''
if(prefix){js +='else '}
js +='if(!hasattr('+C.to_js()+',"'+func+'"))'
new $NodeJSCtx(new_node,js)
parent.insert(rank+offset,new_node)
offset ++
var aa1=new $Node()
aa1.id=this.scope.id
var ctx1=new $NodeCtx(aa1)
var expr1=new $ExprCtx(ctx1,'clone',false)
if(left_id_unbound){new $RawJSCtx(expr1,'$locals["'+left_id+'"]')}else{expr1.tree=C.tree
for(var i=0;i<expr1.tree.length;i++){expr1.tree[i].parent=expr1}}
var assign1=new $AssignCtx(expr1)
var new_op=new $OpCtx(expr1,op.substr(0,op.length-1))
new_op.parent=assign1
new $RawJSCtx(new_op,right)
assign1.tree.push(new_op)
expr1.parent.tree.pop()
expr1.parent.tree.push(assign1)
new_node.add(aa1)
var aa2=new $Node()
new $NodeJSCtx(aa2,'else')
parent.insert(rank+offset,aa2)
var aa3=new $Node()
var js3='getattr('+C.to_js()+',"'+func+'")('+right+')'
new $NodeJSCtx(aa3,js3)
aa2.add(aa3)
if(left_is_id && !was_bound && !this.scope.blurred){$B.bound[this.scope.id][left_id]=undefined}
return offset}
this.to_js=function(){return ''}}
function $BodyCtx(C){
var ctx_node=C.parent
while(ctx_node.type!=='node'){ctx_node=ctx_node.parent}
var tree_node=ctx_node.node
var body_node=new $Node()
body_node.line_num=tree_node.line_num
tree_node.insert(0,body_node)
return new $NodeCtx(body_node)}
function $BreakCtx(C){
this.type='break'
this.toString=function(){return 'break '}
this.parent=C
C.tree[C.tree.length]=this
var ctx_node=C
while(ctx_node.type!=='node'){ctx_node=ctx_node.parent}
var tree_node=ctx_node.node
var loop_node=tree_node.parent
var break_flag=false
while(1){if(loop_node.type==='module'){
$_SyntaxError(C,'break outside of a loop')}else{var ctx=loop_node.C.tree[0]
if(ctx.type==='condition' && ctx.token==='while'){this.loop_ctx=ctx
ctx.has_break=true
break}
switch(ctx.type){case 'for':
this.loop_ctx=ctx
ctx.has_break=true
break_flag=true
break
case 'def':
case 'generator':
case 'class':
$_SyntaxError(C,'break outside of a loop')
default:
loop_node=loop_node.parent}
if(break_flag)break}}
this.to_js=function(){this.js_processed=true
var scope=$get_scope(this)
var res=';$locals_'+scope.id.replace(/\./g,'_')
return res + '["$no_break'+this.loop_ctx.loop_num+'"]=false;break;'}}
function $CallArgCtx(C){
this.type='call_arg'
this.toString=function(){return 'call_arg '+this.tree}
this.parent=C
this.start=$pos
this.tree=[]
C.tree[C.tree.length]=this
this.expect='id'
this.to_js=function(){this.js_processed=true
return $to_js(this.tree)}}
function $CallCtx(C){
this.type='call'
this.func=C.tree[0]
if(this.func!==undefined){
this.func.parent=this}
this.parent=C
if(C.type!='class'){C.tree.pop()
C.tree[C.tree.length]=this}else{
C.args=this}
this.expect='id'
this.tree=[]
this.start=$pos
this.toString=function(){return '(call) '+this.func+'('+this.tree+')'}
this.to_js=function(){this.js_processed=true
if(this.tree.length>0){if(this.tree[this.tree.length-1].tree.length==0){
this.tree.pop()}}
var func_js=this.func.to_js()
if(this.func!==undefined){switch(this.func.value){case 'classmethod':
return 'classmethod('+$to_js(this.tree)+')'
case '$$super':
if(this.tree.length==0){
var scope=$get_scope(this)
if(scope.ntype=='def' ||scope.ntype=='generator'){var def_scope=$get_scope(scope.C.tree[0])
if(def_scope.ntype=='class'){new $IdCtx(this,def_scope.C.tree[0].name)}}}
if(this.tree.length==1){
var scope=$get_scope(this)
if(scope.ntype=='def' ||scope.ntype=='generator'){var args=scope.C.tree[0].args
if(args.length>0){new $IdCtx(this,args[0])}}}
break
default:
if(this.func.type=='unary'){
switch(this.func.op){case '+':
return 'getattr('+$to_js(this.tree)+',"__pos__")()'
case '-':
return 'getattr('+$to_js(this.tree)+',"__neg__")()'
case '~':
return 'getattr('+$to_js(this.tree)+',"__invert__")()'}}}
var _block=false
if($B.async_enabled){var scope=$get_scope(this.func)
if($B.block[scope.id]===undefined){}
else if($B.block[scope.id][this.func.value])_block=true}
var pos_args=[],kw_args=[],star_args=null,dstar_args=null
for(var i=0;i<this.tree.length;i++){var arg=this.tree[i],type
switch(arg.type){case 'star_arg':
star_args=arg.tree[0].tree[0].to_js()
break
case 'double_star_arg':
dstar_args=arg.tree[0].tree[0].to_js()
break
case 'id':
pos_args.push(arg.to_js())
break
default:
if(arg.tree[0]===undefined){console.log('bizarre',arg)}
else{type=arg.tree[0].type}
switch(type){case 'expr':
pos_args.push(arg.to_js())
break
case 'kwarg':
kw_args.push(arg.tree[0].tree[0].value+':'+arg.tree[0].tree[1].to_js())
break
case 'list_or_tuple':
case 'op':
pos_args.push(arg.to_js())
break
case 'star_arg':
star_args=arg.tree[0].tree[0].to_js()
break
case 'double_star_arg':
dstar_args=arg.tree[0].tree[0].to_js()
break
default:
pos_args.push(arg.to_js())
break}
break}}
var args_str=pos_args.join(', ')
if(star_args){args_str='$B.extend_list('+args_str
if(pos_args.length>0){args_str +=','}
args_str +='_b_.list('+star_args+'))'}
var kw_args_str='{'+kw_args.join(', ')+'}'
if(dstar_args){kw_args_str='{$nat:"kw",kw:$B.extend("'+this.func.value+'",'+kw_args_str
kw_args_str +=','+dstar_args+')}'}else if(kw_args_str!=='{}'){kw_args_str='{$nat:"kw",kw:'+kw_args_str+'}'}else{kw_args_str=''}
if(star_args && kw_args_str){args_str +='.concat(['+kw_args_str+'])' }else{if(args_str && kw_args_str){args_str +=','+kw_args_str}
else if(!args_str){args_str=kw_args_str}}
if(star_args){
args_str='.apply(null,'+args_str+')'}else{args_str='('+args_str+')'}
if($B.debug>0){
var res=""
if(_block){
res="@@;$B.execution_object.$append($jscode, 10); "
res+="$B.execution_object.$execute_next_segment(); "
res+="$jscode=@@"}
res +='getattr('+func_js+',"__call__")'
return res+args_str}
if(this.tree.length>-1){if(this.func.type=='id'){if(this.func.is_builtin){
if($B.builtin_funcs[this.func.value]!==undefined){return func_js+args_str}}else{var bound_obj=this.func.found
if(bound_obj &&(bound_obj.type=='class' ||
bound_obj.type=='def')){return func_js+args_str}}
var res='('+func_js+'.$is_func ? '
res +=func_js+' : '
res +='getattr('+func_js+',"__call__"))'+args_str}else{var res='getattr('+func_js+',"__call__")'+args_str}
return res}
return 'getattr('+func_js+',"__call__")()'}}}
function $ClassCtx(C){
this.type='class'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.expect='id'
this.toString=function(){return '(class) '+this.name+' '+this.tree+' args '+this.args}
var scope=this.scope=$get_scope(this)
this.parent.node.parent_block=scope
this.parent.node.bound={}
this.set_name=function(name){this.random=$B.UUID()
this.name=name
this.id=C.node.module+'_'+name+'_'+this.random
$B.bound[this.id]={}
$B.type[this.id]={}
if($B.async_enabled)$B.block[this.id]={}
$B.modules[this.id]=this.parent.node
this.parent.node.id=this.id
var parent_block=scope
while(parent_block.C && parent_block.C.tree[0].type=='class'){parent_block=parent_block.parent}
while(parent_block.C && 
'def' !=parent_block.C.tree[0].type &&
'generator' !=parent_block.C.tree[0].type){parent_block=parent_block.parent}
this.parent.node.parent_block=parent_block
$B.bound[this.scope.id][name]=this
$B.type[this.scope.id][name]='class'
if(scope.is_function){if(scope.C.tree[0].locals.indexOf(name)==-1){scope.C.tree[0].locals.push(name)}}}
this.transform=function(node,rank){
this.doc_string=$get_docstring(node)
var instance_decl=new $Node()
var local_ns='$locals_'+this.id.replace(/\./g,'_')
var js=';var '+local_ns+'={}'
js +=', $locals = '+local_ns+';'
new $NodeJSCtx(instance_decl,js)
node.insert(0,instance_decl)
var ret_obj=new $Node()
new $NodeJSCtx(ret_obj,'return '+local_ns+';')
node.insert(node.children.length,ret_obj)
var run_func=new $Node()
new $NodeJSCtx(run_func,')();')
node.parent.insert(rank+1,run_func)
var scope=$get_scope(this)
var name_ref=';$locals_'+scope.id.replace(/\./g,'_')
name_ref +='["'+this.name+'"]'
if(this.name=="FF"){
var js=[name_ref +'=$B.$class_constructor1("'+this.name],pos=1}else{var js=[name_ref +'=$B.$class_constructor("'+this.name],pos=1}
js[pos++]='",$'+this.name+'_'+this.random
if(this.args!==undefined){
var arg_tree=this.args.tree,args=[],kw=[]
for(var i=0;i<arg_tree.length;i++){var _tmp=arg_tree[i]
if(_tmp.tree[0].type=='kwarg'){kw.push(_tmp.tree[0])}
else{args.push(_tmp.to_js())}}
js[pos++]=',tuple(['+args.join(',')+']),['
var _re=new RegExp('"','g')
var _r=[],rpos=0
for(var i=0;i<args.length;i++){_r[rpos++]='"'+args[i].replace(_re,'\\"')+'"'}
js[pos++]=_r.join(',')+ ']'
_r=[],rpos=0
for(var i=0;i<kw.length;i++){var _tmp=kw[i]
_r[rpos++]='["'+_tmp.tree[0].value+'",'+_tmp.tree[1].to_js()+']'}
js[pos++]=',[' + _r.join(',')+ ']'}else{
js[pos++]=',tuple([]),[],[]'}
js[pos++]=')'
var cl_cons=new $Node()
new $NodeJSCtx(cl_cons,js.join(''))
rank++
node.parent.insert(rank+1,cl_cons)
rank++
var ds_node=new $Node()
js=name_ref+'.$dict.__doc__='
js +=(this.doc_string ||'None')+';'
new $NodeJSCtx(ds_node,js)
node.parent.insert(rank+1,ds_node)
rank++
js=name_ref+'.$dict.__module__=$locals_'+
$get_module(this).module.replace(/\./g,'_')+'.__name__'
var mod_node=new $Node()
new $NodeJSCtx(mod_node,js)
node.parent.insert(rank+1,mod_node)
if(scope.ntype==='module'){var w_decl=new $Node()
new $NodeJSCtx(w_decl,'$locals["'+ this.name+'"]='+this.name)}
var end_node=new $Node()
new $NodeJSCtx(end_node,'None;')
node.parent.insert(rank+2,end_node)
this.transformed=true}
this.to_js=function(){this.js_processed=true
return 'var $'+this.name+'_'+this.random+'=(function()'}}
function $CompIfCtx(C){
this.type='comp_if'
C.parent.intervals.push($pos)
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(comp if) '+this.tree}
this.to_js=function(){this.js_processed=true
return $to_js(this.tree)}}
function $ComprehensionCtx(C){
this.type='comprehension'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(comprehension) '+this.tree}
this.to_js=function(){this.js_processed=true
var _i=[],pos=0 
for(var j=0;j<this.tree.length;j++)_i[pos++]=this.tree[j].start
return _i}}
function $CompForCtx(C){
this.type='comp_for'
C.parent.intervals.push($pos)
this.parent=C
this.tree=[]
this.expect='in'
C.tree[C.tree.length]=this
this.toString=function(){return '(comp for) '+this.tree}
this.to_js=function(){this.js_processed=true
return $to_js(this.tree)}}
function $CompIterableCtx(C){
this.type='comp_iterable'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(comp iter) '+this.tree}
this.to_js=function(){this.js_processed=true
return $to_js(this.tree)}}
function $ConditionCtx(C,token){
this.type='condition'
this.token=token
this.parent=C
this.tree=[]
if(token==='while'){this.loop_num=$loop_num++}
C.tree[C.tree.length]=this
this.toString=function(){return this.token+' '+this.tree}
this.transform=function(node,rank){var scope=$get_scope(this)
if(this.token=="while"){if(scope.ntype=='generator'){this.parent.node.loop_start=this.loop_num}
var new_node=new $Node()
var js='$locals["$no_break'+this.loop_num+'"]=true'
new $NodeJSCtx(new_node,js)
node.parent.insert(rank,new_node)
return 2}}
this.to_js=function(){this.js_processed=true
var tok=this.token
if(tok==='elif'){tok='else if'}
var res=[tok+'(bool('],pos=1
if(tok=='while'){
if(__BRYTHON__.loop_timeout){var h='\n'+' '.repeat($get_node(this).indent),h4=h+' '.repeat(4),num=this.loop_num,test_timeout=h+'var $time'+num+' = new Date()'+h+
'function $test_timeout'+num+'()'+h4+
'{if((new Date())-$time'+num+'>'+
__BRYTHON__.loop_timeout*1000+
'){throw _b_.RuntimeError("script timeout")}'+
h4+'return true'+h+'}\n'
res.splice(0,0,test_timeout)
res.push('$test_timeout'+num+'() && ')}
res.push('$locals["$no_break'+this.loop_num+'"] && ')}
if(this.tree.length==1){res.push($to_js(this.tree)+'))')}else{
res.push(this.tree[0].to_js()+'))')
if(this.tree[1].tree.length>0){res.push('{'+this.tree[1].to_js()+'}')}}
return res.join('')}}
function $ContinueCtx(C){
this.type='continue'
this.parent=C
C.tree[C.tree.length]=this
this.toString=function(){return '(continue)'}
this.to_js=function(){this.js_processed=true
return 'continue'}}
function $DebuggerCtx(C){
this.type='continue'
this.parent=C
C.tree[C.tree.length]=this
this.toString=function(){return '(debugger)'}
this.to_js=function(){this.js_processed=true
return 'debugger'}}
function $DecoratorCtx(C){
this.type='decorator'
this.parent=C
C.tree[C.tree.length]=this
this.tree=[]
this.toString=function(){return '(decorator) '+this.tree}
this.transform=function(node,rank){var func_rank=rank+1,children=node.parent.children
var decorators=[this.tree]
while(1){if(func_rank>=children.length){$_SyntaxError(C,['decorator expects function'])}
else if(children[func_rank].C.type=='node_js'){func_rank++}
else if(children[func_rank].C.tree[0].type==='decorator'){decorators.push(children[func_rank].C.tree[0].tree)
children.splice(func_rank,1)}else{break}}
this.dec_ids=[]
var pos=0
for(var i=0;i<decorators.length;i++){this.dec_ids[pos++]='$id'+ $B.UUID()}
if($B.async_enabled){var _block_async_flag=false;
for(var i=0;i<decorators.length;i++){try{
var name=decorators[i][0].tree[0].value
if(name=="brython_block" ||name=="brython_async")_block_async_flag=true}catch(err){console.log(i);console.log(decorators[i][0])}}}
var obj=children[func_rank].C.tree[0]
if(obj.type=='def'){obj.decorated=true
obj.alias='$dec'+$B.UUID()}
var callable=children[func_rank].C
var tail=''
var scope=$get_scope(this)
var ref='$locals["'+obj.name+'"]'
var res=ref+'='
for(var i=0;i<decorators.length;i++){
res +=this.dec_ids[i]+'('
tail +=')'}
res +=(obj.decorated ? obj.alias : ref)+tail+';'
$B.bound[scope.id][obj.name]=true
var decor_node=new $Node()
new $NodeJSCtx(decor_node,res)
node.parent.insert(func_rank+1,decor_node)
this.decorators=decorators
if($B.async_enabled && _block_async_flag){
if($B.block[scope.id]===undefined)$B.block[scope.id]={}
$B.block[scope.id][obj.name]=true}}
this.to_js=function(){if($B.async_enabled){if(this.processing !==undefined)return ""}
this.js_processed=true
var res=[],pos=0
for(var i=0;i<this.decorators.length;i++){res[pos++]='var '+this.dec_ids[i]+'='+$to_js(this.decorators[i])+';'}
return res.join('')}}
function $DefCtx(C){this.type='def'
this.name=null
this.parent=C
this.tree=[]
this.locals=[]
this.yields=[]
C.tree[C.tree.length]=this
this.enclosing=[]
var scope=this.scope=$get_scope(this)
var parent_block=scope
while(parent_block.C && parent_block.C.tree[0].type=='class'){parent_block=parent_block.parent}
while(parent_block.C && 
'def' !=parent_block.C.tree[0].type &&
'generator' !=parent_block.C.tree[0].type){parent_block=parent_block.parent}
this.parent.node.parent_block=parent_block
var pb=parent_block
while(pb && pb.C){if(pb.C.tree[0].type=='def'){this.inside_function=true
break}
pb=pb.parent_block}
this.module=scope.module
this.positional_list=[]
this.default_list=[]
this.other_args=null
this.other_kw=null
this.after_star=[]
this.set_name=function(name){var id_ctx=new $IdCtx(this,name)
this.name=name
this.id=this.scope.id+'_'+name
this.id=this.id.replace(/\./g,'_')
this.id +='_'+ $B.UUID()
this.parent.node.id=this.id
this.parent.node.module=this.module
$B.modules[this.id]=this.parent.node
$B.bound[this.id]={}
$B.type[this.id]={}
$B.bound[this.scope.id][name]=this
try{$B.type[this.scope.id][name]='function'}catch(err){console.log(err,this.scope.id)}
id_ctx.bound=true
if(scope.is_function){if(scope.C.tree[0].locals.indexOf(name)==-1){scope.C.tree[0].locals.push(name)}}}
this.toString=function(){return 'def '+this.name+'('+this.tree+')'}
this.transform=function(node,rank){
if(this.transformed!==undefined)return
var scope=this.scope
var pb=this.parent.node
var flag=this.name.substr(0,4)=='func'
while(pb && pb.C){if(pb.C.tree[0].type=='def'){this.inside_function=true
break}
pb=pb.parent}
this.doc_string=$get_docstring(node)
this.rank=rank 
var fglobs=this.parent.node.globals
var indent=node.indent+16
var header=$ws(indent)
if(this.name.substr(0,15)=='lambda_'+$B.lambda_magic){var pblock=$B.modules[scope.id].parent_block
if(pblock.C && pblock.C.tree[0].type=="def"){this.enclosing.push(pblock)}}
var pnode=this.parent.node
while(pnode.parent && pnode.parent.is_def_func){this.enclosing.push(pnode.parent.parent)
pnode=pnode.parent.parent}
var defaults=[],apos=0,dpos=0,defs1=[],dpos1=0
this.argcount=0
this.kwonlyargcount=0 
this.varnames={}
this.args=[]
this.__defaults__=[]
this.slots=[]
var slot_list=[]
var annotations=[]
if(this.annotation){annotations.push('"return":'+this.annotation.to_js())}
var func_args=this.tree[1].tree
for(var i=0;i<func_args.length;i++){var arg=func_args[i]
this.args[apos++]=arg.name
this.varnames[arg.name]=true
if(arg.type==='func_arg_id'){if(this.star_arg){this.kwonlyargcount++}
else{this.argcount++}
this.slots.push(arg.name+':null')
slot_list.push('"'+arg.name+'"')
if(arg.tree.length>0){defaults[dpos++]='"'+arg.name+'"'
defs1[dpos1++]=arg.name+':'+$to_js(arg.tree)
this.__defaults__.push($to_js(arg.tree))}}else if(arg.type=='func_star_arg'){if(arg.op=='*'){this.star_arg=arg.name}
else if(arg.op=='**'){this.kw_arg=arg.name}}
if(arg.annotation){annotations.push(arg.name+': '+arg.annotation.to_js())}}
var flags=67
if(this.star_arg){flags |=4}
if(this.kw_arg){flags |=8}
if(this.type=='generator'){flags |=32}
var positional_str=[],positional_obj=[],pos=0
for(var i=0,_len=this.positional_list.length;i<_len;i++){positional_str[pos]='"'+this.positional_list[i]+'"'
positional_obj[pos++]=this.positional_list[i]+':null'}
positional_str=positional_str.join(',')
positional_obj='{'+positional_obj.join(',')+'}'
var dobj=[],pos=0
for(var i=0;i<this.default_list.length;i++){dobj[pos++]=this.default_list[i]+':null'}
dobj='{'+dobj.join(',')+'}'
var nodes=[],js
var global_scope=scope
if(global_scope.parent_block===undefined){alert('undef '+global_scope);console.log(global_scope)}
while(global_scope.parent_block.id !=='__builtins__'){global_scope=global_scope.parent_block}
var global_ns='$locals_'+global_scope.id.replace(/\./g,'_')
var local_ns='$locals_'+this.id
js='var '+local_ns+'={}, '
js +='$local_name="'+this.id+'",$locals='+local_ns+';'
var new_node=new $Node()
new_node.locals_def=true
new $NodeJSCtx(new_node,js)
nodes.push(new_node)
var enter_frame_node=new $Node(),enter_frame_node_rank=nodes.length
var js=';$B.enter_frame([$local_name, $locals,'+
'"'+global_scope.id+'", '+global_ns+']);' 
enter_frame_node.enter_frame=true
new $NodeJSCtx(enter_frame_node,js)
nodes.push(enter_frame_node)
this.env=[]
var make_args_nodes=[]
var func_ref='$locals_'+scope.id.replace(/\./g,'_')+'["'+this.name+'"]'
var js='var $ns = $B.args("'+this.name+'", '
js +=this.argcount+', {'+this.slots.join(', ')+'}, '
js +='['+slot_list.join(', ')+'], '
js +='arguments, '
if(defs1.length){js +='$defaults, '}
else{js +='{}, '}
js +=this.other_args+', '+this.other_kw+');'
var new_node=new $Node()
new $NodeJSCtx(new_node,js)
make_args_nodes.push(new_node)
var new_node=new $Node()
new $NodeJSCtx(new_node,'for(var $var in $ns){$locals[$var]=$ns[$var]};')
make_args_nodes.push(new_node)
var only_positional=false
if(defaults.length==0 && this.other_args===null && this.other_kw===null &&
this.after_star.length==0){
only_positional=true
var pos_nodes=[]
if($B.debug>0 ||this.positional_list.length>0){
var new_node=new $Node()
var js='if(arguments.length>0 && arguments[arguments.length-1].$nat)'
new $NodeJSCtx(new_node,js)
nodes.push(new_node)
new_node.add(make_args_nodes[0])
new_node.add(make_args_nodes[1])
var else_node=new $Node()
new $NodeJSCtx(else_node,'else')
nodes.push(else_node)}
if($B.debug>0){
var pos_len=this.positional_list.length
js='if(arguments.length!='+pos_len+')'
var wrong_nb_node=new $Node()
new $NodeJSCtx(wrong_nb_node,js)
else_node.add(wrong_nb_node)
if(pos_len>0){
js='if(arguments.length<'+pos_len+')'
js +='{var $missing='+pos_len+'-arguments.length;'
js +='throw TypeError("'+this.name+'() missing "+$missing+'
js +='" positional argument"+($missing>1 ? "s" : "")+": "'
js +='+new Array('+positional_str+').slice(arguments.length))}'
new_node=new $Node()
new $NodeJSCtx(new_node,js)
wrong_nb_node.add(new_node)
js='else if'}else{js='if'}
js +='(arguments.length>'+pos_len+')'
js +='{throw TypeError("'+this.name+'() takes '+pos_len
js +=' positional argument'
js +=(pos_len>1 ? "s" : "")
js +=' but more were given")}'
new_node=new $Node()
new $NodeJSCtx(new_node,js)
wrong_nb_node.add(new_node)}
for(var i=0;i<this.positional_list.length;i++){var arg=this.positional_list[i]
var new_node=new $Node()
var js='$locals["'+arg+'"]=('+arg+
'.is_float ? _b_.float('+arg+'.value) : '+arg+')'
js='$locals["'+arg+'"]='+arg
new $NodeJSCtx(new_node,js)
else_node.add(new_node)}}else{nodes.push(make_args_nodes[0])
nodes.push(make_args_nodes[1])}
for(var i=nodes.length-1;i>=0;i--){node.children.splice(0,0,nodes[i])}
var def_func_node=new $Node()
if(only_positional){var params=Object.keys(this.varnames).concat(['$extra']).join(', ')
new $NodeJSCtx(def_func_node,'return function('+params+')')}else{new $NodeJSCtx(def_func_node,'return function()')}
def_func_node.is_def_func=true
def_func_node.module=this.module
for(var i=0;i<node.children.length;i++){def_func_node.add(node.children[i])}
var last_instr=node.children[node.children.length-1].C.tree[0]
if(last_instr.type!=='return' && this.type!='generator'){def_func_node.add($NodeJS('return None'))}
node.children=[]
var default_node=new $Node()
var js=';_b_.None;'
if(defs1.length>0){js='var $defaults = {'+defs1.join(',')+'};'}
new $NodeJSCtx(default_node,js)
node.insert(0,default_node)
node.add(def_func_node)
var ret_node=new $Node()
new $NodeJSCtx(ret_node,')();')
node.parent.insert(rank+1,ret_node)
var offset=2
if(this.type==='generator' && !this.declared){var sc=scope
var env=[],pos=0
while(sc && sc.id!=='__builtins__'){var sc_id=sc.id.replace(/\./g,'_')
if(sc===scope){env[pos++]='["'+sc_id+'",$locals]'}else{env[pos++]='["'+sc_id+'",$locals_'+sc_id+']'}
sc=sc.parent_block}
var env_string='['+env.join(', ')+']'
js='$B.$BRgenerator('+env_string+',"'+this.name+'","'+this.id+'")'
var gen_node=new $Node()
gen_node.id=this.module
var ctx=new $NodeCtx(gen_node)
var expr=new $ExprCtx(ctx,'id',false)
var name_ctx=new $IdCtx(expr,this.name)
var assign=new $AssignCtx(expr)
var expr1=new $ExprCtx(assign,'id',false)
var js_ctx=new $NodeJSCtx(assign,js)
expr1.tree.push(js_ctx)
node.parent.insert(rank+offset,gen_node)
this.declared=true
offset++}
var prefix=this.tree[0].to_js()
if(this.decorated){prefix=this.alias}
var indent=node.indent
js=prefix+'.$infos = {'
var name_decl=new $Node()
new $NodeJSCtx(name_decl,js)
node.parent.insert(rank+offset,name_decl)
offset++
js='    __name__:"'
if(this.scope.ntype=='class'){js+=this.scope.C.tree[0].name+'.'}
js +=this.name+'",'
var name_decl=new $Node()
new $NodeJSCtx(name_decl,js)
node.parent.insert(rank+offset,name_decl)
offset++
var module=$get_module(this)
new_node=new $Node()
new $NodeJSCtx(new_node,'    __defaults__ : ['+this.__defaults__.join(', ')+'],')
node.parent.insert(rank+offset,new_node)
offset++
var module=$get_module(this)
new_node=new $Node()
new $NodeJSCtx(new_node,'    __module__ : "'+module.module+'",')
node.parent.insert(rank+offset,new_node)
offset++
js='    __doc__: '+(this.doc_string ||'None')+','
new_node=new $Node()
new $NodeJSCtx(new_node,js)
node.parent.insert(rank+offset,new_node)
offset++
js='    __annotations__: {'+annotations.join(',')+'},'
new_node=new $Node()
new $NodeJSCtx(new_node,js)
node.parent.insert(rank+offset,new_node)
offset++
for(var attr in $B.bound[this.id]){this.varnames[attr]=true}
var co_varnames=[]
for(var attr in this.varnames){co_varnames.push('"'+attr+'"')}
var h='\n'+' '.repeat(indent+8)
js='    __code__:{'+h+'__class__:$B.$CodeDict'
h=','+h
js +=h+'co_argcount:'+this.argcount
js +=h+'co_filename:$locals_'+scope.module.replace(/\./g,'_')+'["__file__"]'
js +=h+'co_firstlineno:'+node.line_num
js +=h+'co_flags:'+flags
js +=h+'co_kwonlyargcount:'+this.kwonlyargcount
js +=h+'co_name: "'+this.name+'"'
js +=h+'co_nlocals: '+co_varnames.length
js +=h+'co_varnames: ['+co_varnames.join(', ')+']'
js +='}\n};'
js +='None;'
new_node=new $Node()
new $NodeJSCtx(new_node,js)
node.parent.insert(rank+offset,new_node)
if(this.type=='def'){var parent=enter_frame_node.parent
for(var pos=0;pos<parent.children.length && 
parent.children[pos]!==enter_frame_node;pos++){}
var try_node=new $Node(),children=parent.children.slice(pos+1,parent.children.length),ctx=new $NodeCtx(try_node)
parent.insert(pos+1,try_node)
new $TryCtx(ctx)
for(var i=0;i<children.length;i++){try_node.add(children[i])}
parent.children.splice(pos+2,parent.children.length)
var finally_node=new $Node(),ctx=new $NodeCtx(finally_node)
new $SingleKwCtx(ctx,'finally')
finally_node.add($NodeJS('$B.leave_frame($local_name)'))
parent.add(finally_node)}
this.transformed=true
return offset}
this.to_js=function(func_name){this.js_processed=true
func_name=func_name ||this.tree[0].to_js()
if(this.decorated){func_name='var '+this.alias}
return func_name+'=(function()'}}
function $DelCtx(C){
this.type='del'
this.parent=C
C.tree[C.tree.length]=this
this.tree=[]
this.toString=function(){return 'del '+this.tree}
this.to_js=function(){this.js_processed=true
if(this.tree[0].type=='list_or_tuple'){
var res=[],pos=0
for(var i=0;i<this.tree[0].tree.length;i++){var subdel=new $DelCtx(C)
subdel.tree=[this.tree[0].tree[i]]
res[pos++]=subdel.to_js()
C.tree.pop()}
this.tree=[]
return res.join(';')}else{var expr=this.tree[0].tree[0]
var scope=$get_scope(this)
switch(expr.type){case 'id':
return 'delete '+expr.to_js()+';'
case 'list_or_tuple':
var res=[],pos=0
for(var i=0;i<expr.tree.length;i++){res[pos++]='delete '+expr.tree[i].to_js()}
return res.join(';')
case 'sub':
expr.func='delitem'
js=expr.to_js()
expr.func='getitem'
return js
case 'op':
$_SyntaxError(this,["can't delete operator"])
case 'call':
$_SyntaxError(this,["can't delete function call"])
case 'attribute':
return 'delattr('+expr.value.to_js()+',"'+expr.name+'")'
default:
$_SyntaxError(this,["can't delete "+expr.type])}}}}
function $DictOrSetCtx(C){
this.type='dict_or_set'
this.real='dict_or_set'
this.expect='id'
this.closed=false
this.start=$pos
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){switch(this.real){case 'dict':
return '(dict) {'+this.items+'}'
case 'set':
return '(set) {'+this.tree+'}'}
return '(dict_or_set) {'+this.tree+'}'}
this.to_js=function(){this.js_processed=true
switch(this.real){case 'dict':
var res=[],pos=0
for(var i=0;i<this.items.length;i+=2){res[pos++]='['+this.items[i].to_js()+','+this.items[i+1].to_js()+']'}
return 'dict(['+res.join(',')+'])'+$to_js(this.tree)
case 'set_comp':
return 'set('+$to_js(this.items)+')'+$to_js(this.tree)
case 'dict_comp':
return 'dict('+$to_js(this.items)+')'+$to_js(this.tree)}
return 'set(['+$to_js(this.items)+'])'+$to_js(this.tree)}}
function $DoubleStarArgCtx(C){
this.type='double_star_arg'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '**'+this.tree}
this.to_js=function(){this.js_processed=true
return '{$nat:"pdict",arg:'+$to_js(this.tree)+'}'}}
function $EllipsisCtx(C){
this.type='ellipsis'
this.parent=C
this.nbdots=1
C.tree[C.tree.length]=this
this.toString=function(){return 'ellipsis'}
this.to_js=function(){this.js_processed=true
return '$B.builtins["Ellipsis"]'}}
function $ExceptCtx(C){
this.type='except'
this.parent=C
C.tree[C.tree.length]=this
this.tree=[]
this.expect='id'
this.scope=$get_scope(this)
this.toString=function(){return '(except) '}
this.set_alias=function(alias){this.tree[0].alias=alias
$B.bound[this.scope.id][alias]=true
try{$B.type[this.scope.id][alias]='exception'}catch(err){console.log(err,this.scope.id)}}
this.to_js=function(){
this.js_processed=true
switch(this.tree.length){case 0:
return 'else'
case 1:
if(this.tree[0].name==='Exception')return 'else if(1)'}
var res=[],pos=0
for(var i=0;i<this.tree.length;i++){res[pos++]=this.tree[i].to_js()}
return 'else if($B.is_exc('+this.error_name+',['+res.join(',')+']))'}}
function $ExprCtx(C,name,with_commas){
this.type='expr'
this.name=name
this.with_commas=with_commas
this.expect=',' 
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(expr '+with_commas+') '+this.tree}
this.to_js=function(arg){this.js_processed=true
if(this.type==='list')return '['+$to_js(this.tree)+']'
if(this.tree.length===1)return this.tree[0].to_js(arg)
return 'tuple('+$to_js(this.tree)+')'}}
function $ExprNot(C){
this.type='expr_not'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(expr_not)'}}
function $FloatCtx(C,value){
this.type='float'
this.value=value
this.toString=function(){return 'float '+this.value}
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.to_js=function(){this.js_processed=true
return 'float('+this.value+')'}}
function $ForExpr(C){
this.type='for'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.loop_num=$loop_num
this.module=$get_scope(this).module
$loop_num++
this.toString=function(){return '(for) '+this.tree}
this.transform=function(node,rank){var scope=$get_scope(this),mod_name=scope.module,target=this.tree[0],target_is_1_tuple=target.tree.length==1 && target.expect=='id',iterable=this.tree[1],num=this.loop_num,local_ns='$locals_'+scope.id.replace(/\./g,'_'),h='\n'+' '.repeat(node.indent+4)
if(__BRYTHON__.loop_timeout){
var test_timeout='var $time'+num+' = new Date()'+h+
'function $test_timeout'+num+'(){if((new Date())-$time'+
num+'>'+__BRYTHON__.loop_timeout*1000+
'){throw _b_.RuntimeError("script timeout")}'+h+'return true}'}
var $range=false
if(target.tree.length==1 &&
target.expct !='id' &&
iterable.type=='expr' &&
iterable.tree[0].type=='expr' &&
iterable.tree[0].tree[0].type=='call'){var call=iterable.tree[0].tree[0]
if(call.func.type=='id'){var func_name=call.func.value
if(func_name=='range' && call.tree.length<3){$range=call}}}
var new_nodes=[],pos=0
var children=node.children
var offset=1
if($range && scope.ntype!='generator'){if(this.has_break){
new_node=new $Node()
new $NodeJSCtx(new_node,local_ns+'["$no_break'+num+'"]=true')
new_nodes[pos++]=new_node}
var range_is_builtin=false
if(!scope.blurred){var _scope=$get_scope(this),found=[],fpos=0
while(1){if($B.bound[_scope.id]['range']){found[fpos++]=_scope.id}
if(_scope.parent_block){_scope=_scope.parent_block}
else{break}}
range_is_builtin=found.length==1 && found[0]=="__builtins__"
if(found==['__builtins__']){range_is_builtin=true}}
var test_range_node=new $Node()
if(range_is_builtin){new $NodeJSCtx(test_range_node,'if(1)')}else{new $NodeJSCtx(test_range_node,'if('+call.func.to_js()+'===$B.builtins.range)')}
new_nodes[pos++]=test_range_node
var idt=target.to_js()
if($range.tree.length==1){var start=0,stop=$range.tree[0].to_js()}else{var start=$range.tree[0].to_js(),stop=$range.tree[1].to_js()}
var js=idt+'='+start+';'+h+'var $stop_'+num +'=$B.int_or_bool('+
stop+'),'+h+
'    $next'+num+'= '+idt+','+h+
'    $safe'+num+'= typeof $next'+num+'=="number" && typeof '+
'$stop_'+num+'=="number";'+h
if(__BRYTHON__.loop_timeout){js +=test_timeout+h+'while($test_timeout'+num+'())'}else{js +='while(true)'}
var for_node=new $Node()
new $NodeJSCtx(for_node,js)
for_node.add($NodeJS('if($safe'+num+' && $next'+num+'>= $stop_'+
num+'){break}'))
for_node.add($NodeJS('else if(!$safe'+num+
' && $B.ge($next'+num+', $stop_'+num+
')){break}'))
for_node.add($NodeJS(idt+' = $next'+num))
for_node.add($NodeJS('if($safe'+num+'){$next'+num+'+=1'+'}'))
for_node.add($NodeJS('else{$next'+num+'=$B.add($next'+num+',1)}'))
for(var i=0;i<children.length;i++){for_node.add(children[i].clone())}
for_node.add($NodeJS('$locals.line_info="'+node.line_num+','+
scope.id+'"'))
var in_loop=false
if(scope.ntype=='module'){var pnode=node.parent
while(pnode){if(pnode.for_wrapper){in_loop=true;break}
pnode=pnode.parent}}
if(scope.ntype=='module' && !in_loop){var func_node=new $Node()
func_node.for_wrapper=true
js='function $f'+num+'('
if(this.has_break){js +='$no_break'+num}
js +=')'
new $NodeJSCtx(func_node,js)
test_range_node.add(func_node)
func_node.add(for_node)
if(this.has_break){new_node=new $Node()
new $NodeJSCtx(new_node,'return $no_break'+num)
func_node.add(new_node)}
var end_func_node=new $Node()
new $NodeJSCtx(end_func_node,'var $res'+num+'=$f'+num+'();')
test_range_node.add(end_func_node)
if(this.has_break){var no_break=new $Node()
new $NodeJSCtx(no_break,'$no_break'+num+'=$res'+num)
test_range_node.add(no_break)}}else{
test_range_node.add(for_node)}
if(range_is_builtin){node.parent.children.splice(rank,1)
var k=0
if(this.has_break){node.parent.insert(rank,new_nodes[0])
k++}
for(var i=new_nodes[k].children.length-1;i>=0;i--){node.parent.insert(rank+k,new_nodes[k].children[i])}
node.parent.children[rank].line_num=node.line_num
node.children=[]
return 0}
var else_node=new $Node()
new $NodeJSCtx(else_node,'else')
new_nodes[pos++]=else_node
for(var i=new_nodes.length-1;i>=0;i--){node.parent.insert(rank+1,new_nodes[i])}
this.test_range=true
new_nodes=[],pos=0}
var new_node=new $Node()
new_node.line_num=$get_node(this).line_num
var js='$locals["$next'+num+'"]'
js +='=getattr(iter('+iterable.to_js()+'),"__next__");\n'
new $NodeJSCtx(new_node,js)
new_nodes[pos++]=new_node
if(this.has_break){
new_node=new $Node()
new $NodeJSCtx(new_node,local_ns+'["$no_break'+num+'"]=true;')
new_nodes[pos++]=new_node}
var while_node=new $Node()
if(__BRYTHON__.loop_timeout){js=test_timeout+h
if(this.has_break){js +='while($test_timeout'+num+'() && '+
local_ns+'["$no_break'+num+'"])'}
else{js +='while($test_timeout'+num+'())'}}else{if(this.has_break){js='while('+local_ns+'["$no_break'+num+'"])'}
else{js='while(1)'}}
new $NodeJSCtx(while_node,js)
while_node.C.loop_num=num 
while_node.C.type='for' 
while_node.line_num=node.line_num
if(scope.ntype=='generator'){
while_node.loop_start=num}
new_nodes[pos++]=while_node
node.parent.children.splice(rank,1)
if(this.test_range){for(var i=new_nodes.length-1;i>=0;i--){else_node.insert(0,new_nodes[i])}}else{for(var i=new_nodes.length-1;i>=0;i--){node.parent.insert(rank,new_nodes[i])
offset +=new_nodes.length}}
var try_node=new $Node()
new $NodeJSCtx(try_node,'try')
while_node.add(try_node)
var iter_node=new $Node()
iter_node.parent=$get_node(this).parent
iter_node.id=this.module
var C=new $NodeCtx(iter_node)
var target_expr=new $ExprCtx(C,'left',true)
if(target_is_1_tuple){
var t=new $ListOrTupleCtx(target_expr)
t.real='tuple'
t.tree=target.tree}else{target_expr.tree=target.tree}
var assign=new $AssignCtx(target_expr)
assign.tree[1]=new $JSCode('$locals["$next'+num+'"]()')
try_node.add(iter_node)
var catch_node=new $Node()
var js='catch($err){if($B.is_exc($err,[StopIteration]))'
js +='{delete $locals["$next'+num+'"];$B.clear_exc();break;}'
js +='else{throw($err)}}' 
new $NodeJSCtx(catch_node,js)
while_node.add(catch_node)
for(var i=0;i<children.length;i++){while_node.add(children[i].clone())}
node.children=[]
return 0}
this.to_js=function(){this.js_processed=true
var iterable=this.tree.pop()
return 'for '+$to_js(this.tree)+' in '+iterable.to_js()}}
function $FromCtx(C){
this.type='from'
this.parent=C
this.module=''
this.names=[]
this.aliases={}
C.tree[C.tree.length]=this
this.expect='module'
this.scope=$get_scope(this)
this.add_name=function(name){this.names[this.names.length]=name
if(name=='*'){this.scope.blurred=true}}
this.transform=function(node,rank){if(!this.blocking){
var mod_name=this.module.replace(/\$/g,'')
if(this.names[0]=='*'){node.add($NodeJS('for(var $attr in $B.imported["'+mod_name+
'"]){if($attr.charAt(0)!=="_"){$locals[$attr]=$B.imported["'+mod_name+'"][$attr]}};'))}else{for(var i=0;i<this.names.length;i++){var name=this.names[i]
node.add($NodeJS('$locals["'+(this.aliases[name]||name)+
'"]=$B.imported["'+mod_name+'"]["'+name+'"]'))}}
for(var i=rank+1;i<node.parent.children.length;i++){node.add(node.parent.children[i])}
node.parent.children.splice(rank+1,node.parent.children.length)
node.parent.add($NodeJS(')'))}}
this.bind_names=function(){
var scope=$get_scope(this)
for(var i=0;i<this.names.length;i++){var name=this.aliases[this.names[i]]||this.names[i]
$B.bound[scope.id][name]=true
$B.type[scope.id][name]=false }}
this.toString=function(){return '(from) '+this.module+' (import) '+this.names+'(as)'+this.aliases}
this.to_js=function(){this.js_processed=true
var scope=$get_scope(this),mod=$get_module(this).module,res=[],pos=0,indent=$get_node(this).indent,head=' '.repeat(indent);
var _mod=this.module.replace(/\$/g,''),package,packages=[]
while(_mod.length>0){if(_mod.charAt(0)=='.'){if(package===undefined){if($B.imported[mod]!==undefined){package=$B.imported[mod].__package__}}else{package=$B.imported[package]}
if(package===undefined){return 'throw SystemError("Parent module \'\' not loaded,'+
' cannot perform relative import")'}else if(package=='None'){console.log('package is None !')}else{packages.push(package)}
_mod=_mod.substr(1)}else{break}}
if(_mod){packages.push(_mod)}
this.module=packages.join('.')
var mod_name=this.module.replace(/\$/g,''),localns='$locals_'+scope.id.replace(/\./g,'_');
if(this.blocking){res[pos++]='$B.$import("';
res[pos++]=mod_name+'",["';
res[pos++]=this.names.join('","')+'"], {';
var sep='';
for(var attr in this.aliases){res[pos++]=sep + '"'+attr+'": "'+this.aliases[attr]+'"';
sep=',';}
res[pos++]='}, {}, true);';
if(this.names[0]=='*'){res[pos++]='\n'+head+'for(var $attr in $B.imported["'+mod_name+
'"]){if($attr.charAt(0)!=="_"){'+
'$locals[$attr]=$B.imported["'+mod_name+'"][$attr]}};'}else{for(var i=0;i<this.names.length;i++){var name=this.names[i]
res[pos++]='\n'+head+'$locals["'+(this.aliases[name]||name)+
'"]=$B.imported["'+mod_name+'"]["'+name+'"];'}}
res[pos++]='\n'+head+'None;';}else{res[pos++]='$B.$import_non_blocking("'+mod_name+'", function()'}
if(this.names[0]=='*'){
scope.blurred=true}
return res.join('');}}
function $FuncArgs(C){
this.type='func_args'
this.parent=C
this.tree=[]
this.names=[]
C.tree[C.tree.length]=this
this.toString=function(){return 'func args '+this.tree}
this.expect='id'
this.has_default=false
this.has_star_arg=false
this.has_kw_arg=false
this.to_js=function(){this.js_processed=true
return $to_js(this.tree)}}
function $FuncArgIdCtx(C,name){
this.type='func_arg_id'
this.name=name
this.parent=C
if(C.has_star_arg){C.parent.after_star.push('"'+name+'"')}else{C.parent.positional_list.push(name)}
var node=$get_node(this)
if($B.bound[node.id][name]){$_SyntaxError(C,["duplicate argument '"+name+"' in function definition"])}
$B.bound[node.id][name]='arg'
$B.type[node.id][name]=false
this.tree=[]
C.tree[C.tree.length]=this
var ctx=C
while(ctx.parent!==undefined){if(ctx.type==='def'){ctx.locals.push(name)
break}
ctx=ctx.parent}
this.expect='='
this.toString=function(){return 'func arg id '+this.name +'='+this.tree}
this.to_js=function(){this.js_processed=true
return this.name+$to_js(this.tree)}}
function $FuncStarArgCtx(C,op){
this.type='func_star_arg'
this.op=op
this.parent=C
this.node=$get_node(this)
C.has_star_arg=op=='*'
C.has_kw_arg=op=='**'
C.tree[C.tree.length]=this
this.toString=function(){return '(func star arg '+this.op+') '+this.name}
this.set_name=function(name){this.name=name
if(name=='$dummy'){return}
if($B.bound[this.node.id][name]){$_SyntaxError(C,["duplicate argument '"+name+"' in function definition"])}
$B.bound[this.node.id][name]='arg'
$B.type[this.node.id][name]=false
var ctx=C
while(ctx.parent!==undefined){if(ctx.type==='def'){ctx.locals.push(name)
break}
ctx=ctx.parent}
if(op=='*'){ctx.other_args='"'+name+'"'}
else{ctx.other_kw='"'+name+'"'}}}
function $GlobalCtx(C){
this.type='global'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.expect='id'
this.toString=function(){return 'global '+this.tree}
this.scope=$get_scope(this)
$B._globals[this.scope.id]=$B._globals[this.scope.id]||{}
this.add=function(name){$B._globals[this.scope.id][name]=true}
this.to_js=function(){this.js_processed=true
return ''}}
function $IdCtx(C,value){
this.type='id'
this.toString=function(){return '(id) '+this.value+':'+(this.tree||'')}
this.value=value
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
if(C.parent.type==='call_arg')this.call_arg=true
this.scope=$get_scope(this)
this.blurred_scope=this.scope.blurred
this.env=clone($B.bound[this.scope.id])
var ctx=C
while(ctx.parent!==undefined){switch(ctx.type){case 'list_or_tuple':
case 'dict_or_set':
case 'call_arg':
case 'def':
case 'lambda':
if(ctx.vars===undefined){ctx.vars=[value]}
else if(ctx.vars.indexOf(value)===-1){ctx.vars.push(value)}
if(this.call_arg&&ctx.type==='lambda'){if(ctx.locals===undefined){ctx.locals=[value]}
else{ctx.locals.push(value)}}}
ctx=ctx.parent}
var scope=this.scope=$get_scope(this)
if(C.type=='target_list' ||C.type=='packed' ||
(C.type=='expr' && C.parent.type=='target_list')){
$B.bound[scope.id][value]=true
$B.type[scope.id][value]=false 
this.bound=true}
if(scope.ntype=='def' ||scope.ntype=='generator'){
var _ctx=this.parent
while(_ctx){if(_ctx.type=='list_or_tuple' && _ctx.is_comp())return
_ctx=_ctx.parent}
if(C.type=='expr' && C.parent.type=='comp_if'){
return}else if(C.type=='global'){if(scope.globals===undefined){scope.globals=[value]}else if(scope.globals.indexOf(value)==-1){scope.globals.push(value)}}}
this.to_js=function(arg){this.js_processed=true
var val=this.value
var is_local=$B.bound[this.scope.id][val]!==undefined
var bound_before=$get_node(this).bound_before
if(this.scope.nonlocals && this.scope.nonlocals[val]!==undefined){this.nonlocal=true}
this.unbound=this.unbound ||(is_local && !this.bound && 
bound_before && bound_before.indexOf(val)==-1)
if(this.unbound && !this.nonlocal){if(this.scope.ntype=='def' ||this.scope.ntype=='generator'){return '$B.$local_search("'+val+'")'}else{return '$B.$search("'+val+'")'}}
if(val=='eval')val='$eval'
else if(val=='__BRYTHON__' ||val=='$B'){return val}
var innermost=$get_scope(this)
var scope=innermost,found=[],module=scope.module
var gs=innermost
while(gs.parent_block && gs.parent_block.id!=='__builtins__'){gs=gs.parent_block}
var global_ns='$locals_'+gs.id.replace(/\./g,'_')
while(1){if($B.bound[scope.id]===undefined){console.log('name '+val+' undef '+scope.id)}
if($B.type[scope.id]===undefined){console.log('name '+val+' type undef '+scope.id)}
if($B._globals[scope.id]!==undefined &&
$B._globals[scope.id][val]!==undefined){
if($B.bound[gs.id][val]!==undefined ||this.bound){return global_ns+'["'+val+'"]'}else{return '$B.$global_search("'+val+'")'}
found=[gs]
break}
if(scope===innermost){
var bound_before=$get_node(this).bound_before
if(bound_before && !this.bound){if(bound_before.indexOf(val)>-1){found.push(scope)}
else if(scope.C &&
scope.C.tree[0].type=='def' &&
scope.C.tree[0].env.indexOf(val)>-1){found.push(scope)}}else{if($B.bound[scope.id][val]){found.push(scope)}}}else{if($B.bound[scope.id][val]){found.push(scope)}}
if(scope.parent_block){scope=scope.parent_block}
else{break}}
this.found=found
if(this.nonlocal && found[0]===innermost){found.shift()}
if(found.length>0){
if(!this.bound && found[0].C && found[0]===innermost
&& val.charAt(0)!='$'){var locs=$get_node(this).locals ||{},nonlocs=innermost.nonlocals
if(locs[val]===undefined && 
(nonlocs===undefined ||nonlocs[val]===undefined)){return '$B.$local_search("'+val+'")'}}
if(found.length>1 && found[0].C){if(found[0].C.tree[0].type=='class' && !this.bound){var ns0='$locals_'+found[0].id.replace(/\./g,'_'),ns1='$locals_'+found[1].id.replace(/\./g,'_'),res
if(bound_before){if(bound_before.indexOf(val)>-1){this.found=$B.bound[found[0].id][val]
res=ns0}else{this.found=$B.bound[found[1].id][val]
res=ns1}
return res+'["'+val+'"]'}else{this.found=false
var res=ns0 + '["'+val+'"]!==undefined ? '
res +=ns0 + '["'+val+'"] : '
return res + ns1 + '["'+val+'"]'}}}
var scope=found[0]
this.found=$B.bound[scope.id][val]
var scope_ns='$locals_'+scope.id.replace(/\./g,'_')
if(scope.C===undefined){
if(scope.id=='__builtins__'){if(gs.blurred){
val='('+global_ns+'["'+val+'"] || '+val+')'}else{
this.is_builtin=true}}else if(scope.id==scope.module){if(this.bound ||this.augm_assign){val=scope_ns+'["'+val+'"]'}else{if(scope===innermost && this.env[val]===undefined){var locs=$get_node(this).locals ||{}
if(locs[val]===undefined){
if(found.length>1 && found[1].id=='__builtins__'){this.is_builtin=true
return val+$to_js(this.tree,'')}}
return '$B.$search("'+val+'")'}else{
val='$B.$check_def("'+val+'",'+scope_ns+'["'+val+'"])'}}}else{val=scope_ns+'["'+val+'"]'}}else if(scope===innermost){if($B._globals[scope.id]&& $B._globals[scope.id][val]){val=global_ns+'["'+val+'"]'}else if(!this.bound && !this.augm_assign){val='$B.$check_def_local("'+val+'",$locals["'+val+'"])'}else{val='$locals["'+val+'"]'}}else if(!this.bound && !this.augm_assign){
val='$B.$check_def_free("'+val+'",'+scope_ns+'["'+val+'"])'}else{val=scope_ns+'["'+val+'"]'}
return val+$to_js(this.tree,'')}else{
this.unknown_binding=true
return '$B.$search("'+val+'")'}}}
function $ImaginaryCtx(C,value){
this.type='imaginary'
this.value=value
this.toString=function(){return 'imaginary '+this.value}
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.to_js=function(){this.js_processed=true
return 'complex(0,'+this.value+')'}}
function $ImportCtx(C){
this.type='import'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.expect='id'
this.toString=function(){return 'import '+this.tree}
this.bind_names=function(){
var scope=$get_scope(this)
for(var i=0;i<this.tree.length;i++){if(this.tree[i].name==this.tree[i].alias){var name=this.tree[i].name,parts=name.split('.'),bound=name
if(parts.length>1){bound=parts[0]}}else{bound=this.tree[i].alias}
$B.bound[scope.id][bound]=true
$B.type[scope.id][bound]='module'}}
this.to_js=function(){this.js_processed=true
var scope=$get_scope(this)
var mod=scope.module
var res=[],pos=0
for(var i=0;i<this.tree.length;i++){var mod_name=this.tree[i].name,aliases=(this.tree[i].name==this.tree[i].alias)?
'{}' :('{"' + mod_name + '" : "' +
this.tree[i].alias + '"}'),localns='$locals_'+scope.id.replace(/\./g,'_');
res[pos++]='$B.$import("'+mod_name+'", [],'+aliases+',' +
localns + ', true);'}
return res.join('')+ 'None;'}}
function $IMPRTCtx(C){
this.type='import'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.expect='id'
this.toString=function(){return 'import '+this.tree}
this.bind_names=function(){
var scope=$get_scope(this)
for(var i=0;i<this.tree.length;i++){if(this.tree[i].name==this.tree[i].alias){var name=this.tree[i].name,parts=name.split('.'),bound=name
if(parts.length>1){bound=parts[0]}}else{bound=this.tree[i].alias}
$B.bound[scope.id][bound]=true
$B.type[scope.id][bound]='module'}}
this.transform=function(node,rank){
for(var i=1;i<this.tree.length;i++){var new_node=new $Node()
var ctx=new $IMPRTCtx(new $NodeCtx(new_node))
ctx.tree=[this.tree[i]]
node.parent.insert(rank+1,new_node)}
this.tree.splice(1,this.tree.length)
var name=this.tree[0].name,js='$locals["'+this.tree[0].alias+'"]= $B.imported["'+name+'"]'
node.add($NodeJS(js))
for(var i=rank+1;i<node.parent.children.length;i++){node.add(node.parent.children[i])}
node.parent.children.splice(rank+1,node.parent.children.length)
node.parent.add($NodeJS(')'))}
this.to_js=function(){this.js_processed=true
var scope=$get_scope(this)
var mod=scope.module
var res=[],pos=0
for(var i=0;i<this.tree.length;i++){var mod_name=this.tree[i].name,aliases=(this.tree[i].name==this.tree[i].alias)?
'{}' :('{"' + mod_name + '" : "' +
this.tree[i].alias + '"}'),localns='$locals_'+scope.id.replace(/\./g,'_');
res[pos++]='$B.$import_non_blocking("'+mod_name+'", function()'}
return res.join('')}}
function $ImportedModuleCtx(C,name){this.type='imported module'
this.toString=function(){return ' (imported module) '+this.name}
this.parent=C
this.name=name
this.alias=name
C.tree[C.tree.length]=this
this.to_js=function(){this.js_processed=true
return '"'+this.name+'"'}}
function $IntCtx(C,value){
this.type='int'
this.value=value
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return 'int '+this.value}
this.to_js=function(){this.js_processed=true
var v=parseInt(value[1],value[0])
if(v>$B.min_int && v<$B.max_int){return v}
else{return '$B.LongInt("'+value[1]+'", '+value[0]+')'}}}
function $JSCode(js){this.js=js
this.toString=function(){return this.js}
this.to_js=function(){this.js_processed=true
return this.js}}
function $KwArgCtx(C){
this.type='kwarg'
this.parent=C.parent
this.tree=[C.tree[0]]
C.parent.tree.pop()
C.parent.tree.push(this)
var value=this.tree[0].value
var ctx=C.parent.parent 
if(ctx.kwargs===undefined){ctx.kwargs=[value]}
else if(ctx.kwargs.indexOf(value)===-1){ctx.kwargs.push(value)}
else{$_SyntaxError(C,['keyword argument repeated'])}
var scope=$get_scope(this)
this.toString=function(){return 'kwarg '+this.tree[0]+'='+this.tree[1]}
this.to_js=function(){this.js_processed=true
var key=this.tree[0].value
if(key.substr(0,2)=='$$'){key=key.substr(2)}
var res='{$nat:"kw",name:"'+key+'",'
return res + 'value:'+$to_js(this.tree.slice(1,this.tree.length))+'}'}}
function $LambdaCtx(C){
this.type='lambda'
this.parent=C
C.tree[C.tree.length]=this
this.tree=[]
this.args_start=$pos+6
this.vars=[]
this.locals=[]
this.toString=function(){return '(lambda) '+this.args_start+' '+this.body_start}
this.to_js=function(){this.js_processed=true
var module=$get_module(this)
var src=$B.$py_src[module.id]
var qesc=new RegExp('"',"g"),
args=src.substring(this.args_start,this.body_start).replace(qesc,'\\"'),body=src.substring(this.body_start+1,this.body_end).replace(qesc,'\\"')
body=body.replace(/\n/g,' ')
var scope=$get_scope(this),sc=scope,env=[],pos=0
while(sc && sc.id!=='__builtins__'){env[pos++]='["'+sc.id+'",$locals_'+sc.id.replace(/\./g,'_')+']'
sc=sc.parent_block}
var env_string='['+env.join(', ')+']'
return '$B.$lambda('+env_string+',"'+args+'","'+body+'")'}}
function $ListOrTupleCtx(C,real){
this.type='list_or_tuple'
this.start=$pos
this.real=real
this.expect='id'
this.closed=false
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){switch(this.real){case 'list':
return '(list) ['+this.tree+']'
case 'list_comp':
case 'gen_expr':
return '('+this.real+') ['+this.intervals+'-'+this.tree+']'
default: 
return '(tuple) ('+this.tree+')'}}
this.is_comp=function(){switch(this.real){case 'list_comp':
case 'gen_expr':
case 'dict_or_set_comp':
return true}
return false}
this.get_src=function(){
var scope=$get_scope(this)
var ident=scope.id
while($B.$py_src[ident]===undefined && $B.modules[ident].parent_block){ident=$B.modules[ident].parent_block.id}
if($B.$py_src[ident]===undefined){
return $B.$py_src[scope.module]}
return $B.$py_src[ident]}
this.ids=function(){
var _ids={}
for(var i=0;i<this.tree.length;i++){var item=this.tree[i]
if(item.type=='id'){_ids[item.value]=true}
else if(item.type=='expr' && item.tree[0].type=="id"){_ids[item.tree[0].value]=true}else if(item.type=='list_or_tuple' ||
(item.type=="expr" && item.tree[0].type=='list_or_tuple')){if(item.type=="expr"){item=item.tree[0]}
for(var attr in item.ids()){_ids[attr]=true}}}
return _ids}
this.to_js=function(){this.js_processed=true
var scope=$get_scope(this)
var sc=scope
var env=[],pos=0
while(sc && sc.id!=='__builtins__'){if(sc===scope){env[pos++]='["'+sc.id+'",$locals]'}else{env[pos++]='["'+sc.id+'",$locals_'+sc.id.replace(/\./g,'_')+']'}
sc=sc.parent_block}
var env_string='['+env.join(', ')+']'
var module=$get_module(this),module_name=module.id.replace(/\./g,'_')
switch(this.real){case 'list':
return '$B.$list(['+$to_js(this.tree)+'])'
case 'list_comp':
case 'gen_expr':
case 'dict_or_set_comp':
var src=this.get_src()
var res1=[],items=[]
var qesc=new RegExp('"',"g")
for(var i=1;i<this.intervals.length;i++){var txt=src.substring(this.intervals[i-1],this.intervals[i])
var lines=txt.split('\n')
var res2=[],pos=0
for(var j=0;j<lines.length;j++){var txt=lines[j]
if(txt.replace(/ /g,'').length==0){continue}
txt=txt.replace(/\n/g,' ')
txt=txt.replace(/\\/g,'\\\\')
txt=txt.replace(qesc,'\\"')
res2[pos++]='"'+txt+'"'}
res1.push('['+res2.join(',')+']')}
switch(this.real){case 'list_comp':
return '$B.$list_comp('+env_string+','+res1+')'
case 'dict_or_set_comp':
if(this.expression.length===1){return '$B.$gen_expr('+env_string+','+res1+')'}
return '$B.$dict_comp('+env_string+','+res1+')'}
return '$B.$gen_expr('+env_string+','+res1+')'
case 'tuple':
if(this.tree.length===1 && this.has_comma===undefined){return this.tree[0].to_js()}
return 'tuple(['+$to_js(this.tree)+'])'}}}
function $NodeCtx(node){
this.node=node
node.C=this
this.tree=[]
this.type='node'
var scope=null
var tree_node=node
while(tree_node.parent && tree_node.parent.type!=='module'){var ntype=tree_node.parent.C.tree[0].type
var _break_flag=false
switch(ntype){case 'def':
case 'class':
case 'generator':
scope=tree_node.parent
_break_flag=true}
if(_break_flag)break
tree_node=tree_node.parent}
if(scope==null){scope=tree_node.parent ||tree_node }
this.node.locals=clone($B.bound[scope.id])
this.toString=function(){return 'node '+this.tree}
this.to_js=function(){this.js_processed=true
if(this.tree.length>1){var new_node=new $Node()
var ctx=new $NodeCtx(new_node)
ctx.tree=[this.tree[1]]
new_node.indent=node.indent+4
this.tree.pop()
node.add(new_node)}
if(node.children.length==0){return $to_js(this.tree)+';'}
return $to_js(this.tree)}}
function $NodeJS(js){var node=new $Node()
new $NodeJSCtx(node,js)
return node}
function $NodeJSCtx(node,js){
this.node=node
node.C=this
this.type='node_js'
this.tree=[js]
this.toString=function(){return 'js '+js}
this.to_js=function(){this.js_processed=true
return js}}
function $NonlocalCtx(C){
this.type='global'
this.parent=C
this.tree=[]
this.names={}
C.tree[C.tree.length]=this
this.expect='id'
this.scope=$get_scope(this)
this.scope.nonlocals=this.scope.nonlocals ||{}
if(this.scope.C===undefined){$_SyntaxError(C,["nonlocal declaration not allowed at module level"])}
this.toString=function(){return 'global '+this.tree}
this.add=function(name){if($B.bound[this.scope.id][name]=='arg'){$_SyntaxError(C,["name '"+name+"' is parameter and nonlocal"])}
this.names[name]=[false,$pos]
this.scope.nonlocals[name]=true}
this.transform=function(node,rank){var pscope=this.scope.parent_block
if(pscope.C===undefined){$_SyntaxError(C,["no binding for nonlocal '"+
$B.last(Object.keys(this.names))+"' found"])}else{while(pscope!==undefined && pscope.C!==undefined){for(var name in this.names){if($B.bound[pscope.id][name]!==undefined){this.names[name]=[true]}}
pscope=pscope.parent_block}
for(var name in this.names){if(!this.names[name][0]){console.log('nonlocal error, C '+C)
$pos=this.names[name][1]
$_SyntaxError(C,["no binding for nonlocal '"+name+"' found"])}}}}
this.to_js=function(){this.js_processed=true
return ''}}
function $NotCtx(C){
this.type='not'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return 'not ('+this.tree+')'}
this.to_js=function(){this.js_processed=true
return '!bool('+$to_js(this.tree)+')'}}
function $OpCtx(C,op){
this.type='op'
this.op=op
this.parent=C.parent
this.tree=[C]
this.scope=$get_scope(this)
if(C.type=="expr"){if(['int','float','str'].indexOf(C.tree[0].type)>-1){this.left_type=C.tree[0].type}else if(C.tree[0].type=="id"){var binding=$B.bound[this.scope.id][C.tree[0].value]
if(binding){this.left_type=binding.type}}}
C.parent.tree.pop()
C.parent.tree.push(this)
this.toString=function(){return '(op '+this.op+') ['+this.tree+']'}
this.to_js=function(){this.js_processed=true
var comps={'==':'eq','!=':'ne','>=':'ge','<=':'le','<':'lt','>':'gt'}
if(comps[this.op]!==undefined){var method=comps[this.op]
if(this.tree[0].type=='expr' && this.tree[1].type=='expr'){var t0=this.tree[0].tree[0],t1=this.tree[1].tree[0]
switch(t1.type){case 'int':
switch(t0.type){case 'int':
return t0.to_js()+this.op+t1.to_js()
case 'str':
return '$B.$TypeError("unorderable types: int() < str()")'
case 'id':
var res='typeof '+t0.to_js()+'=="number" ? '
res +=t0.to_js()+this.op+t1.to_js()+' : '
res +='getattr('+this.tree[0].to_js()
res +=',"__'+method+'__")('+this.tree[1].to_js()+')'
return res}
break;
case 'str':
switch(t0.type){case 'str':
return t0.to_js()+this.op+t1.to_js()
case 'int':
return '$B.$TypeError("unorderable types: str() < int()")'
case 'id':
var res='typeof '+t0.to_js()+'=="string" ? '
res +=t0.to_js()+this.op+t1.to_js()+' : '
res +='getattr('+this.tree[0].to_js()
res +=',"__'+method+'__")('+this.tree[1].to_js()+')'
return res}
break;
case 'id':
if(t0.type=='id'){var res='typeof '+t0.to_js()+'!="object" && '
res +='typeof '+t0.to_js()+'==typeof '+t1.to_js()
res +=' ? '+t0.to_js()+this.op+t1.to_js()+' : '
res +='getattr('+this.tree[0].to_js()
res +=',"__'+method+'__")('+this.tree[1].to_js()+')'
return res}
break;}}}
switch(this.op){case 'and':
var res='$B.$test_expr($B.$test_item('+this.tree[0].to_js()+')&&'
return res + '$B.$test_item('+this.tree[1].to_js()+'))'
case 'or':
var res='$B.$test_expr($B.$test_item('+this.tree[0].to_js()+')||'
return res + '$B.$test_item('+this.tree[1].to_js()+'))'
case 'in':
return '$B.$is_member('+$to_js(this.tree)+')'
case 'not_in':
return '!$B.$is_member('+$to_js(this.tree)+')'
case 'unary_neg':
case 'unary_pos':
case 'unary_inv':
var op,method
if(this.op=='unary_neg'){op='-';method='__neg__'}
else if(this.op=='unary_pos'){op='-';method='__pos__'}
else{op='~';method='__invert__'}
if(this.tree[1].type=="expr"){var x=this.tree[1].tree[0]
switch(x.type){case 'int':
var v=parseInt(x.value[1],x.value[0])
if(v>$B.min_int && v<$B.max_int){return op+v}
return 'getattr('+x.to_js()+', "'+method+'")()'
case 'float':
return 'float('+op+x.value+')'
case 'imaginary':
return 'complex(0,'+op+x.value+')'}}
return 'getattr('+this.tree[1].to_js()+',"'+method+'")()'
case 'is':
return this.tree[0].to_js()+ '===' + this.tree[1].to_js()
case 'is_not':
return this.tree[0].to_js()+ '!==' + this.tree[1].to_js()
case '*':
case '+':
case '-':
var op=this.op,vars=[],has_float_lit=false,scope=$get_scope(this)
function is_simple(elt){if(elt.type=='expr' && elt.tree[0].type=='int'){return true}
else if(elt.type=='expr' && elt.tree[0].type=='float'){has_float_lit=true
return true}else if(elt.type=='expr' && elt.tree[0].type=='list_or_tuple'
&& elt.tree[0].real=='tuple'
&& elt.tree[0].tree.length==1
&& elt.tree[0].tree[0].type=='expr'){return is_simple(elt.tree[0].tree[0].tree[0])}else if(elt.type=='expr' && elt.tree[0].type=='id'){var _var=elt.tree[0].to_js()
if(vars.indexOf(_var)==-1){vars.push(_var)}
return true}else if(elt.type=='op' &&['*','+','-'].indexOf(elt.op)>-1){for(var i=0;i<elt.tree.length;i++){if(!is_simple(elt.tree[i])){return false}}
return true}
return false}
function get_type(ns,v){var t
if(['int','float','str'].indexOf(v.type)>-1){t=v.type}else if(v.type=='id' && ns[v.value]){t=ns[v.value].type}
return t}
var e0=this.tree[0],e1=this.tree[1]
if(is_simple(this)){var v0=this.tree[0].tree[0]
var v1=this.tree[1].tree[0]
if(vars.length==0 && !has_float_lit){
return this.simple_js()}else if(vars.length==0){
return 'new Number('+this.simple_js()+')'}else{
var ns=$B.bound[scope.id],t0=get_type(ns,v0),t1=get_type(ns,v1)
if((t0=='float' && t1=='float')||
(this.op=='+' && t0=='str' && t1=='str')){this.result_type=t0
return v0.to_js()+this.op+v1.to_js()}else if(['int','float'].indexOf(t0)>-1 &&
['int','float'].indexOf(t1)>-1){if(t0=='int' && t1=='int'){this.result_type='int'}
else{this.result_type='float'}
switch(this.op){case '+':
return '$B.add('+v0.to_js()+','+v1.to_js()+')'
case '-':
return '$B.sub('+v0.to_js()+','+v1.to_js()+')'
case '*':
return '$B.mul('+v0.to_js()+','+v1.to_js()+')'}}
var tests=[],tests1=[],pos=0
for(var i=0;i<vars.length;i++){
tests[pos]='typeof '+vars[i]+'.valueOf() == "number"'
tests1[pos++]='typeof '+vars[i]+' == "number"'}
var res=[tests.join(' && ')+' ? '],pos=1
res[pos++]='('+tests1.join(' && ')+' ? '
res[pos++]=this.simple_js()
res[pos++]=' : new $B.$FloatClass('+this.simple_js()+')'
res[pos++]=')'
if(this.op=='+'){res[pos++]=' : (typeof '+this.tree[0].to_js()+'=="string"'
res[pos++]=' && typeof '+this.tree[1].to_js()
res[pos++]='=="string") ? '+this.tree[0].to_js()
res[pos++]='+'+this.tree[1].to_js()}
res[pos++]=': getattr('+this.tree[0].to_js()+',"__'
res[pos++]=$operators[this.op]+'__")'+'('+this.tree[1].to_js()+')'
return '('+res.join('')+')'}}
var res='getattr('+e0.to_js()+',"__'
return res + $operators[this.op]+'__")'+'('+e1.to_js()+')'
default:
var res='getattr('+this.tree[0].to_js()+',"__'
return res + $operators[this.op]+'__")'+'('+this.tree[1].to_js()+')'}}
this.simple_js=function(){function sjs(elt){if(elt.type=='op'){return elt.simple_js()}
else if(elt.type=='expr' && elt.tree[0].type=='list_or_tuple' 
&& elt.tree[0].real=='tuple'
&& elt.tree[0].tree.length==1 
&& elt.tree[0].tree[0].type=='expr'){return '('+elt.tree[0].tree[0].tree[0].simple_js()+')'}else{return elt.tree[0].to_js()}}
if(op=='+'){return '$B.add('+sjs(this.tree[0])+','+sjs(this.tree[1])+')'}
else if(op=='-'){return '$B.sub('+sjs(this.tree[0])+','+sjs(this.tree[1])+')'}
else if(op=='*'){return '$B.mul('+sjs(this.tree[0])+','+sjs(this.tree[1])+')'}
else if(op=='/'){return '$B.div('+sjs(this.tree[0])+','+sjs(this.tree[1])+')'}
else{return sjs(this.tree[0])+op+sjs(this.tree[1])}}}
function $PackedCtx(C){
this.type='packed'
if(C.parent.type=='list_or_tuple'){for(var i=0;i<C.parent.tree.length;i++){var child=C.parent.tree[i]
if(child.type=='expr' && child.tree.length>0 
&& child.tree[0].type=='packed'){$_SyntaxError(C,["two starred expressions in assignment"])}}}
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(packed) '+this.tree}
this.to_js=function(){this.js_processed=true
return $to_js(this.tree)}}
function $PassCtx(C){
this.type='pass'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(pass)'}
this.to_js=function(){this.js_processed=true
return 'void(0)'}}
function $RaiseCtx(C){
this.type='raise'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return ' (raise) '+this.tree}
this.to_js=function(){this.js_processed=true
var res=''
if(this.tree.length===0)return '$B.$raise()'
var exc=this.tree[0],exc_js=exc.to_js()
if(exc.type==='id' ||
(exc.type==='expr' && exc.tree[0].type==='id')){res='if(isinstance('+exc_js+',type)){throw '+exc_js+'()}'
return res + 'else{throw '+exc_js+'}'}
while(this.tree.length>1)this.tree.pop()
return res+'throw '+$to_js(this.tree)}}
function $RawJSCtx(C,js){this.type="raw_js"
C.tree[C.tree.length]=this
this.parent=C
this.toString=function(){return '(js) '+js}
this.to_js=function(){this.js_processed=true
return js}}
function $ReturnCtx(C){
this.type='return'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
var node=$get_node(this)
while(node.parent){if(node.parent.C && node.parent.C.tree[0].type=='for'){node.parent.C.tree[0].has_return=true
break}
node=node.parent}
this.toString=function(){return 'return '+this.tree}
this.to_js=function(){this.js_processed=true
if(this.tree.length==1 && this.tree[0].type=='abstract_expr'){
this.tree.pop()
new $IdCtx(new $ExprCtx(this,'rvalue',false),'None')}
var scope=$get_scope(this)
if(scope.ntype=='generator'){return 'return [$B.generator_return(' + $to_js(this.tree)+')]'}
var node=$get_node(this),leave_frame=true,in_try=false
while(node && leave_frame){if(node.is_try){in_try=true
pnode=node.parent,flag=false
for(var i=0;i<pnode.children.length;i++){var child=pnode.children[i]
if(!flag && child===node){flag=true;continue}
if(flag){if(child.C.tree[0].type=="single_kw" &&
child.C.tree[0].token=="finally"){leave_frame=false
break}}}}
node=node.parent}
if(leave_frame && !in_try){
var res='try{var $res = '+$to_js(this.tree)+';'+
'$B.leave_frame($local_name);return $res}catch(err){'+
'$B.leave_frame($local_name);throw err}'}else if(leave_frame){var res='var $res = '+$to_js(this.tree)+';'+
'$B.leave_frame($local_name);return $res'}else{var res="return "+$to_js(this.tree)}
var res="return "+$to_js(this.tree)
return res}}
function $SingleKwCtx(C,token){
this.type='single_kw'
this.token=token
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
if(token=="else"){var node=C.node
var pnode=node.parent
for(var rank=0;rank<pnode.children.length;rank++){if(pnode.children[rank]===node)break}
var pctx=pnode.children[rank-1].C
if(pctx.tree.length>0){var elt=pctx.tree[0]
if(elt.type=='for' ||
(elt.type=='condition' && elt.token=='while')){elt.has_break=true
this.loop_num=elt.loop_num}}}
this.toString=function(){return this.token}
this.to_js=function(){this.js_processed=true
if(this.token=='finally')return this.token
if(this.loop_num!==undefined){var scope=$get_scope(this)
var res='if($locals_'+scope.id.replace(/\./g,'_')
return res +'["$no_break'+this.loop_num+'"])'}
return this.token}}
function $StarArgCtx(C){
this.type='star_arg'
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
this.toString=function(){return '(star arg) '+this.tree}
this.to_js=function(){this.js_processed=true
return '{$nat:"ptuple",arg:'+$to_js(this.tree)+'}'}}
function $StringCtx(C,value){
this.type='str'
this.parent=C
this.tree=[value]
this.raw=false
C.tree[C.tree.length]=this
this.toString=function(){return 'string '+(this.tree||'')}
this.to_js=function(){this.js_processed=true
var res='',type=null
for(var i=0;i<this.tree.length;i++){if(this.tree[i].type=="call"){
var js='(function(){throw TypeError("'+"'str'"+
' object is not callable")}())'
return js}else{var value=this.tree[i],is_bytes=value.charAt(0)=='b'
if(type==null){type=is_bytes
if(is_bytes){res+='bytes('}}else if(type!=is_bytes){return '$B.$TypeError("can\'t concat bytes to str")'}
if(!is_bytes){res +=value.replace(/\n/g,'\\n\\\n')}else{res +=value.substr(1).replace(/\n/g,'\\n\\\n')}
if(i<this.tree.length-1){res+='+'}}}
if(is_bytes){res +=',"ISO-8859-1")'}
return res}}
function $SubCtx(C){
this.type='sub'
this.func='getitem' 
this.value=C.tree[0]
C.tree.pop()
C.tree[C.tree.length]=this
this.parent=C
this.tree=[]
this.toString=function(){return '(sub) (value) '+this.value+' (tree) '+this.tree}
this.to_js=function(){this.js_processed=true
if(this.func=='getitem' && this.value.type=='id'){var type=$get_node(this).locals[this.value.value],val=this.value.to_js()
if(type=='list'||type=='tuple'){if(this.tree.length==1){return '$B.list_key('+val+
', '+this.tree[0].to_js()+')'}else if(this.tree.length==2){return '$B.list_slice('+val+
', '+(this.tree[0].to_js()||"null")+','+
(this.tree[1].to_js()||"null")+')'}else if(this.tree.length==3){return '$B.list_slice_step('+val+
', '+(this.tree[0].to_js()||"null")+','+
(this.tree[1].to_js()||"null")+','+
(this.tree[2].to_js()||"null")+')'}}}
if(this.func=='getitem' && this.tree.length==1){return '$B.$getitem('+this.value.to_js()+',' + this.tree[0].to_js()+')'}
var res='',shortcut=false
if(this.func!=='delitem' && Array.isArray && 
this.tree.length==1 && !this.in_sub){var expr='',x=this
shortcut=true
while(x.value.type=='sub'){expr +='['+x.tree[0].to_js()+']'
x.value.in_sub=true
x=x.value}
var subs=x.value.to_js()+'['+x.tree[0].to_js()+']'
res +='((Array.isArray('+x.value.to_js()+') || '
res +='typeof '+x.value.to_js()+'=="string")'
res +=' && '+subs+'!==undefined ?'
res +=subs+expr+ ' : '}
var val=this.value.to_js()
res +='getattr('+val+',"__'+this.func+'__")('
if(this.tree.length===1){res +=this.tree[0].to_js()+')'}else{var res1=[],pos=0
for(var i=0;i<this.tree.length;i++){if(this.tree[i].type==='abstract_expr'){res1[pos++]='None'}
else{res1[pos++]=this.tree[i].to_js()}}
res +='slice(' + res1.join(',')+ '))'}
return shortcut ? res+')' : res}}
function $TargetListCtx(C){
this.type='target_list'
this.parent=C
this.tree=[]
this.expect='id'
C.tree[C.tree.length]=this
this.toString=function(){return '(target list) '+this.tree}
this.to_js=function(){this.js_processed=true
return $to_js(this.tree)}}
function $TernaryCtx(C){
this.type='ternary'
this.parent=C.parent
C.parent.tree.pop()
C.parent.tree.push(this)
C.parent=this
this.tree=[C]
this.toString=function(){return '(ternary) '+this.tree}
this.to_js=function(){this.js_processed=true
var res='bool('+this.tree[1].to_js()+') ? ' 
res +=this.tree[0].to_js()+' : ' 
return res + this.tree[2].to_js()}}
function $TryCtx(C){
this.type='try'
this.parent=C
C.tree[C.tree.length]=this
this.toString=function(){return '(try) '}
this.transform=function(node,rank){if(node.parent.children.length===rank+1){$_SyntaxError(C,"missing clause after 'try' 1")}else{var next_ctx=node.parent.children[rank+1].C.tree[0]
switch(next_ctx.type){case 'except':
case 'finally':
case 'single_kw':
break
default:
$_SyntaxError(C,"missing clause after 'try' 2")}}
var scope=$get_scope(this)
var $var='$B.$failed'+$loop_num
var js=$var+'=false;'+
'try'
new $NodeJSCtx(node,js)
node.is_try=true 
var catch_node=new $Node()
new $NodeJSCtx(catch_node,'catch($err'+$loop_num+')')
catch_node.is_catch=true
node.parent.insert(rank+1,catch_node)
var new_node=new $Node()
new $NodeJSCtx(new_node,$var+'=true;if(0){}')
catch_node.insert(0,new_node)
var pos=rank+2
var has_default=false 
var has_else=false 
var has_finally=false
while(1){if(pos===node.parent.children.length){break}
var ctx=node.parent.children[pos].C.tree[0]
if(ctx.type==='except'){
if(has_else){$_SyntaxError(C,"'except' or 'finally' after 'else'")}
if(has_finally){$_SyntaxError(C,"'except' after 'finally'")}
ctx.error_name='$err'+$loop_num
if(ctx.tree.length>0 && ctx.tree[0].alias!==null
&& ctx.tree[0].alias!==undefined){
var new_node=new $Node()
var alias=ctx.tree[0].alias
var js='$locals["'+alias+'"]'
js +='=$B.exception($err'+$loop_num+')'
new $NodeJSCtx(new_node,js)
node.parent.children[pos].insert(0,new_node)}
catch_node.insert(catch_node.children.length,node.parent.children[pos])
if(ctx.tree.length===0){if(has_default){$_SyntaxError(C,'more than one except: line')}
has_default=true}
node.parent.children.splice(pos,1)}else if(ctx.type==='single_kw' && ctx.token==='finally'){has_finally=true
pos++}else if(ctx.type==='single_kw' && ctx.token==='else'){if(has_else){$_SyntaxError(C,"more than one 'else'")}
if(has_finally){$_SyntaxError(C,"'else' after 'finally'")}
has_else=true
var else_body=node.parent.children[pos]
node.parent.children.splice(pos,1)}else{break}}
if(!has_default){
var new_node=new $Node(),ctx=new $NodeCtx(new_node)
catch_node.insert(catch_node.children.length,new_node)
new $SingleKwCtx(ctx,'else')
new_node.add($NodeJS('throw $err'+$loop_num))}
if(has_else){var else_node=new $Node()
else_node.module=scope.module
new $NodeJSCtx(else_node,'if(!$B.$failed'+$loop_num+')')
for(var i=0;i<else_body.children.length;i++){else_node.add(else_body.children[i])}
node.parent.insert(pos,else_node)
pos++}
$loop_num++}
this.to_js=function(){this.js_processed=true
return 'try'}}
function $UnaryCtx(C,op){
this.type='unary'
this.op=op
this.parent=C
C.tree[C.tree.length]=this
this.toString=function(){return '(unary) '+this.op}
this.to_js=function(){this.js_processed=true
return this.op}}
function $WithCtx(C){
this.type='with'
this.parent=C
C.tree[C.tree.length]=this
this.tree=[]
this.expect='as'
this.scope=$get_scope(this)
this.toString=function(){return '(with) '+this.tree}
this.set_alias=function(arg){this.tree[this.tree.length-1].alias=arg
$B.bound[this.scope.id][arg]=true
$B.type[this.scope.id][arg]=false
if(this.scope.ntype !=='module'){
this.scope.C.tree[0].locals.push(arg)}}
this.transform=function(node,rank){while(this.tree.length>1){
var suite=node.children,item=this.tree.pop(),new_node=new $Node(),ctx=new $NodeCtx(new_node),with_ctx=new $WithCtx(ctx)
item.parent=with_ctx
with_ctx.tree=[item]
for(var i=0;i<suite.length;i++){new_node.add(suite[i])}
node.children=[new_node]}
node.is_try=true 
if(this.transformed)return 
if(this.tree.length>1){var nw=new $Node()
var ctx=new $NodeCtx(nw)
nw.parent=node
nw.module=node.module
nw.indent=node.indent+4
var wc=new $WithCtx(ctx)
wc.tree=this.tree.slice(1)
for(var i=0;i<node.children.length;i++){nw.add(node.children[i])}
node.children=[nw]
this.transformed=true
return}
var num=this.num=$loop_num 
if(this.tree[0].alias===null){this.tree[0].alias='$temp'}
if(this.tree[0].type=='expr' && 
this.tree[0].tree[0].type=='list_or_tuple'){if(this.tree[1].type!='expr' ||
this.tree[1].tree[0].type!='list_or_tuple'){$_SyntaxError(C)}
if(this.tree[0].tree[0].tree.length!=this.tree[1].tree[0].tree.length){$_SyntaxError(C,['wrong number of alias'])}
var ids=this.tree[0].tree[0].tree
var alias=this.tree[1].tree[0].tree
this.tree.shift()
this.tree.shift()
for(var i=ids.length-1;i>=0;i--){ids[i].alias=alias[i].value
this.tree.splice(0,0,ids[i])}}
var block=node.children 
node.children=[]
var try_node=new $Node()
try_node.is_try=true
new $NodeJSCtx(try_node,'try')
node.add(try_node)
if(this.tree[0].alias){var alias=this.tree[0].alias
var js='$locals'+'["'+alias+'"] = $value'+num
var value_node=new $Node()
new $NodeJSCtx(value_node,js)
try_node.add(value_node)}
for(var i=0;i<block.length;i++){try_node.add(block[i])}
var catch_node=new $Node()
catch_node.is_catch=true 
new $NodeJSCtx(catch_node,'catch($err'+$loop_num+')')
var fbody=new $Node(),indent=node.indent+4
var js='$exc'+num+' = false;$err'+$loop_num+'=$B.exception($err'+
$loop_num+')\n'+' '.repeat(indent)+
'if(!bool($ctx_manager_exit'+num+'($err'+$loop_num+
'.__class__.$factory,'+'$err'+$loop_num+
',getattr($err'+$loop_num+',"traceback"))))'
js +='{throw $err'+$loop_num+'}'
new $NodeJSCtx(fbody,js)
catch_node.add(fbody)
node.add(catch_node)
var finally_node=new $Node()
new $NodeJSCtx(finally_node,'finally')
finally_node.C.type='single_kw'
finally_node.C.token='finally'
finally_node.is_except=true
var fbody=new $Node()
new $NodeJSCtx(fbody,'if($exc'+num+'){$ctx_manager_exit'+num+
'(None,None,None)}')
finally_node.add(fbody)
node.parent.insert(rank+1,finally_node)
$loop_num++
this.transformed=true}
this.to_js=function(){this.js_processed=true
var indent=$get_node(this).indent,h=' '.repeat(indent),num=this.num,scope=$get_scope(this)
var res='var $ctx_manager'+num+' = '+this.tree[0].to_js()+
'\n'+h+'var $ctx_manager_exit'+num+
'= getattr($ctx_manager'+num+',"__exit__")\n'+
h+'var $value'+num+' = getattr($ctx_manager'+num+
',"__enter__")()\n'
res +=h+'var $exc'+num+' = true\n'
return res + h+'try'}}
function $YieldCtx(C){
this.type='yield'
this.toString=function(){return '(yield) '+this.tree}
this.parent=C
this.tree=[]
C.tree[C.tree.length]=this
switch(C.type){case 'node':
break;
case 'assign':
case 'tuple':
case 'list_or_tuple': 
var ctx=C
while(ctx.parent)ctx=ctx.parent
ctx.node.yield_atoms.push(this)
break;
default:
$_SyntaxError(C,'yield atom must be inside ()')}
var scope=$get_scope(this)
if(!scope.is_function){$_SyntaxError(C,["'yield' outside function"])}else if(scope.has_return_with_arguments){$_SyntaxError(C,["'return' with argument inside generator"])}
var def=scope.C.tree[0]
def.type='generator'
def.yields.push(this)
this.toString=function(){return '(yield) '+(this.from ? '(from) ' : '')+this.tree}
this.transform=function(node,rank){if(this.from===true){
var new_node=new $Node()
node.parent.children.splice(rank,1)
node.parent.insert(rank,new_node)
var for_ctx=new $ForExpr(new $NodeCtx(new_node))
new $IdCtx(new $ExprCtx(for_ctx,'id',false),'$temp'+$loop_num)
for_ctx.tree[1]=this.tree[0]
this.tree[0].parent=for_ctx
var yield_node=new $Node()
new_node.add(yield_node)
new $IdCtx(new $YieldCtx(new $NodeCtx(yield_node)),'$temp'+$loop_num)
var ph_node=new $Node()
new $NodeJSCtx(ph_node,'// placeholder for generator sent value')
ph_node.set_yield_value=true
new_node.add(ph_node)
for_ctx.transform(new_node,rank)
$loop_num++}else{var new_node=new $Node()
new $NodeJSCtx(new_node,'// placeholder for generator sent value')
new_node.set_yield_value=true
node.parent.insert(rank+1,new_node)}}
this.to_js=function(){this.js_processed=true
if(this.from===undefined)return $to_js(this.tree)||'None'
return $to_js(this.tree)}}
function $add_line_num(node,rank){if(node.type==='module'){var i=0
while(i<node.children.length){i +=$add_line_num(node.children[i],i)}}else{var elt=node.C.tree[0],offset=1
var flag=true
var pnode=node
while(pnode.parent!==undefined){pnode=pnode.parent}
var mod_id=pnode.id
if(node.line_num===undefined){flag=false}
if(elt.type==='condition' && elt.token==='elif'){flag=false}
else if(elt.type==='except'){flag=false}
else if(elt.type==='single_kw'){flag=false}
if(flag){
var js=';$locals.$line_info="'+node.line_num+','+mod_id+'";'
var new_node=new $Node()
new $NodeJSCtx(new_node,js)
node.parent.insert(rank,new_node)
offset=2}
var i=0
while(i<node.children.length)i+=$add_line_num(node.children[i],i)
if((elt.type=='condition' && elt.token=="while")
||node.C.type=='for'){node.add($NodeJS('$locals.$line_info="'+node.line_num+','+
mod_id+'";'))}
return offset}}
function $previous(C){var previous=C.node.parent.children[C.node.parent.children.length-2]
if(!previous ||!previous.C){$_SyntaxError(C,'keyword not following correct keyword')}
return previous.C.tree[0]}
function $get_docstring(node){var doc_string=''
if(node.children.length>0){var firstchild=node.children[0]
if(firstchild.C.tree && firstchild.C.tree[0].type=='expr'){if(firstchild.C.tree[0].tree[0].type=='str')
doc_string=firstchild.C.tree[0].tree[0].to_js()}}
return doc_string}
function $get_scope(C){
var ctx_node=C.parent
while(ctx_node.type!=='node'){ctx_node=ctx_node.parent}
var tree_node=ctx_node.node
var scope=null
while(tree_node.parent && tree_node.parent.type!=='module'){var ntype=tree_node.parent.C.tree[0].type
switch(ntype){case 'def':
case 'class':
case 'generator':
var scope=tree_node.parent
scope.ntype=ntype
scope.elt=scope.C.tree[0]
scope.is_function=ntype!='class'
return scope}
tree_node=tree_node.parent}
var scope=tree_node.parent ||tree_node 
scope.ntype="module"
scope.elt=scope.module
return scope}
function $get_module(C){
var ctx_node=C.parent
while(ctx_node.type!=='node'){ctx_node=ctx_node.parent}
var tree_node=ctx_node.node
var scope=null
while(tree_node.parent.type!=='module'){tree_node=tree_node.parent}
var scope=tree_node.parent 
scope.ntype="module"
return scope}
function $get_node(C){var ctx=C
while(ctx.parent){ctx=ctx.parent}
return ctx.node}
function $get_blocks(name,scope){var res=[]
while(true){if($B.bound[scope.id][name]!==undefined){res.push(scope.id)}
if(scope.parent_block){if(scope.parent_block.id=='__builtins__'){if(scope.blurred){return false}}}else{break}
scope=scope.parent_block}
return res}
function $set_type(scope,expr,value){
if(expr.type=='expr'){expr=expr.tree[0]}
while(value.type=='expr' && value.tree.length==1){value=value.tree[0]}
if(value.type=='list_or_tuple' && value.real=='tuple' && 
value.tree.length==1){return $set_type(scope.id,expr,value.tree[0])}
if($B.type[scope.id]===undefined){return}
if(expr.type=="id"){switch(value.type){case 'int':
case 'str':
$B.type[scope.id][expr.value]=value.type
return
case 'list_or_tuple':
case 'dict_or_set':
$B.type[scope.id][expr.value]=value.real
return
case 'id':
$B.type[scope.id][expr.value]=$B.type[scope.id][value.value]
return
case 'call':
var func_name=value.func.value
if($B.bound.__builtins__[func_name]!==undefined){var blocks=$get_blocks(func_name,scope)
if(blocks.length==1 && blocks[0]=='__builtins__'){switch(func_name){case 'int':
case 'list':
case 'str':
$B.type[scope.id][expr.value]=func_name
return}}}
break
default:
break}}
$B.type[scope.id][expr.value]=false}
function $ws(n){return ' '.repeat(n)}
function $to_js_map(tree_element){if(tree_element.to_js !==undefined)return tree_element.to_js()
throw Error('no to_js() for '+tree_element)}
function $to_js(tree,sep){if(sep===undefined){sep=','}
return tree.map($to_js_map).join(sep)}
var $expr_starters=['id','imaginary','int','float','str','bytes','[','(','{','not','lambda']
function $arbo(ctx){while(ctx.parent!=undefined){ctx=ctx.parent}
return ctx}
function $transition(C,token){
switch(C.type){case 'abstract_expr':
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lambda':
case 'yield':
C.parent.tree.pop()
var commas=C.with_commas
C=C.parent}
switch(token){case 'id': 
return new $IdCtx(new $ExprCtx(C,'id',commas),arguments[2])
case 'str':
return new $StringCtx(new $ExprCtx(C,'str',commas),arguments[2])
case 'bytes':
return new $StringCtx(new $ExprCtx(C,'bytes',commas),arguments[2])
case 'int':
return new $IntCtx(new $ExprCtx(C,'int',commas),arguments[2])
case 'float':
return new $FloatCtx(new $ExprCtx(C,'float',commas),arguments[2])
case 'imaginary':
return new $ImaginaryCtx(new $ExprCtx(C,'imaginary',commas),arguments[2])
case '(':
return new $ListOrTupleCtx(new $ExprCtx(C,'tuple',commas),'tuple')
case '[':
return new $ListOrTupleCtx(new $ExprCtx(C,'list',commas),'list')
case '{':
return new $DictOrSetCtx(new $ExprCtx(C,'dict_or_set',commas))
case '.':
return new $EllipsisCtx(new $ExprCtx(C,'ellipsis',commas))
case 'not':
if(C.type==='op'&&C.op==='is'){
C.op='is_not'
return C}
return new $NotCtx(new $ExprCtx(C,'not',commas))
case 'lambda':
return new $LambdaCtx(new $ExprCtx(C,'lambda',commas))
case 'op':
var tg=arguments[2]
switch(tg){case '*':
C.parent.tree.pop()
var commas=C.with_commas
C=C.parent
return new $PackedCtx(new $ExprCtx(C,'expr',commas))
case '-':
case '~':
case '+':
C.parent.tree.pop()
var left=new $UnaryCtx(C.parent,tg)
if(tg=='-'){var op_expr=new $OpCtx(left,'unary_neg')}
else if(tg=='+'){var op_expr=new $OpCtx(left,'unary_pos')}
else{var op_expr=new $OpCtx(left,'unary_inv')}
return new $AbstractExprCtx(op_expr,false)}
$_SyntaxError(C,'token '+token+' after '+C)
case '=':
$_SyntaxError(C,token)
case 'yield':
return new $AbstractExprCtx(new $YieldCtx(C),true)
case ':':
return $transition(C.parent,token,arguments[2])
case ')':
case ',':
switch(C.parent.type){case 'list_or_tuple':
case 'call_arg':
case 'op':
case 'yield':
break
default:
$_SyntaxError(C,token)}}
return $transition(C.parent,token,arguments[2])
case 'annotation':
return $transition(C.parent,token)
case 'assert':
if(token==='eol')return $transition(C.parent,token)
$_SyntaxError(C,token)
case 'assign':
if(token==='eol'){if(C.tree[1].type=='abstract_expr'){$_SyntaxError(C,'token '+token+' after '+C)}
C.guess_type()
return $transition(C.parent,'eol')}
$_SyntaxError(C,'token '+token+' after '+C)
case 'attribute':
if(token==='id'){var name=arguments[2]
if(noassign[name]===true){$_SyntaxError(C,["cannot assign to "+name])}
C.name=name
return C.parent}
$_SyntaxError(C,token)
case 'augm_assign':
if(token==='eol'){if(C.tree[1].type=='abstract_expr'){$_SyntaxError(C,'token '+token+' after '+C)}
return $transition(C.parent,'eol')}
$_SyntaxError(C,'token '+token+' after '+C)
case 'break':
if(token==='eol')return $transition(C.parent,'eol')
$_SyntaxError(C,token)
case 'call':
switch(token){case ',':
if(C.expect=='id'){$_SyntaxError(C,token)}
return C
case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lambda':
if(C.has_dstar)$_SyntaxError(C,token)
C.expect=','
return $transition(new $CallArgCtx(C),token,arguments[2])
case ')':
C.end=$pos
return C.parent
case 'op':
C.expect=','
switch(arguments[2]){case '-':
case '~':
case '+':
C.expect=','
return $transition(new $CallArgCtx(C),token,arguments[2])
case '*':
C.has_star=true;
return new $StarArgCtx(C)
case '**':
C.has_dstar=true
return new $DoubleStarArgCtx(C)}
throw Error('SyntaxError')}
return $transition(C.parent,token,arguments[2])
case 'call_arg':
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lambda':
if(C.expect==='id'){C.expect=','
var expr=new $AbstractExprCtx(C,false)
return $transition(expr,token,arguments[2])}
break
case '=':
if(C.expect===','){return new $ExprCtx(new $KwArgCtx(C),'kw_value',false)}
break
case 'for':
var lst=new $ListOrTupleCtx(C,'gen_expr')
lst.vars=C.vars 
lst.locals=C.locals
lst.intervals=[C.start]
C.tree.pop()
lst.expression=C.tree
C.tree=[lst]
lst.tree=[]
var comp=new $ComprehensionCtx(lst)
return new $TargetListCtx(new $CompForCtx(comp))
case 'op':
if(C.expect==='id'){var op=arguments[2]
C.expect=','
switch(op){case '+':
case '-':
case '~':
return $transition(new $AbstractExprCtx(C,false),token,op)
case '*':
return new $StarArgCtx(C)
case '**':
return new $DoubleStarArgCtx(C)}}
$_SyntaxError(C,'token '+token+' after '+C)
case ')':
if(C.parent.kwargs &&
$B.last(C.parent.tree).tree[0]&& 
['kwarg','star_arg','double_star_arg'].indexOf($B.last(C.parent.tree).tree[0].type)==-1){$_SyntaxError(C,['non-keyword arg after keyword arg'])}
if(C.tree.length>0){var son=C.tree[C.tree.length-1]
if(son.type==='list_or_tuple'&&son.real==='gen_expr'){son.intervals.push($pos)}}
return $transition(C.parent,token)
case ':':
if(C.expect===',' && C.parent.parent.type==='lambda'){return $transition(C.parent.parent,token)}
break
case ',':
if(C.expect===','){if(C.parent.kwargs && 
['kwarg','star_arg','double_star_arg'].indexOf($B.last(C.parent.tree).tree[0].type)==-1){console.log('err2')
$_SyntaxError(C,['non-keyword arg after keyword arg'])}
return $transition(C.parent,token,arguments[2])}
console.log('C '+C+'token '+token+' expect '+C.expect)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'class':
switch(token){case 'id':
if(C.expect==='id'){C.set_name(arguments[2])
C.expect='(:'
return C}
break
case '(':
return new $CallCtx(C)
case ':':
return $BodyCtx(C)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'comp_if':
return $transition(C.parent,token,arguments[2])
case 'comp_for':
if(token==='in' && C.expect==='in'){C.expect=null
return new $AbstractExprCtx(new $CompIterableCtx(C),true)}
if(C.expect===null){
return $transition(C.parent,token,arguments[2])}
$_SyntaxError(C,'token '+token+' after '+C)
case 'comp_iterable':
return $transition(C.parent,token,arguments[2])
case 'comprehension':
switch(token){case 'if':
return new $AbstractExprCtx(new $CompIfCtx(C),false)
case 'for':
return new $TargetListCtx(new $CompForCtx(C))}
return $transition(C.parent,token,arguments[2])
case 'condition':
if(token===':')return $BodyCtx(C)
$_SyntaxError(C,'token '+token+' after '+C)
case 'continue':
if(token=='eol')return C.parent
$_SyntaxError(C,'token '+token+' after '+C)
case 'ctx_manager_alias':
switch(token){case ',':
case ':':
return $transition(C.parent,token,arguments[2])}
$_SyntaxError(C,'token '+token+' after '+C)
case 'decorator':
if(token==='id' && C.tree.length===0){return $transition(new $AbstractExprCtx(C,false),token,arguments[2])}
if(token==='eol'){return $transition(C.parent,token)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'def':
switch(token){case 'id':
if(C.name){$_SyntaxError(C,'token '+token+' after '+C)}
C.set_name(arguments[2])
return C
case '(':
if(C.name===null){$_SyntaxError(C,'token '+token+' after '+C)}
C.has_args=true;
return new $FuncArgs(C)
case 'annotation':
return new $AbstractExprCtx(new $AnnotationCtx(C),true)
case ':':
if(C.has_args)return $BodyCtx(C)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'del':
if(token==='eol')return $transition(C.parent,token)
$_SyntaxError(C,'token '+token+' after '+C)
case 'dict_or_set':
if(C.closed){switch(token){case '[':
return new $SubCtx(C.parent)
case '(':
return new $CallArgCtx(new $CallCtx(C))
case 'op':
return new $AbstractExprCtx(new $OpCtx(C,arguments[2]),false)}
return $transition(C.parent,token,arguments[2])}else{if(C.expect===','){switch(token){case '}':
switch(C.real){case 'dict_or_set':
if(C.tree.length !==1)break
C.real='set' 
case 'set':
case 'set_comp':
case 'dict_comp':
C.items=C.tree
C.tree=[]
C.closed=true
return C
case 'dict':
if(C.tree.length%2===0){C.items=C.tree
C.tree=[]
C.closed=true
return C}}
$_SyntaxError(C,'token '+token+' after '+C)
case ',':
if(C.real==='dict_or_set'){C.real='set'}
if(C.real==='dict' && C.tree.length%2){$_SyntaxError(C,'token '+token+' after '+C)}
C.expect='id'
return C
case ':':
if(C.real==='dict_or_set'){C.real='dict'}
if(C.real==='dict'){C.expect=','
return new $AbstractExprCtx(C,false)}else{$_SyntaxError(C,'token '+token+' after '+C)}
case 'for':
if(C.real==='dict_or_set'){C.real='set_comp'}
else{C.real='dict_comp'}
var lst=new $ListOrTupleCtx(C,'dict_or_set_comp')
lst.intervals=[C.start+1]
lst.vars=C.vars
C.tree.pop()
lst.expression=C.tree
C.tree=[lst]
lst.tree=[]
var comp=new $ComprehensionCtx(lst)
return new $TargetListCtx(new $CompForCtx(comp))}
$_SyntaxError(C,'token '+token+' after '+C)}else if(C.expect==='id'){switch(token){case '}':
if(C.tree.length==0){
C.items=[]
C.real='dict'}else{
C.items=C.tree}
C.tree=[]
C.closed=true
return C
case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lambda':
C.expect=','
var expr=new $AbstractExprCtx(C,false)
return $transition(expr,token,arguments[2])
case 'op':
switch(arguments[2]){case '+':
return C
case '-':
case '~':
C.expect=','
var left=new $UnaryCtx(C,arguments[2])
if(arguments[2]=='-'){var op_expr=new $OpCtx(left,'unary_neg')}
else if(arguments[2]=='+'){var op_expr=new $OpCtx(left,'unary_pos')}
else{var op_expr=new $OpCtx(left,'unary_inv')}
return new $AbstractExprCtx(op_expr,false)}
$_SyntaxError(C,'token '+token+' after '+C)}
$_SyntaxError(C,'token '+token+' after '+C)}
return $transition(C.parent,token,arguments[2])}
break
case 'double_star_arg':
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lambda':
return $transition(new $AbstractExprCtx(C,false),token,arguments[2])
case ',':
return C.parent
case ')':
return $transition(C.parent,token)
case ':':
if(C.parent.parent.type==='lambda'){return $transition(C.parent.parent,token)}}
$_SyntaxError(C,'token '+token+' after '+C)
case 'ellipsis':
if(token=='.'){C.nbdots++;return C}
else{if(C.nbdots!=3){$pos--;$_SyntaxError(C,'token '+token+' after '+C)}else{return $transition(C.parent,token,arguments[2])}}
case 'except':
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case 'not':
case 'lamdba':
if(C.expect==='id'){C.expect='as'
return $transition(new $AbstractExprCtx(C,false),token,arguments[2])}
case 'as':
if(C.expect==='as' && C.has_alias===undefined){C.expect='alias'
C.has_alias=true
return C}
case 'id':
if(C.expect==='alias'){C.expect=':'
C.set_alias(arguments[2])
return C}
break
case ':':
var _ce=C.expect
if(_ce=='id' ||_ce=='as' ||_ce==':'){return $BodyCtx(C)}
break
case '(':
if(C.expect==='id' && C.tree.length===0){C.parenth=true
return C}
break
case ')':
if(C.expect==',' ||C.expect=='as'){C.expect='as'
return C}
case ',':
if(C.parenth!==undefined && C.has_alias===undefined &&
(C.expect=='as' ||C.expect==',')){C.expect='id'
return C}}
$_SyntaxError(C,'token '+token+' after '+C.expect)
case 'expr':
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lamdba':
if(C.expect==='expr'){C.expect=','
return $transition(new $AbstractExprCtx(C,false),token,arguments[2])}}
switch(token){case 'not':
if(C.expect===',')return new $ExprNot(C)
break
case 'in':
if(C.parent.type=='target_list'){
return $transition(C.parent,token)}
if(C.expect===',')return $transition(C,'op','in')
break
case ',':
if(C.expect===','){if(C.with_commas){
C.parent.tree.pop()
var tuple=new $ListOrTupleCtx(C.parent,'tuple')
tuple.implicit=true
tuple.has_comma=true
tuple.tree=[C]
C.parent=tuple
return tuple}}
return $transition(C.parent,token)
case '.':
return new $AttrCtx(C)
case '[':
return new $AbstractExprCtx(new $SubCtx(C),true)
case '(':
return new $CallCtx(C)
case 'op':
var op_parent=C.parent,op=arguments[2]
if(op_parent.type=='ternary' && op_parent.in_else){var new_op=new $OpCtx(C,op)
return new $AbstractExprCtx(new_op,false)}
var op1=C.parent,repl=null
while(1){if(op1.type==='expr'){op1=op1.parent}
else if(op1.type==='op'
&&$op_weight[op1.op]>=$op_weight[op]
&& !(op1.op=='**' && op=='**')
){repl=op1;op1=op1.parent}else{break}}
if(repl===null){if(op==='and' ||op==='or'){while(C.parent.type==='not'||
(C.parent.type==='expr'&&C.parent.parent.type==='not')){
C=C.parent
op_parent=C.parent}}else{while(1){if(C.parent!==op1){C=C.parent
op_parent=C.parent}else{break}}}
C.parent.tree.pop()
var expr=new $ExprCtx(op_parent,'operand',C.with_commas)
expr.expect=','
C.parent=expr
var new_op=new $OpCtx(C,op)
return new $AbstractExprCtx(new_op,false)}
if(repl.type==='op'){var _flag=false
switch(repl.op){case '<':
case '<=':
case '==':
case '!=':
case 'is':
case '>=':
case '>':
_flag=true}
if(_flag){switch(op){case '<':
case '<=':
case '==':
case '!=':
case 'is':
case '>=':
case '>':
var c2=repl.tree[1]
var c2_clone=new Object()
for(var attr in c2){c2_clone[attr]=c2[attr]}
while(repl.parent && repl.parent.type=='op'){if($op_weight[repl.parent.op]<$op_weight[repl.op]){repl=repl.parent}else{break}}
repl.parent.tree.pop()
var and_expr=new $OpCtx(repl,'and')
c2_clone.parent=and_expr
and_expr.tree.push('xxx')
var new_op=new $OpCtx(c2_clone,op)
return new $AbstractExprCtx(new_op,false)}}}
repl.parent.tree.pop()
var expr=new $ExprCtx(repl.parent,'operand',false)
expr.tree=[op1]
repl.parent=expr
var new_op=new $OpCtx(repl,op)
return new $AbstractExprCtx(new_op,false)
case 'augm_assign':
if(C.expect===','){return new $AbstractExprCtx(new $AugmentedAssignCtx(C,arguments[2]),true)}
break
case '=':
if(C.expect===','){if(C.parent.type==="call_arg"){return new $AbstractExprCtx(new $KwArgCtx(C),true)}else if(C.parent.type=="annotation"){return $transition(C.parent.parent,token,arguments[2])}
while(C.parent!==undefined)C=C.parent
C=C.tree[0]
return new $AbstractExprCtx(new $AssignCtx(C),true)}
break
case 'if':
if(C.parent.type!=='comp_iterable'){
var ctx=C
while(ctx.parent && ctx.parent.type=='op'){ctx=ctx.parent
if(ctx.type=='expr' && ctx.parent && ctx.parent.type=='op'){ctx=ctx.parent}}
return new $AbstractExprCtx(new $TernaryCtx(ctx),false)}}
return $transition(C.parent,token)
case 'expr_not':
if(token=='in'){
C.parent.tree.pop()
return new $AbstractExprCtx(new $OpCtx(C.parent,'not_in'),false)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'for': 
switch(token){case 'in':
return new $AbstractExprCtx(new $ExprCtx(C,'target list',true),false)
case ':':
return $BodyCtx(C)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'from':
switch(token){case 'id':
if(C.expect=='id'){C.add_name(arguments[2])
C.expect=','
return C}
if(C.expect==='alias'){C.aliases[C.names[C.names.length-1]]=arguments[2]
C.expect=','
return C}
case '.':
if(C.expect=='module'){if(token=='id'){C.module +=arguments[2]}
else{C.module +='.'}
return C}
case 'import':
case 'IMPRT':
C.blocking=token=='import'
if(C.expect=='module'){C.expect='id'
return C}
case 'op':
if(arguments[2]=='*' && C.expect=='id' 
&& C.names.length==0){if($get_scope(C).ntype!=='module'){$_SyntaxError(C,["import * only allowed at module level"])}
C.add_name('*')
C.expect='eol'
return C}
case ',':
if(C.expect==','){C.expect='id'
return C}
case 'eol':
switch(C.expect){case ',':
case 'eol':
C.bind_names()
return $transition(C.parent,token)}
case 'as':
if(C.expect==',' ||C.expect=='eol'){C.expect='alias'
return C}
case '(':
if(C.expect=='id'){C.expect='id'
return C}
case ')':
if(C.expect==',' ||C.expect=='id'){C.expect='eol'
return C}}
$_SyntaxError(C,'token '+token+' after '+C)
case 'func_arg_id':
switch(token){case '=':
if(C.expect==='='){C.parent.has_default=true
var def_ctx=C.parent.parent
if(C.parent.has_star_arg){def_ctx.default_list.push(def_ctx.after_star.pop())}else{def_ctx.default_list.push(def_ctx.positional_list.pop())}
return new $AbstractExprCtx(C,false)}
break
case ',':
case ')':
if(C.parent.has_default && C.tree.length==0 &&
C.parent.has_star_arg===undefined){console.log('parent '+C.parent,C.parent)
$pos -=C.name.length
$_SyntaxError(C,['non-default argument follows default argument'])}else{return $transition(C.parent,token)}
case ':':
return new $AbstractExprCtx(new $AnnotationCtx(C),false)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'func_args':
switch(token){case 'id':
if(C.expect==='id'){C.expect=','
if(C.names.indexOf(arguments[2])>-1){$_SyntaxError(C,['duplicate argument '+arguments[2]+' in function definition'])}}
return new $FuncArgIdCtx(C,arguments[2])
case ',':
if(C.has_kw_arg)$_SyntaxError(C,'duplicate kw arg')
if(C.expect===','){C.expect='id'
return C}
$_SyntaxError(C,'token '+token+' after '+C)
case ')':
return C.parent
case 'op':
var op=arguments[2]
C.expect=','
if(op=='*'){if(C.has_star_arg){$_SyntaxError(C,'duplicate star arg')}
return new $FuncStarArgCtx(C,'*')}
if(op=='**')return new $FuncStarArgCtx(C,'**')
$_SyntaxError(C,'token '+op+' after '+C)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'func_star_arg':
switch(token){case 'id':
if(C.name===undefined){if(C.parent.names.indexOf(arguments[2])>-1){$_SyntaxError(C,['duplicate argument '+arguments[2]+' in function definition'])}}
C.set_name(arguments[2])
C.parent.names.push(arguments[2])
return C 
case ',':
case ')':
if(C.name===undefined){
C.set_name('$dummy')
C.parent.names.push('$dummy')}
return $transition(C.parent,token)
case ':':
if(C.name===undefined){$_SyntaxError(C,'annotation on an unnamed parameter')}
return new $AbstractExprCtx(new $AnnotationCtx(C),false)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'global':
switch(token){case 'id':
if(C.expect==='id'){new $IdCtx(C,arguments[2])
C.add(arguments[2])
C.expect=','
return C}
break
case ',': 
if(C.expect===','){C.expect='id'
return C}
break
case 'eol':
if(C.expect===','){return $transition(C.parent,token)}
break}
$_SyntaxError(C,'token '+token+' after '+C)
case 'id':
switch(token){case '=':
if(C.parent.type==='expr' &&
C.parent.parent !==undefined &&
C.parent.parent.type==='call_arg'){return new $AbstractExprCtx(new $KwArgCtx(C.parent),false)}
return $transition(C.parent,token,arguments[2])
case 'op':
return $transition(C.parent,token,arguments[2])
case 'id':
case 'str':
case 'int':
case 'float':
case 'imaginary':
$_SyntaxError(C,'token '+token+' after '+C)}
return $transition(C.parent,token,arguments[2])
case 'import':
switch(token){case 'id':
if(C.expect==='id'){new $ImportedModuleCtx(C,arguments[2])
C.expect=','
return C}
if(C.expect==='qual'){C.expect=','
C.tree[C.tree.length-1].name +='.'+arguments[2]
C.tree[C.tree.length-1].alias +='.'+arguments[2]
return C}
if(C.expect==='alias'){C.expect=','
C.tree[C.tree.length-1].alias=arguments[2]
return C}
break
case '.':
if(C.expect===','){C.expect='qual'
return C}
break
case ',':
if(C.expect===','){C.expect='id'
return C}
break
case 'as':
if(C.expect===','){C.expect='alias'
return C}
break
case 'eol':
if(C.expect===','){C.bind_names()
return $transition(C.parent,token)}
break}
$_SyntaxError(C,'token '+token+' after '+C)
case 'imaginary':
case 'int':
case 'float':
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case 'not':
case 'lamdba':
$_SyntaxError(C,'token '+token+' after '+C)}
return $transition(C.parent,token,arguments[2])
case 'kwarg':
if(token===',')return new $CallArgCtx(C.parent.parent)
return $transition(C.parent,token)
case 'lambda':
if(token===':' && C.args===undefined){C.args=C.tree
C.tree=[]
C.body_start=$pos
return new $AbstractExprCtx(C,false)}
if(C.args!==undefined){
C.body_end=$pos
return $transition(C.parent,token)}
if(C.args===undefined){return $transition(new $CallCtx(C),token,arguments[2])}
$_SyntaxError(C,'token '+token+' after '+C)
case 'list_or_tuple':
if(C.closed){if(token==='[')return new $SubCtx(C.parent)
if(token==='(')return new $CallCtx(C)
return $transition(C.parent,token,arguments[2])}else{if(C.expect===','){switch(C.real){case 'tuple':
case 'gen_expr':
if(token===')'){C.closed=true
if(C.real==='gen_expr'){C.intervals.push($pos)}
return C.parent}
break
case 'list':
case 'list_comp':
if(token===']'){C.closed=true
if(C.real==='list_comp'){C.intervals.push($pos)}
return C}
break
case 'dict_or_set_comp':
if(token==='}'){C.intervals.push($pos)
return $transition(C.parent,token)}
break}
switch(token){case ',':
if(C.real==='tuple'){C.has_comma=true}
C.expect='id'
return C
case 'for':
if(C.real==='list'){C.real='list_comp'}
else{C.real='gen_expr'}
C.intervals=[C.start+1]
C.expression=C.tree
C.tree=[]
var comp=new $ComprehensionCtx(C)
return new $TargetListCtx(new $CompForCtx(comp))}
return $transition(C.parent,token,arguments[2])}else if(C.expect==='id'){switch(C.real){case 'tuple':
if(token===')'){C.closed=true
return C.parent}
if(token=='eol' && C.implicit===true){C.closed=true
return $transition(C.parent,token)}
break
case 'gen_expr':
if(token===')'){C.closed=true
return $transition(C.parent,token)}
break
case 'list':
if(token===']'){C.closed=true
return C}
break}
switch(token){case '=':
if(C.real=='tuple' && C.implicit===true){C.closed=true
C.parent.tree.pop()
var expr=new $ExprCtx(C.parent,'tuple',false)
expr.tree=[C]
C.parent=expr
return $transition(C.parent,token)}
break
case ')':
break
case ']':
if(C.real=='tuple' && C.implicit===true){
return $transition(C.parent,token,arguments[2])}else{break}
case ',':
$_SyntaxError(C,'unexpected comma inside list')
default:
C.expect=','
var expr=new $AbstractExprCtx(C,false)
return $transition(expr,token,arguments[2])}}else{return $transition(C.parent,token,arguments[2])}}
case 'list_comp':
switch(token){case ']':
return C.parent
case 'in':
return new $ExprCtx(C,'iterable',true)
case 'if':
return new $ExprCtx(C,'condition',true)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'node':
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case 'not':
case 'lamdba':
case '.':
var expr=new $AbstractExprCtx(C,true)
return $transition(expr,token,arguments[2])
case 'op':
switch(arguments[2]){case '*':
case '+':
case '-':
case '~':
var expr=new $AbstractExprCtx(C,true)
return $transition(expr,token,arguments[2])}
break
case 'class':
return new $ClassCtx(C)
case 'continue':
return new $ContinueCtx(C)
case '__debugger__':
return new $DebuggerCtx(C)
case 'break':
return new $BreakCtx(C)
case 'def':
return new $DefCtx(C)
case 'for':
return new $TargetListCtx(new $ForExpr(C))
case 'if':
case 'while':
return new $AbstractExprCtx(new $ConditionCtx(C,token),false)
case 'elif':
var previous=$previous(C)
if(['condition'].indexOf(previous.type)==-1 ||
previous.token=='while'){$_SyntaxError(C,'elif after '+previous.type)}
return new $AbstractExprCtx(new $ConditionCtx(C,token),false)
case 'else':
var previous=$previous(C)
if(['condition','except','for'].indexOf(previous.type)==-1){$_SyntaxError(C,'else after '+previous.type)}
return new $SingleKwCtx(C,token)
case 'finally':
var previous=$previous(C)
if(['try','except'].indexOf(previous.type)==-1 &&
(previous.type!='single_kw' ||previous.token!='else')){$_SyntaxError(C,'finally after '+previous.type)}
return new $SingleKwCtx(C,token)
case 'try':
return new $TryCtx(C)
case 'except':
var previous=$previous(C)
if(['try','except'].indexOf(previous.type)==-1){$_SyntaxError(C,'except after '+previous.type)}
return new $ExceptCtx(C)
case 'assert':
return new $AbstractExprCtx(new $AssertCtx(C),'assert',true)
case 'from':
return new $FromCtx(C)
case 'import':
return new $ImportCtx(C)
case 'IMPRT': 
return new $IMPRTCtx(C)
case 'global':
return new $GlobalCtx(C)
case 'nonlocal':
return new $NonlocalCtx(C)
case 'lambda':
return new $LambdaCtx(C)
case 'pass':
return new $PassCtx(C)
case 'raise':
return new $RaiseCtx(C)
case 'return':
return new $AbstractExprCtx(new $ReturnCtx(C),true)
case 'with':
return new $AbstractExprCtx(new $WithCtx(C),false)
case 'yield':
return new $AbstractExprCtx(new $YieldCtx(C),true)
case 'del':
return new $AbstractExprCtx(new $DelCtx(C),true)
case '@':
return new $DecoratorCtx(C)
case 'eol':
if(C.tree.length===0){
C.node.parent.children.pop()
return C.node.parent.C}
return C}
$_SyntaxError(C,'token '+token+' after '+C)
case 'not':
switch(token){case 'in':
C.parent.parent.tree.pop()
return new $ExprCtx(new $OpCtx(C.parent,'not_in'),'op',false)
case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lamdba':
var expr=new $AbstractExprCtx(C,false)
return $transition(expr,token,arguments[2])
case 'op':
var a=arguments[2]
if('+'==a ||'-'==a ||'~'==a){var expr=new $AbstractExprCtx(C,false)
return $transition(expr,token,arguments[2])}}
return $transition(C.parent,token)
case 'op':
if(C.op===undefined){$_SyntaxError(C,['C op undefined '+C])}
if(C.op.substr(0,5)=='unary'){if(C.parent.type=='assign' ||C.parent.type=='return'){
C.parent.tree.pop()
var t=new $ListOrTupleCtx(C.parent,'tuple')
t.tree.push(C)
C.parent=t
return t}}
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lamdba':
return $transition(new $AbstractExprCtx(C,false),token,arguments[2])
case 'op':
switch(arguments[2]){case '+':
case '-':
case '~':
return new $UnaryCtx(C,arguments[2])}
default:
if(C.tree[C.tree.length-1].type=='abstract_expr'){$_SyntaxError(C,'token '+token+' after '+C)}}
var t0=C.tree[0],t1=C.tree[1]
if(t0.tree && t1.tree){t0=t0.tree[0]
t1=t1.tree[0]}
return $transition(C.parent,token)
case 'packed':
if(token==='id'){new $IdCtx(C,arguments[2])
C.parent.expect=','
return C.parent}
$_SyntaxError(C,'token '+token+' after '+C)
case 'pass':
if(token==='eol')return C.parent
$_SyntaxError(C,'token '+token+' after '+C)
case 'raise':
switch(token){case 'id':
if(C.tree.length===0){return new $IdCtx(new $ExprCtx(C,'exc',false),arguments[2])}
break
case 'from': 
if(C.tree.length>0){return new $AbstractExprCtx(C,false)}
break
case 'eol':
return $transition(C.parent,token)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'return':
var no_args=C.tree[0].type=='abstract_expr'
if(!no_args){var scope=$get_scope(C)
if(scope.ntype=='generator'){$_SyntaxError(C,["'return' with argument inside generator"])}
scope.has_return_with_arguments=true}
return $transition(C.parent,token)
case 'single_kw':
if(token===':')return $BodyCtx(C)
$_SyntaxError(C,'token '+token+' after '+C)
case 'star_arg':
switch(token){case 'id':
if(C.parent.type=="target_list"){C.tree.push(arguments[2])
C.parent.expect=','
console.log('return parent',C.parent)
return C.parent}
return $transition(new $AbstractExprCtx(C,false),token,arguments[2])
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case 'not':
case 'lamdba':
return $transition(new $AbstractExprCtx(C,false),token,arguments[2])
case ',':
return $transition(C.parent,token)
case ')':
return $transition(C.parent,token)
case ':':
if(C.parent.parent.type==='lambda'){return $transition(C.parent.parent,token)}}
$_SyntaxError(C,'token '+token+' after '+C)
case 'str':
switch(token){case '[':
return new $AbstractExprCtx(new $SubCtx(C.parent),false)
case '(':
C.parent.tree[0]=C
return new $CallCtx(C.parent)
case 'str':
C.tree.push(arguments[2])
return C}
return $transition(C.parent,token,arguments[2])
case 'sub':
switch(token){case 'id':
case 'imaginary':
case 'int':
case 'float':
case 'str':
case 'bytes':
case '[':
case '(':
case '{':
case '.':
case 'not':
case 'lamdba':
var expr=new $AbstractExprCtx(C,false)
return $transition(expr,token,arguments[2])
case ']':
return C.parent
case ':':
if(C.tree.length==0){new $AbstractExprCtx(C,false)}
return new $AbstractExprCtx(C,false)}
$_SyntaxError(C,'token '+token+' after '+C)
case 'target_list':
switch(token){case 'id':
if(C.expect==='id'){C.expect=','
return new $IdCtx(new $ExprCtx(C,'target',false),arguments[2])}
case 'op':
if(C.expect=='id' && arguments[2]=='*'){
return new $PackedCtx(C)}
case '(':
case '[':
if(C.expect==='id'){C.expect=','
return new $TargetListCtx(C)}
case ')':
case ']':
if(C.expect===',')return C.parent
case ',':
if(C.expect==','){C.expect='id'
return C}}
if(C.expect===','){return $transition(C.parent,token,arguments[2])}else if(token=='in'){
return $transition(C.parent,token,arguments[2])}
$_SyntaxError(C,'token '+token+' after '+C)
case 'ternary':
if(token==='else'){C.in_else=true
return new $AbstractExprCtx(C,false)}
return $transition(C.parent,token,arguments[2])
case 'try':
if(token===':')return $BodyCtx(C)
$_SyntaxError(C,'token '+token+' after '+C)
case 'unary':
switch(token){case 'int':
case 'float':
case 'imaginary':
console.log(token,arguments[2],'after',C)
var expr=C.parent
C.parent.parent.tree.pop()
var value=arguments[2]
if(C.op==='-'){value="-"+value}
else if(C.op==='~'){value=~value}
return $transition(C.parent.parent,token,value)
case 'id':
C.parent.parent.tree.pop()
var expr=new $ExprCtx(C.parent.parent,'call',false)
var expr1=new $ExprCtx(expr,'id',false)
new $IdCtx(expr1,arguments[2])
if(true){
var repl=new $AttrCtx(expr)
if(C.op==='+'){repl.name='__pos__'}
else if(C.op==='-'){repl.name='__neg__'}
else{repl.name='__invert__'}
var call=new $CallCtx(expr)
return expr1}
return C.parent
case 'op':
if('+'==arguments[2]||'-'==arguments[2]){var op=arguments[2]
if(C.op===op){C.op='+'}else{C.op='-'}
return C}}
return $transition(C.parent,token,arguments[2])
case 'with':
switch(token){case 'id':
if(C.expect==='id'){C.expect='as'
return $transition(new $AbstractExprCtx(C,false),token,arguments[2])}
if(C.expect==='alias'){if(C.parenth!==undefined){C.expect=','}
else{C.expect=':'}
C.set_alias(arguments[2])
return C}
break
case 'as':
return new $AbstractExprCtx(new $AliasCtx(C))
case ':':
switch(C.expect){case 'id':
case 'as':
case ':':
return $BodyCtx(C)}
break
case '(':
if(C.expect==='id' && C.tree.length===0){C.parenth=true
return C}else if(C.expect=='alias'){console.log('C',C,'token',token)
C.expect=':'
return new $TargetListCtx(C,false)}
break
case ')':
if(C.expect==',' ||C.expect=='as'){C.expect=':'
return C}
break
case ',':
if(C.parenth!==undefined && C.has_alias===undefined &&
(C.expect==',' ||C.expect=='as')){C.expect='id'
return C}else if(C.expect=='as'){C.expect='id'
return C}else if(C.expect==':'){C.expect='id'
return C}
break}
$_SyntaxError(C,'token '+token+' after '+C.expect)
case 'yield':
if(token=='from'){
if(C.tree[0].type!='abstract_expr'){
$_SyntaxError(C,"'from' must follow 'yield'")}
C.from=true
C.tree=[]
return new $AbstractExprCtx(C,true)}
return $transition(C.parent,token)}}
$B.forbidden=['case','catch','constructor','Date','delete','default','enum','extends','Error','history','function','location','Math','new','null','Number','RegExp','super','this','throw','var','toString']
var s_escaped='abfnrtvxuU"'+"'"+'\\',is_escaped={}
for(var i=0;i<s_escaped.length;i++){is_escaped[s_escaped.charAt(i)]=true}
function $tokenize(src,module,locals_id,parent_block_id,line_info){var delimiters=[["#","\n","comment"],['"""','"""',"triple_string"],["'","'","string"],['"','"',"string"],["r'","'","raw_string"],['r"','"',"raw_string"]]
var br_open={"(":0,"[":0,"{":0}
var br_close={")":"(","]":"[","}":"{"}
var br_stack=""
var br_pos=[]
var kwdict=["class","return","break","for","lambda","try","finally","raise","def","from","nonlocal","while","del","global","with","as","elif","else","if","yield","assert","import","except","raise","in","not","pass","with","continue","__debugger__","IMPRT" 
]
var unsupported=[]
var $indented=['class','def','for','condition','single_kw','try','except','with']
var punctuation={',':0,':':0}
int_pattern=new RegExp("^\\d+(j|J)?"),float_pattern1=new RegExp("^\\d+\\.\\d*([eE][+-]?\\d+)?(j|J)?"),float_pattern2=new RegExp("^\\d+([eE][+-]?\\d+)(j|J)?"),hex_pattern=new RegExp("^0[xX]([0-9a-fA-F]+)"),octal_pattern=new RegExp("^0[oO]([0-7]+)"),binary_pattern=new RegExp("^0[bB]([01]+)"),id_pattern=new RegExp("[\\$_a-zA-Z]\\w*"),qesc=new RegExp('"',"g"),
sqesc=new RegExp("'","g"),
dummy={}
var C=null
var root=new $Node('module')
root.module=module
root.id=locals_id
$B.modules[root.id]=root
if(locals_id==parent_block_id){root.parent_block=$B.modules[parent_block_id].parent_block ||$B.modules['__builtins__']}else{root.parent_block=$B.modules[parent_block_id]||$B.modules['__builtins__']}
root.line_info=line_info
root.indent=-1
if(locals_id!==module){$B.bound[locals_id]={}}
var new_node=new $Node(),current=root,name="",_type=null,pos=0,indent=null,string_modifier=false
var lnum=1
while(pos<src.length){var flag=false
var car=src.charAt(pos)
if(indent===null){var indent=0
while(pos<src.length){var _s=src.charAt(pos)
if(_s==" "){indent++;pos++}
else if(_s=="\t"){
indent++;pos++
if(indent%8>0)indent+=8-indent%8}else{break}}
var _s=src.charAt(pos)
if(_s=='\n'){pos++;lnum++;indent=null;continue}
else if(_s==='#'){
var offset=src.substr(pos).search(/\n/)
if(offset===-1){break}
pos+=offset+1;lnum++;indent=null;continue}
new_node.indent=indent
new_node.line_num=lnum
new_node.module=module
if(indent>current.indent){
if(C!==null){if($indented.indexOf(C.tree[0].type)==-1){$pos=pos
$_SyntaxError(C,'unexpected indent',pos)}}
current.add(new_node)}else if(indent<=current.indent &&
$indented.indexOf(C.tree[0].type)>-1 &&
C.tree.length<2){$pos=pos
$_SyntaxError(C,'expected an indented block',pos)}else{
while(indent!==current.indent){current=current.parent
if(current===undefined ||indent>current.indent){$pos=pos
$_SyntaxError(C,'unexpected indent',pos)}}
current.parent.add(new_node)}
current=new_node
C=new $NodeCtx(new_node)
continue}
if(car=="#"){var end=src.substr(pos+1).search('\n')
if(end==-1){end=src.length-1}
pos +=end+1;continue}
if(car=='"' ||car=="'"){var raw=C.type=='str' && C.raw,bytes=false ,end=null;
if(string_modifier){switch(string_modifier){case 'r': 
raw=true
break
case 'u':
break
case 'b':
bytes=true
break
case 'rb':
case 'br':
bytes=true;raw=true
break}
string_modifier=false}
if(src.substr(pos,3)==car+car+car){_type="triple_string";end=pos+3}
else{_type="string";end=pos+1}
var escaped=false
var zone=car
var found=false
while(end<src.length){if(escaped){zone+=src.charAt(end)
if(raw && src.charAt(end)=='\\'){zone+='\\'}
escaped=false;end+=1}else if(src.charAt(end)=="\\"){if(raw){if(end<src.length-1 && src.charAt(end+1)==car){zone +='\\\\'+car
end +=2}else{zone +='\\\\'
end++}
escaped=true}else{
if(src.charAt(end+1)=='\n'){
end +=2
lnum++}else{
if(end < src.length-1 &&
is_escaped[src.charAt(end+1)]==undefined){zone +='\\'}
zone+='\\'
escaped=true;end+=1}}}else if(src.charAt(end)=='\n' && _type!='triple_string'){
$pos=end
$_SyntaxError(C,["EOL while scanning string literal"])}else if(src.charAt(end)==car){if(_type=="triple_string" && src.substr(end,3)!=car+car+car){zone +=src.charAt(end)
end++}else{
found=true
$pos=pos
var $string=zone.substr(1),string=''
for(var i=0;i<$string.length;i++){var $car=$string.charAt(i)
if($car==car &&
(raw ||(i==0 ||$string.charAt(i-1)!=='\\'))){string +='\\'}
string +=$car}
if(bytes){C=$transition(C,'str','b'+car+string+car)}else{C=$transition(C,'str',car+string+car)}
C.raw=raw;
pos=end+1
if(_type=="triple_string"){pos=end+3}
break}}else{
zone +=src.charAt(end)
if(src.charAt(end)=='\n'){lnum++}
end++}}
if(!found){if(_type==="triple_string"){$_SyntaxError(C,"Triple string end not found")}else{$_SyntaxError(C,"String end not found")}}
continue}
if(name=="" && car!='$'){try{eval("dummy."+car+"=0")
var idpos=pos+1
while(idpos<src.length){var idcar=src.charAt(idpos)
if(idcar==' '||idcar=='\n'||idcar==';'||idcar=='$'){name=src.substring(pos,idpos)
break}
try{eval("dummy."+src.substring(pos,idpos+1))
idpos++}catch(err){name=src.substring(pos,idpos)
break}}}catch(err){}
if(name){pos +=name.length
if(kwdict.indexOf(name)>-1){$pos=pos-name.length
if(unsupported.indexOf(name)>-1){$_SyntaxError(C,"Unsupported Python keyword '"+name+"'")}
if(name=='not'){var re=/^\s+in\s+/
var res=re.exec(src.substr(pos))
if(res!==null){pos +=res[0].length
C=$transition(C,'op','not_in')}else{C=$transition(C,name)}}else{C=$transition(C,name)}}else if($operators[name]!==undefined 
&& $B.forbidden.indexOf(name)==-1){
$pos=pos-name.length
C=$transition(C,'op',name)}else if((src.charAt(pos)=='"'||src.charAt(pos)=="'")
&&['r','b','u','rb','br'].indexOf(name.toLowerCase())!==-1){string_modifier=name.toLowerCase()
name=""
continue}else{
if($B.forbidden.indexOf(name)>-1){name='$$'+name}
$pos=pos-name.length
C=$transition(C,'id',name)}
name=""
continue}}
switch(car){case ' ':
case '\t':
pos++
break
case '.':
if(pos<src.length-1 && /^\d$/.test(src.charAt(pos+1))){
var j=pos+1
while(j<src.length && src.charAt(j).search(/\d|e|E/)>-1){j++}
C=$transition(C,'float','0'+src.substr(pos,j-pos))
pos=j
break}
$pos=pos
C=$transition(C,'.')
pos++
break
case '0':
var res=hex_pattern.exec(src.substr(pos))
if(res){C=$transition(C,'int',[16,res[1]])
pos +=res[0].length
break}
var res=octal_pattern.exec(src.substr(pos))
if(res){C=$transition(C,'int',[8,res[1]])
pos +=res[0].length
break}
var res=binary_pattern.exec(src.substr(pos))
if(res){C=$transition(C,'int',[2,res[1]])
pos +=res[0].length
break}
if(src.charAt(pos+1).search(/\d/)>-1){
if(parseInt(src.substr(pos))===0){res=int_pattern.exec(src.substr(pos))
$pos=pos
C=$transition(C,'int',[10,res[0]])
pos +=res[0].length
break}else{$_SyntaxError(C,('invalid literal starting with 0'))}}
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
var res=float_pattern1.exec(src.substr(pos))
if(res){$pos=pos
if(res[2]!==undefined){C=$transition(C,'imaginary',res[0].substr(0,res[0].length-1))}else{C=$transition(C,'float',res[0])}}else{res=float_pattern2.exec(src.substr(pos))
if(res){$pos=pos
if(res[2]!==undefined){C=$transition(C,'imaginary',res[0].substr(0,res[0].length-1))}else{C=$transition(C,'float',res[0])}}else{res=int_pattern.exec(src.substr(pos))
$pos=pos
if(res[1]!==undefined){C=$transition(C,'imaginary',res[0].substr(0,res[0].length-1))}else{C=$transition(C,'int',[10,res[0]])}}}
pos +=res[0].length
break
case '\n':
lnum++
if(br_stack.length>0){
pos++;}else{
if(current.C.tree.length>0){$pos=pos
C=$transition(C,'eol')
indent=null
new_node=new $Node()}else{new_node.line_num=lnum}
pos++}
break
case '(':
case '[':
case '{':
br_stack +=car
br_pos[br_stack.length-1]=[C,pos]
$pos=pos
C=$transition(C,car)
pos++
break
case ')':
case ']':
case '}':
if(br_stack==""){$_SyntaxError(C,"Unexpected closing bracket")}else if(br_close[car]!=br_stack.charAt(br_stack.length-1)){$_SyntaxError(C,"Unbalanced bracket")}else{
br_stack=br_stack.substr(0,br_stack.length-1)
$pos=pos
C=$transition(C,car)
pos++}
break
case '=':
if(src.charAt(pos+1)!="="){$pos=pos
C=$transition(C,'=')
pos++;}else{
$pos=pos
C=$transition(C,'op','==')
pos+=2}
break
case ',':
case ':': 
$pos=pos
C=$transition(C,car)
pos++
break
case ';':
$transition(C,'eol')
if(current.C.tree.length===0){
$pos=pos
$_SyntaxError(C,'invalid syntax')}
var pos1=pos+1
var ends_line=false
while(pos1<src.length){var _s=src.charAt(pos1)
if(_s=='\n' ||_s=='#'){ends_line=true;break}
else if(_s==' '){pos1++}
else{break}}
if(ends_line){pos++;break}
new_node=new $Node()
new_node.indent=$get_node(C).indent
new_node.line_num=lnum
new_node.module=module
$get_node(C).parent.add(new_node)
current=new_node
C=new $NodeCtx(new_node)
pos++
break
case '/':
case '%':
case '&':
case '>':
case '<':
case '-':
case '+':
case '*':
case '/':
case '^':
case '=':
case '|':
case '~':
case '!':
if(car=='-' && src.charAt(pos+1)=='>'){C=$transition(C,'annotation')
pos +=2
continue}
var op_match=""
for(var op_sign in $operators){if(op_sign==src.substr(pos,op_sign.length)
&& op_sign.length>op_match.length){op_match=op_sign}}
$pos=pos
if(op_match.length>0){if(op_match in $augmented_assigns){C=$transition(C,'augm_assign',op_match)}else{C=$transition(C,'op',op_match)}
pos +=op_match.length}else{$_SyntaxError(C,'invalid character: '+car)}
break
case '\\':
if(src.charAt(pos+1)=='\n'){lnum++ 
pos+=2
break}
case '@':
$pos=pos
C=$transition(C,car)
pos++
break
default:
$pos=pos;$_SyntaxError(C,'unknown token ['+car+']')}}
if(br_stack.length!=0){var br_err=br_pos[0]
$pos=br_err[1]
$_SyntaxError(br_err[0],["Unbalanced bracket "+br_stack.charAt(br_stack.length-1)])}
if(C!==null && $indented.indexOf(C.tree[0].type)>-1){$pos=pos-1
$_SyntaxError(C,'expected an indented block',pos)}
return root}
$B.py2js=function(src,module,locals_id,parent_block_id,line_info){
var t0=new Date().getTime()
src=src.replace(/\r\n/gm,'\n')
if(src.charAt(src.length-1)!="\n"){src+='\n'}
var locals_is_module=Array.isArray(locals_id)
if(locals_is_module){locals_id=locals_id[0]}
var internal=locals_id.charAt(0)=='$'
var local_ns='$locals_'+locals_id.replace(/\./g,'_')
var global_ns='$locals_'+module.replace(/\./g,'_')
$B.bound[module]=$B.bound[module]||{}
$B.bound[module]['__doc__']=true
$B.bound[module]['__name__']=true
$B.bound[module]['__file__']=true
$B.type[module]=$B.type[module]||{}
$B.type[locals_id]=$B.type[locals_id]||{}
$B.$py_src[locals_id]=$B.$py_src[locals_id]||src
var root=$tokenize(src,module,locals_id,parent_block_id,line_info)
root.transform()
var js=['var $B = __BRYTHON__;\n'],pos=1
js[pos++]='eval(__BRYTHON__.InjectBuiltins());\n\n'
js[pos]='var '
if(locals_is_module){js[pos]+=local_ns+'=$locals_'+module+', '}else if(!internal){js[pos]+=local_ns+'=$B.imported["'+locals_id+'"] || {}, '}
js[pos]+='$locals='+local_ns+';'
var offset=0
root.insert(0,$NodeJS(js.join('')))
offset++
var ds_node=new $Node()
new $NodeJSCtx(ds_node,local_ns+'["__doc__"]='+(root.doc_string||'None')+';')
root.insert(offset++,ds_node)
var name_node=new $Node()
var lib_module=module
new $NodeJSCtx(name_node,local_ns+'["__name__"]='+local_ns+'["__name__"] || "'+locals_id+'";')
root.insert(offset++,name_node)
var file_node=new $Node()
new $NodeJSCtx(file_node,local_ns+'["__file__"]="'+$B.$py_module_path[module]+'";None;\n')
root.insert(offset++,file_node)
var enter_frame_pos=offset
root.insert(offset++,$NodeJS('$B.enter_frame(["'+locals_id+'", '+local_ns+','+
'"'+module+'", '+global_ns+']);\n'))
var try_node=new $Node(),children=root.children.slice(enter_frame_pos+1,root.children.length),ctx=new $NodeCtx(try_node)
root.insert(enter_frame_pos+1,try_node)
new $TryCtx(ctx)
if(children.length==0){children=[$NodeJS('')]}
for(var i=0;i<children.length;i++){try_node.add(children[i])}
root.children.splice(enter_frame_pos+2,root.children.length)
var finally_node=new $Node(),ctx=new $NodeCtx(finally_node)
new $SingleKwCtx(ctx,'finally')
finally_node.add($NodeJS('$B.leave_frame("'+locals_id+'")'))
root.add(finally_node)
if($B.debug>0){$add_line_num(root,null,module)}
if($B.debug>=2){var t1=new Date().getTime()
console.log('module '+module+' translated in '+(t1 - t0)+' ms')}
return root}
function load_ext(ext_scripts){var found=[]
function callback(ev){req=ev.target
if(req.readyState==4){if(req.status==200){run_script({name:req.module_name,url:req.responseURL,src:req.responseText})
if(ext_scripts.length>0){load_ext(ext_scripts)}}else{throw Error("cannot load script "+
req.module_name+' at '+req.responseURL+
': error '+req.status)}}}
if(ext_scripts.length>0){var script=ext_scripts.shift()
var req=new XMLHttpRequest()
req.onreadystatechange=callback
req.module_name=script.name
req.open('GET',script.url,true)
req.send()}}
function run_script(script){
$B.$py_module_path[script.name]=script.url
try{
var $root=$B.py2js(script.src,script.name,script.name,'__builtins__')
var $js=$root.to_js()
if($B.debug>1){console.log($js)}
eval($js)
$B.imported[script.name]=$locals}catch($err){if($B.debug>1){console.log($err)
for(var attr in $err){console.log(attr+' : ',$err[attr])}}
if($err.$py_error===undefined){console.log('Javascript error',$err)
$err=_b_.RuntimeError($err+'')}
var name=$err.__name__
var $trace=_b_.getattr($err,'info')+'\n'+name+': '
if(name=='SyntaxError' ||name=='IndentationError'){$trace +=$err.args[0]}else{$trace +=$err.args}
try{_b_.getattr($B.stderr,'write')($trace)}catch(print_exc_err){console.log($trace)}
throw $err}}
function brython(options){var _b_=$B.builtins
if($B.meta_path===undefined){$B.meta_path=[]}
$B.$options={}
if(options===undefined)options={'debug':0}
if(typeof options==='number')options={'debug':options}
if(options.debug===undefined){options.debug=0 }
$B.debug=options.debug
_b_.__debug__=$B.debug>0
if(options.static_stdlib_import===undefined){options.static_stdlib_import=true}
$B.static_stdlib_import=options.static_stdlib_import
if(options.open !==undefined)_b_.open=options.open
$B.$CORS=false 
if(options.CORS !==undefined)$B.$CORS=options.CORS
$B.$options=options
var meta_path=[]
var path_hooks=[]
if($B.use_VFS){meta_path.push($B.$meta_path[0])
path_hooks.push($B.$path_hooks[0])}
if(options.static_stdlib_import!==false){
meta_path.push($B.$meta_path[1])
if($B.path.length>3){$B.path.shift()
$B.path.shift()}}
meta_path.push($B.$meta_path[2])
$B.meta_path=meta_path
path_hooks.push($B.$path_hooks[1])
$B.path_hooks=path_hooks 
if(options.ipy_id!==undefined){var $elts=[];
for(var $i=0;$i<options.ipy_id.length;$i++){$elts.push(document.getElementById(options.ipy_id[$i]));}}else{var scripts=document.getElementsByTagName('script'),$elts=[]
for(var i=0;i<scripts.length;i++){var script=scripts[i]
if(script.type=="text/python" ||script.type=="text/python3"){$elts.push(script)}}}
var $href=$B.script_path=window.location.href
var $href_elts=$href.split('/')
$href_elts.pop()
if(options.pythonpath!==undefined)$B.path=options.pythonpath
if(options.re_module !==undefined){if(options.re_module=='pyre' ||options.re_module=='jsre'){$B.$options.re=options.re}}
$B.scripts=[]
$B.js={}
var kk=Object.keys(window)
var first_script=true,module_name;
if(options.ipy_id!==undefined){module_name='__main__';
var $src="";
$B.$py_module_path[module_name]=$href;
for(var $i=0;$i<$elts.length;$i++){var $elt=$elts[$i];
$src +=($elt.innerHTML ||$elt.textContent);}
try{
var $root=$B.py2js($src,module_name,module_name,'__builtins__')
var $js=$root.to_js()
if($B.debug>1)console.log($js)
if($B.async_enabled){$js=$B.execution_object.source_conversion($js)
eval($js)}else{
eval($js)}}catch($err){if($B.debug>1){console.log($err)
for(var attr in $err){console.log(attr+' : ',$err[attr])}}
if($err.$py_error===undefined){console.log('Javascript error',$err)
$err=_b_.RuntimeError($err+'')}
var $trace=_b_.getattr($err,'info')+'\n'+$err.__name__+
': ' +$err.args
try{_b_.getattr($B.stderr,'write')($trace)}catch(print_exc_err){console.log($trace)}
throw $err}}else{
var defined_ids={}
for(var i=0;i<$elts.length;i++){var elt=$elts[i]
if(elt.id){if(defined_ids[elt.id]){throw Error("Brython error : Found 2 scripts with the same id '"+
elt.id+"'")}else{defined_ids[elt.id]=true}}}
var inner_scripts={},ext_scripts=[]
for(var $i=0;$i<$elts.length;$i++){var $elt=$elts[$i]
if($elt.type=="text/python"||$elt.type==="text/python3"){if($elt.id){module_name=$elt.id}
else{if(first_script){module_name='__main__';first_script=false}
else{module_name='__main__'+$B.UUID()}
while(defined_ids[module_name]!==undefined){module_name='__main__'+$B.UUID()}}
$B.scripts.push(module_name)
var $src=null
if($elt.src){
ext_scripts.push({name:module_name,url:$elt.src})}else{
var $src=($elt.innerHTML ||$elt.textContent)
inner_scripts[module_name]=$src
$B.$py_module_path[module_name]=$href
run_script({name: module_name,src: $src,url: $href})}}}}
load_ext(ext_scripts)}
$B.$operators=$operators
$B.$Node=$Node
$B.$NodeJSCtx=$NodeJSCtx
$B.brython=brython})(__BRYTHON__)
var brython=__BRYTHON__.brython

__BRYTHON__.$__new__=function(factory){return function(cls){
var res=factory.apply(null,[])
res.__class__=cls.$dict
var init_func=null
try{init_func=__BRYTHON__.builtins.getattr(res,'__init__')}
catch(err){}
if(init_func!==null){var args=[],pos=0
for(var i=1,_len_i=arguments.length;i < _len_i;i++){args[pos++]=arguments[i]}
init_func.apply(null,args)
res.__initialized__=true}
return res}}
__BRYTHON__.builtins.object=(function($B){var _b_=$B.builtins
var $ObjectDict={
__name__:'object',$native:true}
var reverse_func={'__lt__':'__gt__','__gt__':'__lt__','__le__': '__ge__','__ge__': '__le__'}
var $ObjectNI=function(name,op){return function(self,other){var klass=$B.get_class(other),other_comp=_b_.getattr(klass,reverse_func[name])
if(other_comp.__func__===$ObjectDict[reverse_func[name]]){throw _b_.TypeError('unorderable types: object() '+op+
' '+ _b_.str($B.get_class(other).__name__)+'()')}else{return other_comp(other,self)}}}
var opnames=['add','sub','mul','truediv','floordiv','mod','pow','lshift','rshift','and','xor','or']
var opsigns=['+','-','*','/','//','%','**','<<','>>','&','^','|']
$ObjectDict.__delattr__=function(self,attr){_b_.getattr(self,attr)
delete self[attr];
return _b_.None}
$ObjectDict.__dir__=function(self){var objects=[self],pos=1
var mro=$B.get_class(self).__mro__
for(var i=0,_len_i=mro.length;i < _len_i;i++){objects[pos++]=mro[i]}
var res=[],pos=0
for(var i=0,_len_i=objects.length;i < _len_i;i++){for(var attr in objects[i]){
if(attr.charAt(0)=='$' && attr.charAt(1)!='$'){
continue}
if(!isNaN(parseInt(attr.charAt(0)))){
continue}
if(attr=='__mro__'){continue}
res[pos++]=attr}}
res=_b_.list(_b_.set(res))
_b_.list.$dict.sort(res)
return res}
$ObjectDict.__eq__=function(self,other){
var _class=$B.get_class(self)
if(_class.$native ||_class.__name__=='function'){var _class1=$B.get_class(other)
if(!_class1.$native && _class1.__name__ !='function'){return _b_.getattr(other,'__eq__')(self)}}
return self===other}
$ObjectDict.__format__=function(){var $=$B.args('__format__',2,{self:null,spec:null},['self','spec'],arguments,{},null,null)
if($.spec!==''){throw _b_.TypeError("non-empty format string passed to object.__format__")}
return _b_.getattr($.self,'__repr__')()}
$ObjectDict.__ge__=$ObjectNI('__ge__','>=')
$ObjectDict.__getattribute__=function(obj,attr){var klass=$B.get_class(obj)
if(attr==='__class__'){return klass.$factory}
var res=obj[attr],args=[]
if(res===undefined){
var mro=klass.__mro__
for(var i=0,_len_i=mro.length;i < _len_i;i++){if(mro[i].$methods){var method=mro[i].$methods[attr]
if(method!==undefined){return method(obj)}}
var v=mro[i][attr]
if(v!==undefined){res=v
break}else if(attr=='__str__' && mro[i]['__repr__']!==undefined){
res=mro[i]['repr']
break}}}else{if(res.__set__===undefined){
return res}}
if(res!==undefined){if(res.__class__===_b_.property.$dict){return res.__get__(res,obj,klass)}
var __get__=_b_.getattr(res,'__get__',null)
if(__get__!==null){try{return __get__.apply(null,[obj,klass])}
catch(err){console.log('error in get.apply',err)
console.log(__get__+'')
throw err}}
if(typeof res=='object'){if(__get__ &&(typeof __get__=='function')){get_func=function(x,y){return __get__.apply(x,[y,klass])}}}
if(__get__===null &&(typeof res=='function')){__get__=function(x){return x}}
if(__get__!==null){
res.__name__=attr
if(attr=='__new__'){res.$type='staticmethod'}
var res1=__get__.apply(null,[res,obj,klass])
if(typeof res1=='function'){
if(res1.__class__===$B.$factory)return res
else if(res1.__class__===$B.$MethodDict)return res
return $B.make_method(attr,klass,res,res1)(obj)}else{
return res1}}
return res}else{
var _ga=obj['__getattr__']
if(_ga===undefined){var mro=klass.__mro__
if(mro===undefined){console.log('in getattr mro undefined for '+obj)}
for(var i=0,_len_i=mro.length;i < _len_i;i++){var v=mro[i]['__getattr__']
if(v!==undefined){_ga=v
break}}}
if(_ga!==undefined){try{return _ga(obj,attr)}
catch(err){}}
if(attr.substr(0,2)=='__' && attr.substr(attr.length-2)=='__'){var attr1=attr.substr(2,attr.length-4)
var rank=opnames.indexOf(attr1)
if(rank > -1){var rop='__r'+opnames[rank]+'__' 
var func=function(){try{
if($B.get_class(arguments[0])===klass){throw Error('')}
return _b_.getattr(arguments[0],rop)(obj)}catch(err){var msg="unsupported operand types for "+
opsigns[rank]+": '"+ klass.__name__+"' and '"+
$B.get_class(arguments[0]).__name__+"'"
throw _b_.TypeError(msg)}}
func.$infos={__name__ : klass.__name__+'.'+attr}
return func}}}}
$ObjectDict.__gt__=$ObjectNI('__gt__','>')
$ObjectDict.__hash__=function(self){$B.$py_next_hash+=1;
return $B.$py_next_hash;}
$ObjectDict.__init__=function(){return _b_.None}
$ObjectDict.__le__=$ObjectNI('__le__','<=')
$ObjectDict.__lt__=$ObjectNI('__lt__','<')
$ObjectDict.__mro__=[$ObjectDict]
$ObjectDict.__new__=function(cls){if(cls===undefined){throw _b_.TypeError('object.__new__(): not enough arguments')}
return{__class__ : cls.$dict}}
$ObjectDict.__ne__=function(self,other){return !_b_.getattr(self,'__eq__')(other)}
$ObjectDict.__or__=function(self,other){if(_b_.bool(self))return self
return other}
$ObjectDict.__repr__=function(self){if(self===object)return "<class 'object'>"
if(self.__class__===$B.$factory)return "<class '"+self.$dict.__name__+"'>"
if(self.__class__.__module__!==undefined){return "<"+self.__class__.__module__+"."+self.__class__.__name__+" object>"}else{return "<"+self.__class__.__name__+" object>"}}
$ObjectDict.__setattr__=function(self,attr,val){if(val===undefined){
throw _b_.TypeError("can't set attributes of built-in/extension type 'object'")}else if(self.__class__===$ObjectDict){
if($ObjectDict[attr]===undefined){throw _b_.AttributeError("'object' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError("'object' object attribute '"+attr+"' is read-only")}}
self[attr]=val
return _b_.None}
$ObjectDict.__setattr__.__str__=function(){return 'method object.setattr'}
$ObjectDict.__str__=$ObjectDict.__repr__
$ObjectDict.__subclasshook__=function(){return _b_.NotImplemented}
function object(){return{__class__:$ObjectDict}}
object.$dict=$ObjectDict
$ObjectDict.$factory=object
object.__repr__=object.__str__=function(){return "<class 'object'>"}
$B.make_class=function(class_obj){
function A(){var res={__class__:A.$dict}
if(class_obj.init){class_obj.init.apply(null,[res].concat(Array.prototype.slice.call(arguments)))}
return res}
A.__class__=$B.$factory
A.$dict={$factory: A,__class__: $B.type,__name__: class_obj.name}
A.$dict.__mro__=[A.$dict,object.$dict]
return A}
return object})(__BRYTHON__)
;(function($B){var _b_=$B.builtins
$B.$class_constructor=function(class_name,class_obj,parents,parents_names,kwargs){var cl_dict=_b_.dict(),bases=null
var setitem=_b_.dict.$dict.__setitem__
for(var attr in class_obj){setitem(cl_dict,attr,class_obj[attr])}
if(parents!==undefined){for(var i=0;i<parents.length;i++){if(parents[i]===undefined){
$B.line_info=class_obj.$def_line
throw _b_.NameError("name '"+parents_names[i]+"' is not defined")}}}
bases=parents
var metaclass=_b_.type
for(var i=0;i<kwargs.length;i++){var key=kwargs[i][0],val=kwargs[i][1]
if(key=='metaclass'){metaclass=val}}
var class_dict={__name__ : class_name.replace('$$',''),__bases__ : bases,__dict__ : cl_dict}
var items=$B.$dict_items(cl_dict);
for(var i=0;i<items.length;i++){class_dict[items[i][0]]=items[i][1]}
class_dict.__mro__=[class_dict].concat(make_mro(bases,cl_dict))
var is_instanciable=true,non_abstract_methods={},abstract_methods={}
for(var i=0;i<class_dict.__mro__.length;i++){var kdict=class_dict.__mro__[i]
for(var attr in kdict){if(non_abstract_methods[attr]){continue}
var v=kdict[attr]
if(typeof v=='function' && v.__class__!==$B.$factory){if(v.__isabstractmethod__===true){is_instanciable=false
abstract_methods[attr]=true}else{non_abstract_methods[attr]=true}}}}
var slots=[]
for(var i=0;i<class_dict.__mro__.length;i++){var _slots=class_dict.__mro__[i].__slots__
if(_slots!==undefined){_slots=_b_.list(_slots)
for(var j=0;j<_slots.length;j++){cl_dict.$slots=cl_dict.$slots ||{}
cl_dict.$slots[_slots[j]]=class_dict.__mro__[i]}}}
for(var i=1;i<class_dict.__mro__.length;i++){if(class_dict.__mro__[i].__class__ !==$B.$type){metaclass=class_dict.__mro__[i].__class__.$factory}}
class_dict.__class__=metaclass.$dict
var meta_new=$B.$type.__getattribute__(metaclass.$dict,'__new__')
if(meta_new.__func__===$B.$type.__new__){var factory=_b_.type.$dict.__new__(_b_.type,class_name,bases,cl_dict)}else{var factory=meta_new(metaclass,class_name,bases,cl_dict)}
class_dict.$factory=factory
for(var i=0;i<parents.length;i++){parents[i].$dict.$subclasses=parents[i].$dict.$subclasses ||[]
parents[i].$dict.$subclasses.push(factory)}
if(metaclass===_b_.type)return factory
for(var attr in class_dict){factory.$dict[attr]=class_dict[attr]}
factory.$dict.$factory=factory
for(var member in metaclass.$dict){if(typeof metaclass.$dict[member]=='function' && member !='__new__'){metaclass.$dict[member].$type='classmethod'}}
factory.$is_func=true
if(!is_instanciable){function nofactory(){throw _b_.TypeError("Can't instantiate abstract class interface"+
" with abstract methods "+Object.keys(abstract_methods).join(', '))}
for(var attr in factory){nofactory[attr]=factory[attr]}
return nofactory}
return factory}
$B.$class_constructor1=function(class_name,class_obj){if(class_obj.__init__===undefined){var creator=function(){this.__class__=class_obj}}else{var creator=function(args){this.__class__=class_obj
class_obj.__init__.apply(null,[this].concat(Array.prototype.slice.call(args)))}}
var factory=function(){return new creator(arguments)}
factory.__class__=$B.$factory
factory.__name__=class_name
factory.$dict=class_obj
class_obj.__class__=$B.$type
class_obj.__name__=class_name
class_obj.__mro__=[class_obj,_b_.object.$dict]
for(var attr in class_obj){factory.prototype[attr]=class_obj[attr]}
class_obj.$factory=factory
return factory}
$B.make_method=function(attr,klass,func,func1){
var __self__,__func__=func,__repr__,__str__,method
switch(func.$type){case undefined:
case 'function':
method=function(instance){var instance_method=function(){var local_args=[instance]
var pos=local_args.length
for(var i=0,_len_i=arguments.length;i < _len_i;i++){local_args[pos++]=arguments[i]}
var f=_b_.getattr(func,'__get__',func)
return f.apply(null,local_args)}
instance_method.__class__=$B.$MethodDict
instance_method.$infos={__class__:klass.$factory,__func__:func,__name__:attr,__self__:instance}
return instance_method}
break
case 'instancemethod':
return func
case 'classmethod':
method=function(){var class_method=function(){var local_args=[klass]
var pos=local_args.length
for(var i=0,_len_i=arguments.length;i < _len_i;i++){local_args[pos++]=arguments[i]}
return func.apply(null,local_args)}
class_method.__class__=$B.$MethodDict
class_method.$infos={__class__:klass.$factory,__func__:func,__name__:attr}
return class_method}
break
case 'staticmethod':
method=function(){return func}
break}
return method}
function make_mro(bases,cl_dict){
var seqs=[],pos1=0
for(var i=0;i<bases.length;i++){
if(bases[i]===_b_.str)bases[i]=$B.$StringSubclassFactory
else if(bases[i]===_b_.list)bases[i]=$B.$ListSubclassFactory
var bmro=[],pos=0
var _tmp=bases[i].$dict.__mro__
for(var k=0;k<_tmp.length;k++){bmro[pos++]=_tmp[k]}
seqs[pos1++]=bmro}
if(bases.indexOf(_b_.object)==-1){bases=bases.concat(_b_.tuple([_b_.object]))}
for(var i=0;i<bases.length;i++)seqs[pos1++]=bases[i].$dict
var mro=[],mpos=0
while(1){var non_empty=[],pos=0
for(var i=0;i<seqs.length;i++){if(seqs[i].length>0)non_empty[pos++]=seqs[i]}
if(non_empty.length==0)break
for(var i=0;i<non_empty.length;i++){var seq=non_empty[i],candidate=seq[0],not_head=[],pos=0
for(var j=0;j<non_empty.length;j++){var s=non_empty[j]
if(s.slice(1).indexOf(candidate)>-1){not_head[pos++]=s}}
if(not_head.length>0){candidate=null}
else{break}}
if(candidate===null){throw _b_.TypeError("inconsistent hierarchy, no C3 MRO is possible")}
mro[mpos++]=candidate
for(var i=0;i<seqs.length;i++){var seq=seqs[i]
if(seq[0]===candidate){
seqs[i].shift()}}}
if(mro[mro.length-1]!==_b_.object.$dict){mro[mpos++]=_b_.object.$dict}
return mro}
_b_.type=function(obj,bases,cl_dict){if(arguments.length==1){if(obj.__class__===$B.$factory){
return obj.$dict.__class__.$factory}
return $B.get_class(obj).$factory}
return $B.$type.__new__(_b_.type,obj,bases,cl_dict)}
_b_.type.__class__=$B.$factory
$B.$type={$factory: _b_.type,__name__:'type'}
$B.$type.__class__=$B.$type
$B.$type.__mro__=[$B.$type,_b_.object.$dict]
_b_.type.$dict=$B.$type
$B.$type.__new__=function(cls,name,bases,cl_dict){
var class_dict={__class__ : $B.$type,__name__ : name.replace('$$',''),__bases__ : bases,__dict__ : cl_dict,$methods :{},$slots: cl_dict.$slots}
var items=$B.$dict_items(cl_dict);
for(var i=0;i<items.length;i++){var name=items[i][0],v=items[i][1]
class_dict[name]=v
if(typeof v=='function' 
&& v.__class__!==$B.$factory
&& v.__class__!==$B.$MethodDict){class_dict.$methods[name]=$B.make_method(name,class_dict,v,v)}}
class_dict.__mro__=[class_dict].concat(make_mro(bases,cl_dict))
class_dict.__class__=class_dict.__mro__[1].__class__
var factory=$instance_creator(class_dict)
factory.__class__=$B.$factory
factory.$dict=class_dict
factory.$is_func=true 
factory.__eq__=function(other){return other===factory.__class__}
class_dict.$factory=factory
return factory}
$B.$factory={__class__:$B.$type,$factory:_b_.type,is_class:true}
$B.$factory.__mro__=[$B.$factory,$B.$type,_b_.object.$dict]
_b_.type.__class__=$B.$factory
_b_.object.$dict.__class__=$B.$type
_b_.object.__class__=$B.$factory
$B.$type.__getattribute__=function(klass,attr){
switch(attr){case '__call__':
return $instance_creator(klass)
case '__eq__':
return function(other){return klass.$factory===other}
case '__ne__':
return function(other){return klass.$factory!==other}
case '__class__':
return klass.__class__.$factory
case '__doc__':
return klass.__doc__ ||_b_.None
case '__setattr__':
if(klass['__setattr__']!==undefined)return klass['__setattr__']
return function(key,value){klass[key]=value}
case '__delattr__':
if(klass['__delattr__']!==undefined)return klass['__delattr__']
return function(key){delete klass[key]}
case '__hash__':
return function(){if(arguments.length==0)return klass.__hashvalue__ ||$B.$py_next_hash--}}
var res=klass[attr],is_class=true
if(res===undefined){
var mro=klass.__mro__
if(mro===undefined){console.log('attr '+attr+' mro undefined for class '+klass+' name '+klass.__name__,klass,klass.__class__)}
for(var i=0;i<mro.length;i++){var v=mro[i][attr]
if(v!==undefined){res=v
break}}
var cl_mro=klass.__class__.__mro__
if(res===undefined){
var cl_mro=klass.__class__.__mro__
if(cl_mro!==undefined){for(var i=0;i<cl_mro.length;i++){var v=cl_mro[i][attr]
if(v!==undefined){res=v
break}}}}
if(res===undefined){
var getattr=null
for(var i=0;i<cl_mro.length;i++){if(cl_mro[i].__getattr__!==undefined){getattr=cl_mro[i].__getattr__
break}}
if(getattr!==null){if(getattr.$type=='classmethod'){return getattr(klass.$factory,attr)}
return getattr(attr)}}}
if(res===undefined && klass.$slots && klass.$slots[attr]!==undefined){return member_descriptor(klass.$slots[attr],attr)}
if(res!==undefined){
if(res.__class__===$B.$PropertyDict)return res
var get_func=res.__get__
if(get_func===undefined &&(typeof res=='function')){get_func=function(x){return x}}
if(get_func===undefined)return res
if(attr=='__new__'){res.$type='staticmethod'}
var res1=get_func.apply(null,[res,$B.builtins.None,klass])
if(res1.__class__===$B.$factory){
return res1 }
if(typeof res1=='function'){res.__name__=attr
var __self__,__func__=res1,__repr__,__str__,args
switch(res.$type){case undefined:
case 'function':
case 'instancemethod':
args=[]
__repr__=__str__=function(attr){return function(){return '<function '+klass.__name__+'.'+attr+'>' }}(attr)
break;
case 'classmethod':
args=[klass.$factory]
__self__=klass
__repr__=__str__=function(){var x='<bound method '+klass.__name__+'.'+attr
x +=' of '+klass.__name__+'>'
return x}
break;
case 'staticmethod':
args=[]
__repr__=__str__=function(attr){return function(){return '<function '+klass.__name__+'.'+attr+'>'}}(attr)
break;}
var method=(function(initial_args){return function(){
var local_args=initial_args.slice()
var pos=local_args.length
for(var i=0;i < arguments.length;i++){local_args[pos++]=arguments[i]}
return res.apply(null,local_args)}})(args)
method.__class__=$B.$FunctionDict
method.__eq__=function(other){return other.__func__===__func__}
for(var attr in res){method[attr]=res[attr]}
method.__func__=__func__
method.__repr__=__repr__
method.__self__=__self__
method.__str__=__str__
method.__code__={'__class__': $B.CodeDict}
method.__doc__=res.__doc__ ||''
method.im_class=klass
return method}}}
function $instance_creator(klass){
if(klass.$instanciable!==undefined){console.log('klass',klass.__name__,'not instanciable')
return function(){throw _b_.TypeError("Can't instantiate abstract "+
"class interface with abstract methods")}}
var new_func=null
try{new_func=_b_.getattr(klass,'__new__')}
catch(err){}
var init_func=null
try{init_func=_b_.getattr(klass,'__init__')}
catch(err){}
var simple=false
if(klass.__bases__.length==0){simple=true}
else if(klass.__bases__.length==1){switch(klass.__bases__[0]){case _b_.object:
case _b_.type:
simple=true
break
default:
simple=false
break}}
if(simple && klass.__new__==undefined && init_func!==null){
return function(){var obj={__class__:klass}
init_func.apply(null,[obj].concat(Array.prototype.slice.call(arguments)))
return obj}}
return function(){var obj
var _args=Array.prototype.slice.call(arguments)
if(simple && klass.__new__==undefined){obj={__class__:klass}}else{if(new_func!==null){obj=new_func.apply(null,[klass.$factory].concat(_args))}}
if(!obj.__initialized__){if(init_func!==null){init_func.apply(null,[obj].concat(_args))}}
return obj}}
function member_descriptor(klass,attr){return{__class__:member_descriptor.$dict,klass: klass,attr: attr}}
member_descriptor.__class__=$B.$factory
member_descriptor.$dict={__class__: $B.$type,__name__: 'member_descriptor',$factory: member_descriptor,__str__: function(self){return "<member '"+self.attr+"' of '"+self.klass.__name__+
"' objects>"}}
member_descriptor.$dict.__mro__=[member_descriptor.$dict ,_b_.object.$dict]
function $MethodFactory(){}
$MethodFactory.__class__=$B.$factory
$B.$MethodDict={__class__:$B.$type,__name__:'method',$factory:$MethodFactory}
$B.$MethodDict.__eq__=function(self,other){return self.$infos !==undefined &&
other.$infos !==undefined &&
self.$infos.__func__===other.$infos.__func__ && 
self.$infos.__self__===other.$infos.__self__}
$B.$MethodDict.__ne__=function(self,other){return !$B.$MethodDict.__eq__(self,other)}
$B.$MethodDict.__getattribute__=function(self,attr){
var infos=self.$infos.__func__.$infos
if(infos && infos[attr]){if(attr=='__code__'){var res={__class__:$B.$CodeDict}
for(var attr in infos.__code__){res[attr]=infos.__code__[attr]}
return res}else{return infos[attr]}}else{return _b_.object.$dict.__getattribute__(self,attr)}}
$B.$MethodDict.__mro__=[$B.$MethodDict,_b_.object.$dict]
$B.$MethodDict.__repr__=$B.$MethodDict.__str__=function(self){var res='<bound method '+self.$infos.__class__.$dict.__name__+'.' 
res +=self.$infos.__name__+' of '
return res+_b_.str(self.$infos.__self__)+'>'}
$MethodFactory.$dict=$B.$MethodDict
$B.$InstanceMethodDict={__class__:$B.$type,__name__:'instancemethod',__mro__:[_b_.object.$dict],$factory:$MethodFactory}})(__BRYTHON__)
;(function($B){var _b_=$B.builtins
$B.args=function($fname,argcount,slots,var_names,$args,$dobj,extra_pos_args,extra_kw_args){
var has_kw_args=false,nb_pos=$args.length,$ns
if(nb_pos>0 && $args[nb_pos-1].$nat=='kw'){has_kw_args=true
nb_pos--
var kw_args=$args[nb_pos].kw}
if(extra_pos_args){slots[extra_pos_args]=[]}
if(extra_kw_args){slots[extra_kw_args]=_b_.dict()}
if(nb_pos>argcount){
if(extra_pos_args===null){
msg=$fname+"() takes "+argcount+' positional argument'+
(argcount> 1 ? '' : 's')+ ' but more were given'
throw _b_.TypeError(msg)}else{
slots[extra_pos_args]=_b_.tuple(Array.prototype.slice.call($args,argcount,nb_pos))
nb_pos=argcount}}
for(var i=0;i<nb_pos;i++){slots[var_names[i]]=$args[i]}
if(has_kw_args){for(var key in kw_args){var value=kw_args[key],key=key.replace(/\$/g,'')
if(slots[key]===undefined){
if(extra_kw_args){
slots[extra_kw_args].$string_dict[key]=value}else{throw _b_.TypeError($fname+"() got an unexpected keyword argument '"+key+"'")}}else if(slots[key]!==null){
throw _b_.TypeError($fname+"() got multiple values for argument '"+key+"'")}else{
slots[key]=value}}}
var missing=[]
for(var attr in slots){if(slots[attr]===null){if($dobj[attr]!==undefined){slots[attr]=$dobj[attr]}
else{missing.push("'"+attr+"'")}}}
if(missing.length>0){if(missing.length==1){throw _b_.TypeError($fname+" missing 1 positional argument: "+missing[0])}else{var msg=$fname+" missing "+missing.length+" positional arguments: "
msg +=missing.join(' and ')
throw _b_.TypeError(msg)}}
return slots}
$B.get_class=function(obj){
if(obj===null){return $B.$NoneDict}
var klass=obj.__class__
if(klass===undefined){switch(typeof obj){case 'number':
if(obj % 1===0){
obj.__class__=_b_.int.$dict
return _b_.int.$dict}
obj.__class__=_b_.float.$dict
return _b_.float.$dict
case 'string':
obj.__class__=_b_.str.$dict
return _b_.str.$dict
case 'boolean':
obj.__class__=$B.$BoolDict
return $B.$BoolDict
case 'function':
obj.__class__=$B.$FunctionDict
return $B.$FunctionDict
case 'object':
if(obj.constructor===Array){obj.__class__=_b_.list.$dict
return _b_.list.$dict}
else if(obj.constructor===Number)return _b_.float.$dict
break}}
return klass}
$B.$mkdict=function(glob,loc){var res={}
for(var arg in glob)res[arg]=glob[arg]
for(var arg in loc)res[arg]=loc[arg]
return res}
function clear(ns){
delete $B.vars[ns],$B.bound[ns],$B.modules[ns],$B.imported[ns]}
$B.$list_comp=function(env){
var $ix=$B.UUID()
var $py="x"+$ix+"=[]\n",indent=0
for(var $i=2,_len_$i=arguments.length;$i < _len_$i;$i++){$py +=' '.repeat(indent)
$py +=arguments[$i].join('')+':\n'
indent +=4}
$py +=' '.repeat(indent)
$py +='x'+$ix+'.append('+arguments[1].join('\n')+')\n'
for(var i=0;i<env.length;i++){var sc_id='$locals_'+env[i][0].replace(/\./,'_')
eval('var '+sc_id+'=env[i][1]')}
var locals_id=env[0][0],module_obj=env[env.length-1],globals_id=module_obj[0]
var listcomp_name='lc'+$ix
var $root=$B.py2js($py,globals_id,listcomp_name,locals_id,$B.line_info)
$root.caller=$B.line_info
var $js=$root.to_js()
try{eval($js)
var res=eval('$locals_'+listcomp_name+'["x"+$ix]')}
catch(err){throw $B.exception(err)}
finally{clear(listcomp_name)}
return res}
$B.$list_comp1=function(items){
var $ix=$B.UUID()
var $py="x"+$ix+"=[]\n",indent=0
for(var $i=1,_len_$i=items.length;$i < _len_$i;$i++){$py +=' '.repeat(indent)
$py +=items[$i]+':\n'
indent +=4}
$py +=' '.repeat(indent)
$py +='x'+$ix+'.append('+items[0]+')\n'
return[$py,$ix]}
$B.$dict_comp=function(env){
var $ix=$B.UUID()
var $res='res'+$ix
var $py=$res+"={}\n"
var indent=0
for(var $i=2,_len_$i=arguments.length;$i < _len_$i;$i++){$py+=' '.repeat(indent)
$py +=arguments[$i]+':\n'
indent +=4}
$py+=' '.repeat(indent)
$py +=$res+'.update({'+arguments[1].join('\n')+'})'
for(var i=0;i<env.length;i++){var sc_id='$locals_'+env[i][0].replace(/\./,'_')
eval('var '+sc_id+'=env[i][1]')}
var local_name=env[0][0]
var module_env=env[env.length-1]
var module_name=module_env[0]
var dictcomp_name='dc'+$ix
var $root=$B.py2js($py,module_name,dictcomp_name,local_name,$B.line_info)
$root.caller=$B.line_info
var $js=$root.to_js()
eval($js)
var res=eval('$locals_'+dictcomp_name+'["'+$res+'"]')
return res}
$B.$gen_expr=function(env){
var $ix=$B.UUID()
var $res='res'+$ix
var $py=$res+"=[]\n"
var indent=0
for(var $i=2,_len_$i=arguments.length;$i < _len_$i;$i++){$py+=' '.repeat(indent)
$py +=arguments[$i].join(' ')+':\n'
indent +=4}
$py+=' '.repeat(indent)
$py +=$res+'.append('+arguments[1].join('\n')+')'
for(var i=0;i<env.length;i++){var sc_id='$locals_'+env[i][0].replace(/\./g,'_')
eval('var '+sc_id+'=env[i][1]')}
var local_name=env[0][0]
var module_env=env[env.length-1]
var module_name=module_env[0]
var genexpr_name='ge'+$ix
var $root=$B.py2js($py,module_name,genexpr_name,local_name,$B.line_info)
var $js=$root.to_js()
eval($js)
var $res1=eval('$locals_ge'+$ix)["res"+$ix]
var $GenExprDict={__class__:$B.$type,__name__:'generator',toString:function(){return '(generator)'}}
$GenExprDict.__mro__=[$GenExprDict,_b_.object.$dict]
$GenExprDict.__iter__=function(self){return self}
$GenExprDict.__next__=function(self){self.$counter +=1
if(self.$counter==self.value.length){throw _b_.StopIteration('')}
return self.value[self.$counter]}
$GenExprDict.$factory={__class__:$B.$factory,$dict:$GenExprDict}
var $res2={value:$res1,__class__:$GenExprDict,$counter:-1}
$res2.toString=function(){return 'ge object'}
return $res2}
$B.$lambda=function(env,args,body){
var rand=$B.UUID()
var $res='lambda_'+$B.lambda_magic+'_'+rand
var $py='def '+$res+'('+args+'):\n'
$py +='    return '+body
for(var i=0;i<env.length;i++){var sc_id='$locals_'+env[i][0].replace(/\./g,'_')
eval('var '+sc_id+'=env[i][1]')}
var local_name=env[0][0]
var module_env=env[env.length-1]
var module_name=module_env[0]
var lambda_name='lambda'+rand
var $js=$B.py2js($py,module_name,lambda_name,local_name).to_js()
eval($js)
var $res=eval('$locals_'+lambda_name+'["'+$res+'"]')
$res.__module__=module_name
$res.__name__='<lambda>'
return $res}
$B.$search=function(name,global_ns){
var frame=$B.last($B.frames_stack)
if(frame[1][name]!==undefined){return frame[1][name]}
else if(frame[3][name]!==undefined){return frame[3][name]}
else if(_b_[name]!==undefined){return _b_[name]}
else{if(frame[0]==frame[2]){throw _b_.NameError(name)}
else{throw _b_.UnboundLocalError("local variable '"+name+
"' referenced before assignment")}}}
$B.$global_search=function(name){
var frame=$B.last($B.frames_stack)
if(frame[3][name]!==undefined){return frame[3][name]}
else{throw _b_.NameError(name)}}
$B.$local_search=function(name){
var frame=$B.last($B.frames_stack)
if(frame[1][name]!==undefined){return frame[1][name]}
else{throw _b_.UnboundLocalError("local variable '"+name+
"' referenced before assignment")}}
$B.$check_def=function(name,value){
if(value!==undefined){return value}
throw _b_.NameError(name)}
$B.$check_def_local=function(name,value){
if(value!==undefined){return value}
throw _b_.UnboundLocalError("local variable '"+name+
"' referenced before assignment")}
$B.$check_def_free=function(name,value){
if(value!==undefined){return value}
throw _b_.NameError("free variable '"+name+
"' referenced before assignment in enclosing scope")}
$B.$JS2Py=function(src){if(typeof src==='number'){if(src%1===0)return src
return _b_.float(src)}
if(src===null||src===undefined)return _b_.None
var klass=$B.get_class(src)
if(klass!==undefined){if(klass===_b_.list.$dict){for(var i=0,_len_i=src.length;i< _len_i;i++)src[i]=$B.$JS2Py(src[i])}else if(klass===$B.JSObject.$dict){src=src.js}else{return src}}
if(typeof src=="object"){if($B.$isNode(src))return $B.DOMNode(src)
if($B.$isEvent(src))return $B.DOMEvent(src)
if(src.constructor===Array||$B.$isNodeList(src)){var res=[],pos=0
for(var i=0,_len_i=src.length;i<_len_i;i++)res[pos++]=$B.$JS2Py(src[i])
return res}}
return $B.JSObject(src)}
$B.list_key=function(obj,key){key=$B.$GetInt(key)
if(key<0){key +=obj.length}
var res=obj[key]
if(res===undefined){throw _b_.IndexError("list index out of range")}
return res}
$B.list_slice=function(obj,start,stop){if(start===null){start=0}
else{start=$B.$GetInt(start)
if(start<0){start=Math.max(0,start+obj.length)}}
if(stop===null){return obj.slice(start)}
stop=$B.$GetInt(stop)
if(stop<0){stop=Math.max(0,stop+obj.length)}
return obj.slice(start,stop)}
$B.list_slice_step=function(obj,start,stop,step){if(step===null||step==1){return $B.list_slice(obj,start,stop)}
if(step==0){throw _b_.ValueError("slice step cannot be zero")}
step=$B.$GetInt(step)
if(start===null){start=step >=0 ? 0 : obj.length-1}
else{start=$B.$GetInt(start)
if(start<0){start=Math.min(0,start+obj.length)}}
if(stop===null){stop=step >=0 ? obj.length : -1}
else{stop=$B.$GetInt(stop)
if(stop<0){stop=Math.max(0,stop+obj.length)}}
var res=[],len=obj.length
if(step>0){for(var i=start;i<stop;i+=step){res.push(obj[i])}}else{for(var i=start;i>stop;i+=step){res.push(obj[i])}}
return res}
function index_error(obj){var type=typeof obj=='string' ? 'string' : 'list'
throw _b_.IndexError(type+" index out of range")}
$B.$getitem=function(obj,item){if(typeof item=='number'){if(Array.isArray(obj)||typeof obj=='string'){item=item >=0 ? item : obj.length+item
if(obj[item]!==undefined){return obj[item]}
else{index_error(obj)}}}
try{item=$B.$GetInt(item)}catch(err){}
if((Array.isArray(obj)||typeof obj=='string')
&& typeof item=='number'){item=item >=0 ? item : obj.length+item
if(obj[item]!==undefined){return obj[item]}
else{index_error(obj)}}
return _b_.getattr(obj,'__getitem__')(item)}
$B.set_list_key=function(obj,key,value){try{key=$B.$GetInt(key)}
catch(err){if(_b_.isinstance(key,_b_.slice)){var s=_b_.slice.$dict.$conv_for_seq(key,obj.length)
return $B.set_list_slice_step(obj,s.start,s.stop,s.step,value)}}
if(key<0){key+=obj.length}
if(obj[key]===undefined){console.log(obj,key)
throw _b_.IndexError('list assignment index out of range')}
obj[key]=value}
$B.set_list_slice=function(obj,start,stop,value){if(start===null){start=0}
else{start=$B.$GetInt(start)
if(start<0){start=Math.max(0,start+obj.length)}}
if(stop===null){stop=obj.length}
stop=$B.$GetInt(stop)
if(stop<0){stop=Math.max(0,stop+obj.length)}
var res=_b_.list(value)
obj.splice.apply(obj,[start,stop-start].concat(res))}
$B.set_list_slice_step=function(obj,start,stop,step,value){if(step===null||step==1){return $B.set_list_slice(obj,start,stop,value)}
if(step==0){throw _b_.ValueError("slice step cannot be zero")}
step=$B.$GetInt(step)
if(start===null){start=step>0 ? 0 : obj.length-1}
else{start=$B.$GetInt(start)
if(start<0){start=Math.min(0,start+obj.length)}}
if(stop===null){stop=step>0 ? obj.length : -1}
else{stop=$B.$GetInt(stop)
if(stop<0){stop=Math.max(0,stop+obj.length)}}
var repl=_b_.list(value),j=0,test,nb=0
if(step>0){test=function(i){return i<stop}}
else{test=function(i){return i>stop}}
for(var i=start;test(i);i+=step){nb++}
if(nb!=repl.length){throw _b_.ValueError('attempt to assign sequence of size '+
repl.length+' to extended slice of size '+nb)}
for(var i=start;test(i);i+=step){obj[i]=repl[j]
j++}}
$B.$setitem=function(obj,item,value){if(Array.isArray(obj)&& typeof item=='number' && !_b_.isinstance(obj,_b_.tuple)){if(item<0){item+=obj.length}
if(obj[item]===undefined){throw _b_.IndexError("list assignment index out of range")}
obj[item]=value
return}else if(obj.__class__===_b_.dict.$dict){obj.__class__.__setitem__(obj,item,value)
return}
_b_.getattr(obj,'__setitem__')(item,value)}
$B.augm_item_add=function(obj,item,incr){if(Array.isArray(obj)&& typeof item=="number" &&
obj[item]!==undefined){obj[item]+=incr
return}
var ga=_b_.getattr
try{var augm_func=ga(ga(obj,'__getitem__')(item),'__iadd__')
console.log('has augmfunc')}catch(err){ga(obj,'__setitem__')(item,ga(ga(obj,'__getitem__')(item),'__add__')(incr))
return}
augm_func(value)}
var augm_item_src=''+$B.augm_item_add
var augm_ops=[['-=','sub'],['*=','mul']]
for(var i=0,_len_i=augm_ops.length;i < _len_i;i++){var augm_code=augm_item_src.replace(/add/g,augm_ops[i][1])
augm_code=augm_code.replace(/\+=/g,augm_ops[i][0])
eval('$B.augm_item_'+augm_ops[i][1]+'='+augm_code)}
$B.$raise=function(){
var es=$B.current_exception
if(es!==undefined)throw es
throw _b_.RuntimeError('No active exception to reraise')}
$B.$syntax_err_line=function(exc,module,pos){
var pos2line={}
var lnum=1
var src=$B.$py_src[module]
if(src===undefined){console.log('no src for',module)}
var line_pos={1:0}
for(var i=0,_len_i=src.length;i < _len_i;i++){pos2line[i]=lnum
if(src.charAt(i)=='\n'){line_pos[++lnum]=i}}
var line_num=pos2line[pos]
exc.$line_info=line_num+','+module
var lines=src.split('\n')
var line=lines[line_num-1]
var lpos=pos-line_pos[line_num]
var len=line.length
line=line.replace(/^\s*/,'')
lpos-=len-line.length
exc.args=_b_.tuple([$B.$getitem(exc.args,0),module,line_num,lpos,line])}
$B.$SyntaxError=function(module,msg,pos){var exc=_b_.SyntaxError(msg)
$B.$syntax_err_line(exc,module,pos)
throw exc}
$B.$IndentationError=function(module,msg,pos){var exc=_b_.IndentationError(msg)
$B.$syntax_err_line(exc,module,pos)
throw exc}
$B.extend=function(fname,arg,mapping){var it=_b_.iter(mapping),getter=_b_.getattr(mapping,'__getitem__')
while(true){try{var key=_b_.next(it)
if(typeof key!=='string'){throw _b_.TypeError(fname+"() keywords must be strings")}
if(arg[key]!==undefined){throw _b_.TypeError(
fname+"() got multiple values for argument '"+key+"'")}
arg[key]=getter(key)}catch(err){if(_b_.isinstance(err,[_b_.StopIteration])){break}
throw err}}
return arg}
$B.extend_list=function(){
var res=Array.prototype.slice.call(arguments,0,arguments.length-1),last=$B.last(arguments)
var it=_b_.iter(last)
while(true){try{res.push(_b_.next(it))}catch(err){if(_b_.isinstance(err,[_b_.StopIteration])){break}
throw err}}
return res}
$B.$test_item=function(expr){
$B.$test_result=expr
return _b_.bool(expr)}
$B.$test_expr=function(){
return $B.$test_result}
$B.$is_member=function(item,_set){
var f,_iter
try{f=_b_.getattr(_set,"__contains__")}
catch(err){}
if(f)return f(item)
try{_iter=_b_.iter(_set)}
catch(err){}
if(_iter){while(1){try{var elt=_b_.next(_iter)
if(_b_.getattr(elt,"__eq__")(item))return true}catch(err){if(err.__name__=="StopIteration")return false
throw err}}}
try{f=_b_.getattr(_set,"__getitem__")}
catch(err){throw _b_.TypeError("'"+$B.get_class(_set).__name__+"' object is not iterable")}
if(f){var i=-1
while(1){i++
try{var elt=f(i)
if(_b_.getattr(elt,"__eq__")(item))return true}catch(err){if(err.__name__=='IndexError')return false
throw err}}}}
var $io={__class__:$B.$type,__name__:'io'}
$io.__mro__=[$io,_b_.object.$dict]
$B.stderr={__class__:$io,write:function(data){console.log(data)},flush:function(){}}
$B.stderr_buff='' 
$B.stdout={__class__:$io,write: function(data){console.log(data)},flush:function(){}}
$B.stdin={__class__: $io,__original__:true,closed: false,len:1,pos:0,read: function(){return '';},readline: function(){return '';}}
$B.jsobject2pyobject=function(obj){switch(obj){case null:
return _b_.None
case true:
return _b_.True
case false:
return _b_.False}
if(_b_.isinstance(obj,_b_.list)){var res=[],pos=0
for(var i=0,_len_i=obj.length;i < _len_i;i++){res[pos++]=$B.jsobject2pyobject(obj[i])}
return res}
if(obj.__class__!==undefined){if(obj.__class__===_b_.list){for(var i=0,_len_i=obj.length;i < _len_i;i++){obj[i]=$B.jsobject2pyobject(obj[i])}
return obj}
return obj}
if(obj._type_==='iter'){
return _b_.iter(obj.data)}
if(typeof obj==='object' && obj.__class__===undefined){
var res=_b_.dict()
var si=_b_.dict.$dict.__setitem__
for(var attr in obj){si(res,attr,$B.jsobject2pyobject(obj[attr]))}
return res}
return $B.JSObject(obj)}
$B.pyobject2jsobject=function(obj){
switch(obj){case _b_.None:
return null
case _b_.True:
return true
case _b_.False:
return false}
if(_b_.isinstance(obj,[_b_.int,_b_.float,_b_.str]))return obj
if(_b_.isinstance(obj,[_b_.list,_b_.tuple])){var res=[],pos=0
for(var i=0,_len_i=obj.length;i < _len_i;i++){res[pos++]=$B.pyobject2jsobject(obj[i])}
return res}
if(_b_.isinstance(obj,_b_.dict)){var res={}
var items=_b_.list(_b_.dict.$dict.items(obj))
for(var i=0,_len_i=items.length;i < _len_i;i++){res[$B.pyobject2jsobject(items[i][0])]=$B.pyobject2jsobject(items[i][1])}
return res}
if(_b_.hasattr(obj,'__iter__')){
var _a=[],pos=0
while(1){try{
_a[pos++]=$B.pyobject2jsobject(_b_.next(obj))}catch(err){if(err.__name__ !=="StopIteration")throw err
break}}
return{'_type_': 'iter',data: _a}}
if(_b_.hasattr(obj,'__getstate__')){return _b_.getattr(obj,'__getstate__')()}
if(_b_.hasattr(obj,'__dict__')){return $B.pyobject2jsobject(_b_.getattr(obj,'__dict__'))}
throw _b_.TypeError(_b_.str(obj)+' is not JSON serializable')}
$B.set_line=function(line_num,module_name){$B.line_info=line_num+','+module_name
return _b_.None}
$B.$iterator=function(items,klass){var res={__class__:klass,__iter__:function(){return res},__len__:function(){return items.length},__next__:function(){res.counter++
if(res.counter<items.length)return items[res.counter]
throw _b_.StopIteration("StopIteration")},__repr__:function(){return "<"+klass.__name__+" object>"},counter:-1}
res.__str__=res.toString=res.__repr__
return res}
$B.$iterator_class=function(name){var res={__class__:$B.$type,__name__:name,}
res.__mro__=[res,_b_.object.$dict]
function as_array(s){var _a=[],pos=0
var _it=_b_.iter(s)
while(1){try{
_a[pos++]=_b_.next(_it)}catch(err){if(err.__name__=='StopIteration'){break}}}
return _a}
function as_list(s){return _b_.list(as_array(s))}
function as_set(s){return _b_.set(as_array(s))}
res.__eq__=function(self,other){if(_b_.isinstance(other,[_b_.tuple,_b_.set,_b_.list])){return _b_.getattr(as_list(self),'__eq__')(other)}
if(_b_.hasattr(other,'__iter__')){return _b_.getattr(as_list(self),'__eq__')(as_list(other))}
_b_.NotImplementedError("__eq__ not implemented yet for list and " + _b_.type(other))}
var _ops=['eq','ne']
var _f=res.__eq__+''
for(var i=0;i < _ops.length;i++){var _op='__'+_ops[i]+'__'
eval('res.'+_op+'='+_f.replace(new RegExp('__eq__','g'),_op))}
res.__or__=function(self,other){if(_b_.isinstance(other,[_b_.tuple,_b_.set,_b_.list])){return _b_.getattr(as_set(self),'__or__')(other)}
if(_b_.hasattr(other,'__iter__')){return _b_.getattr(as_set(self),'__or__')(as_set(other))}
_b_.NotImplementedError("__or__ not implemented yet for set and " + _b_.type(other))}
var _ops=['sub','and','xor','gt','ge','lt','le']
var _f=res.__or__+''
for(var i=0;i < _ops.length;i++){var _op='__'+_ops[i]+'__'
eval('res.'+_op+'='+_f.replace(new RegExp('__or__','g'),_op))}
res.$factory={__class__:$B.$factory,$dict:res}
return res}
$B.$CodeDict={__class__:$B.$type,__name__:'code'}
$B.$CodeDict.__mro__=[$B.$CodeDict,_b_.object.$dict]
function _code(){}
_code.__class__=$B.$factory
_code.$dict=$B.$CodeDict
$B.$CodeDict.$factory=_code
function $err(op,klass,other){var msg="unsupported operand type(s) for "+op
msg +=": '"+klass.__name__+"' and '"+$B.get_class(other).__name__+"'"
throw _b_.TypeError(msg)}
var ropnames=['add','sub','mul','truediv','floordiv','mod','pow','lshift','rshift','and','xor','or']
var ropsigns=['+','-','*','/','//','%','**','<<','>>','&','^','|']
$B.make_rmethods=function(klass){for(var j=0,_len_j=ropnames.length;j < _len_j;j++){if(klass['__'+ropnames[j]+'__']===undefined){
klass['__'+ropnames[j]+'__']=(function(name,sign){return function(self,other){try{return _b_.getattr(other,'__r'+name+'__')(self)}
catch(err){$err(sign,klass,other)}}})(ropnames[j],ropsigns[j])}}}
$B.set_func_names=function(klass){var name=klass.__name__
for(var attr in klass){if(typeof klass[attr]=='function'){klass[attr].$infos={__name__ : name+'.'+attr}}}}
$B.UUID=function(){return $B.$py_UUID++}
$B.InjectBuiltins=function(){var _str=["var _b_=$B.builtins"],pos=1
for(var $b in $B.builtins)_str[pos++]='var ' + $b +'=_b_["'+$b+'"]'
return _str.join(';')}
$B.$GetInt=function(value){
if(typeof value=="number"||value.constructor===Number){return value}
else if(typeof value==="boolean"){return value ? 1 : 0}
else if(_b_.isinstance(value,_b_.int)){return value}
else if(_b_.isinstance(value,_b_.float)){return value.valueOf()}
try{var v=_b_.getattr(value,'__int__')();return v}catch(e){}
try{var v=_b_.getattr(value,'__index__')();return v}catch(e){}
throw _b_.TypeError("'"+$B.get_class(value).__name__+
"' object cannot be interpreted as an integer")}
$B.PyNumber_Index=function(item){switch(typeof item){case "boolean":
return item ? 1 : 0
case "number":
return item
case "object":
if(item.__class__===$B.LongInt.$dict){return item}
var method=_b_.getattr(item,'__index__',null)
if(method!==null){return $B.int_or_bool(_b_.getattr(method,'__call__')())}
default:
throw _b_.TypeError("'"+$B.get_class(item).__name__+
"' object cannot be interpreted as an integer")}}
$B.int_or_bool=function(v){switch(typeof v){case "boolean":
return v ? 1 : 0
case "number":
return v
case "object":
if(v.__class__===$B.LongInt.$dict){return v}
else{throw _b_.TypeError("'"+$B.get_class(v).__name__+
"' object cannot be interpreted as an integer")}
default:
throw _b_.TypeError("'"+$B.get_class(v).__name__+
"' object cannot be interpreted as an integer")}}
$B.int_value=function(v){
try{return $B.int_or_bool(v)}
catch(err){if(_b_.isinstance(v,_b_.complex)&& v.imag==0){return $B.int_or_bool(v.real)}else if(isinstance(v,_b_.float)&& v==Math.floor(v)){return Math.floor(v)}else{throw _b_.TypeError("'"+$B.get_class(v).__name__+
"' object cannot be interpreted as an integer")}}}
$B.enter_frame=function(frame){
if($B.frames_stack===undefined){alert('frames stack udef')}
$B.frames_stack[$B.frames_stack.length]=frame}
$B.leave_frame=function(arg){
if($B.frames_stack.length==0){console.log('empty stack');return}
var last=$B.last($B.frames_stack)
if(last[0]!=arg){
console.log('leave error','leaving',arg,'last on stack',last[0])}
$B.frames_stack.pop()}
var min_int=Math.pow(-2,53),max_int=Math.pow(2,53)-1
$B.is_safe_int=function(){for(var i=0;i<arguments.length;i++){var arg=arguments[i]
if(arg<min_int ||arg>max_int){return false}}
return true}
$B.add=function(x,y){var z=x+y
if(x>min_int && x<max_int && y>min_int && y<max_int
&& z>min_int && z<max_int){return z}
else if((typeof x=='number' ||x.__class__===$B.LongInt.$dict)
&&(typeof y=='number' ||y.__class__===$B.LongInt.$dict)){var res=$B.LongInt.$dict.__add__($B.LongInt(x),$B.LongInt(y))
return res}else{return z}}
$B.div=function(x,y){var z=x/y
if(x>min_int && x<max_int && y>min_int && y<max_int
&& z>min_int && z<max_int){return z}
else{return $B.LongInt.$dict.__truediv__($B.LongInt(x),$B.LongInt(y))}}
$B.eq=function(x,y){if(x>min_int && x<max_int && y>min_int && y<max_int){return x==y}
return $B.LongInt.$dict.__eq__($B.LongInt(x),$B.LongInt(y))}
$B.floordiv=function(x,y){var z=x/y
if(x>min_int && x<max_int && y>min_int && y<max_int
&& z>min_int && z<max_int){return Math.floor(z)}
else{return $B.LongInt.$dict.__floordiv__($B.LongInt(x),$B.LongInt(y))}}
$B.mul=function(x,y){var z=x*y
if(x>min_int && x<max_int && y>min_int && y<max_int
&& z>min_int && z<max_int){return z}
else if((typeof x=='number' ||x.__class__===$B.LongInt.$dict)
&&(typeof y=='number' ||y.__class__===$B.LongInt.$dict)){return $B.LongInt.$dict.__mul__($B.LongInt(x),$B.LongInt(y))}else{return z}}
$B.sub=function(x,y){var z=x-y
if(x>min_int && x<max_int && y>min_int && y<max_int
&& z>min_int && z<max_int){return z}
else if((typeof x=='number' ||x.__class__===$B.LongInt.$dict)
&&(typeof y=='number' ||y.__class__===$B.LongInt.$dict)){return $B.LongInt.$dict.__sub__($B.LongInt(x),$B.LongInt(y))}else{return z}}
$B.ge=function(x,y){if(typeof x=='number' && typeof y=='number'){return x>=y}
else if(typeof x=='number' && typeof y!='number'){return !y.pos}
else if(typeof x !='number' && typeof y=='number'){return x.pos===true}
else{return $B.LongInt.$dict.__ge__(x,y)}}
$B.gt=function(x,y){if(typeof x=='number' && typeof y=='number'){return x>y}
else if(typeof x=='number' && typeof y!='number'){return !y.pos}
else if(typeof x !='number' && typeof y=='number'){return x.pos===true}
else{return $B.LongInt.$dict.__gt__(x,y)}}
window.is_none=function(o){return o===undefined ||o==_b_.None;}
window.is_none=function(o){return o===undefined ||o==_b_.None;}})(__BRYTHON__)
if(!Array.indexOf){Array.prototype.indexOf=function(obj){for(var i=0,_len_i=this.length;i < _len_i;i++)if(this[i]==obj)return i
return -1}}
if(!String.prototype.repeat){String.prototype.repeat=function(count){if(count < 1)return '';
var result='',pattern=this.valueOf()
while(count > 1){if(count & 1)result +=pattern
count >>=1,pattern +=pattern}
return result + pattern;}}

;(function($B){eval($B.InjectBuiltins())
_b_.__debug__=false
var $ObjectDict=_b_.object.$dict
$B.$comps={'>':'gt','>=':'ge','<':'lt','<=':'le'}
function abs(obj){if(isinstance(obj,_b_.int))return _b_.int(Math.abs(obj));
if(isinstance(obj,_b_.float))return _b_.float(Math.abs(obj));
if(hasattr(obj,'__abs__')){return getattr(obj,'__abs__')()};
throw _b_.TypeError("Bad operand type for abs(): '"+$B.get_class(obj)+"'")}
function all(obj){var iterable=iter(obj)
while(1){try{var elt=next(iterable)
if(!bool(elt))return false}catch(err){return true}}}
function any(obj){var iterable=iter(obj)
while(1){try{var elt=next(iterable)
if(bool(elt))return true}catch(err){return false}}}
function ascii(obj){var res=repr(obj),res1='',cp
for(var i=0;i<res.length;i++){cp=res.charCodeAt(i)
if(cp<128){res1 +=res.charAt(i)}
else if(cp<256){res1 +='\\x'+cp.toString(16)}
else{res1 +='\\u'+cp.toString(16)}}
return res1}
function $builtin_base_convert_helper(obj,base){var prefix="";
switch(base){case 2:
prefix='0b';break;
case 8:
prefix='0o';break;
case 16:
prefix='0x';break;
default:
console.log('invalid base:' + base)}
if(obj.__class__===$B.LongInt.$dict){if(obj.pos)return prefix + $B.LongInt.$dict.to_base(obj,base)
return '-' + prefix + $B.LongInt.$dict.to_base(-obj,base)}
var value=$B.$GetInt(obj)
if(value===undefined){
throw _b_.TypeError('Error, argument must be an integer or contains an __index__ function')}
if(value >=0)return prefix + value.toString(base);
return '-' + prefix +(-value).toString(base);}
function bin(obj){if(isinstance(obj,_b_.int)){return $builtin_base_convert_helper(obj,2)}
return getattr(obj,'__index__')()}
function bool(obj){
if(obj===null ||obj===undefined )return false
switch(typeof obj){case 'boolean':
return obj
case 'number':
case 'string':
if(obj)return true
return false
default:
try{return getattr(obj,'__bool__')()}
catch(err){try{return getattr(obj,'__len__')()>0}
catch(err){return true}}}}
function callable(obj){return hasattr(obj,'__call__')}
function chr(i){if(i < 0 ||i > 1114111)_b_.ValueError('Outside valid range')
return String.fromCharCode(i)}
function classmethod(func){func.$type='classmethod'
return func}
classmethod.__class__=$B.$factory
classmethod.$dict={__class__:$B.$type,__name__:'classmethod',$factory: classmethod}
classmethod.$dict.__mro__=[classmethod.$dict,$ObjectDict]
$B.$CodeObjectDict={__class__:$B.$type,__name__:'code',__repr__:function(self){return '<code object '+self.name+', file '+self.filename+'>'},}
$B.$CodeObjectDict.__str__=$B.$CodeObjectDict.__repr__
$B.$CodeObjectDict.__mro__=[$B.$CodeObjectDict,$ObjectDict]
function compile(source,filename,mode){var $=$B.args('compile',6,{source:null,filename:null,mode:null,flags:null,dont_inherit:null,optimize:null},['source','filename','mode','flags','dont_inherit','optimize'],arguments,{flags:0,dont_inherit:false,optimize:-1},null,null)
var module_name='exec_' + $B.UUID()
var local_name=module_name;
var root=$B.py2js(source,module_name,[module_name],local_name)
$.__class__=$B.$CodeObjectDict
return $}
compile.__class__=$B.factory
$B.$CodeObjectDict.$factory=compile
compile.$dict=$B.$CodeObjectDict
var __debug__=$B.debug>0
function delattr(obj,attr){
var klass=$B.get_class(obj)
var res=obj[attr]
if(res===undefined){var mro=klass.__mro__
for(var i=0;i<mro.length;i++){var res=mro[i][attr]
if(res!==undefined){break}}}
if(res!==undefined && res.__delete__!==undefined){res.__delete__(res,obj,attr)}else{getattr(obj,'__delattr__')(attr)}
return None}
function dir(obj){if(obj===undefined){
var frame=$B.last($B.frames_stack),globals_obj=frame[3],res=_b_.list(),pos=0
for(var attr in globals_obj){if(attr.charAt(0)=='$' && attr.charAt(1)!='$'){
continue}
res[pos++]=attr}
_b_.list.$dict.sort(res)
return res}
var klass=$B.get_class(obj)
if(klass && klass.is_class){obj=obj.$dict}
else{
try{
var res=getattr(obj,'__dir__')()
res=_b_.list(res)
res.sort()
return res}catch(err){}}
var res=[],pos=0
for(var attr in obj){if(attr.charAt(0)!=='$' && attr!=='__class__'){res[pos++]=attr}}
res.sort()
return res}
function divmod(x,y){var klass=$B.get_class(x)
return _b_.tuple([getattr(klass,'__floordiv__')(x,y),getattr(klass,'__mod__')(x,y)])}
var $EnumerateDict={__class__:$B.$type,__name__:'enumerate'}
$EnumerateDict.__mro__=[$EnumerateDict,$ObjectDict]
function enumerate(){var $ns=$B.args("enumerate",2,{iterable:null,start:null},['iterable','start'],arguments,{start:0},null,null)
var _iter=iter($ns["iterable"])
var _start=$ns["start"]
var res={__class__:$EnumerateDict,__getattr__:function(attr){return res[attr]},__iter__:function(){return res},__name__:'enumerate iterator',__next__:function(){res.counter++
return _b_.tuple([res.counter,next(_iter)])},__repr__:function(){return "<enumerate object>"},__str__:function(){return "<enumerate object>"},counter:_start-1}
for(var attr in res){if(typeof res[attr]==='function' && attr!=="__class__"){res[attr].__str__=(function(x){return function(){return "<method wrapper '"+x+"' of enumerate object>"}})(attr)}}
return res}
enumerate.__class__=$B.$factory
enumerate.$dict=$EnumerateDict
$EnumerateDict.$factory=enumerate
function $eval(src,_globals,_locals){var current_frame=$B.frames_stack[$B.frames_stack.length-1]
if(current_frame!==undefined){var current_locals_id=current_frame[0].replace(/\./,'_'),current_globals_id=current_frame[2].replace(/\./,'_')}
var is_exec=arguments[3]=='exec',leave=false
if(src.__class__===$B.$CodeObjectDict){src=src.source}
var globals_id='$exec_'+$B.UUID(),locals_id,parent_block_id
if(_locals===_globals ||_locals===undefined){locals_id=globals_id}else{locals_id='$exec_'+$B.UUID()}
eval('var $locals_'+globals_id+' = {}')
eval('var $locals_'+locals_id+' = {}')
if(_globals===undefined){for(var attr in current_frame[3]){eval('$locals_'+globals_id+'["'+attr+
'"] = current_frame[3]["'+attr+'"]')}
parent_block_id=current_globals_id
eval('var $locals_'+current_globals_id+'=current_frame[3]')}else{var items=_b_.dict.$dict.items(_globals),item
while(1){try{var item=next(items)
eval('$locals_'+globals_id+'["'+item[0]+'"] = item[1]')}catch(err){break}}
parent_block_id='__builtins__'}
if(_locals===undefined){if(_globals!==undefined){eval('var $locals_'+locals_id+' = $locals_'+globals_id)}else{for(var attr in current_frame[1]){eval('$locals_'+locals_id+'["'+attr+
'"] = current_frame[1]["'+attr+'"]')}}}else{var items=_b_.dict.$dict.items(_locals),item
while(1){try{var item=next(items)
eval('$locals_'+locals_id+'["'+item[0]+'"] = item[1]')}catch(err){break}}}
var root=$B.py2js(src,globals_id,locals_id,parent_block_id),leave_frame=true
try{
if(!is_exec){var try_node=root.children[root.children.length-2],instr=$B.last(try_node.children)
var type=instr.C.tree[0].type
if(!('expr'==type ||'list_or_tuple'==type ||'op'==type)){leave_frame=false
throw _b_.SyntaxError("eval() argument must be an expression",'<string>',1,1,src)}else{
var children=try_node.children
root.children.splice(root.children.length-2,2)
for(var i=0;i<children.length;i++){root.add(children[i])}}}
var js=root.to_js()
if($B.async_enabled)js=$B.execution_object.source_conversion(js)
var res=eval(js)
var gns=eval('$locals_'+globals_id)
if(_locals!==undefined){var lns=eval('$locals_'+locals_id)
var setitem=getattr(_locals,'__setitem__')
for(var attr in lns){setitem(attr,lns[attr])}}else{for(var attr in lns){current_frame[1][attr]=lns[attr]}}
if(_globals!==undefined){
var setitem=getattr(_globals,'__setitem__')
for(var attr in gns){setitem(attr,gns[attr])}}else{for(var attr in gns){current_frame[3][attr]=gns[attr]}}
if(res===undefined)return _b_.None
return res}catch(err){if(err.$py_error===undefined){throw $B.exception(err)}
throw err}finally{if(!is_exec && leave_frame){
$B.leave_frame(locals_id)}}}
$eval.$is_func=true
function exec(src,globals,locals){return $eval(src,globals,locals,'exec')||_b_.None}
exec.$is_func=true
var $FilterDict={__class__:$B.$type,__name__:'filter'}
$FilterDict.__iter__=function(self){return self}
$FilterDict.__repr__=$FilterDict.__str__=function(){return "<filter object>"},$FilterDict.__mro__=[$FilterDict,$ObjectDict]
function filter(){if(arguments.length!=2){throw _b_.TypeError(
"filter expected 2 arguments, got "+arguments.length)}
var func=arguments[0],iterable=iter(arguments[1])
if(func===_b_.None)func=bool
var __next__=function(){while(true){var _item=next(iterable)
if(func(_item)){return _item}}}
return{
__class__: $FilterDict,__next__: __next__}}
function format(value,format_spec){if(hasattr(value,'__format__'))return getattr(value,'__format__')(format_spec)
throw _b_.NotImplementedError("__format__ is not implemented for object '" + _b_.str(value)+ "'")}
function attr_error(attr,cname){var msg="bad operand type for unary #: '"+cname+"'"
switch(attr){case '__neg__':
throw _b_.TypeError(msg.replace('#','-'))
case '__pos__':
throw _b_.TypeError(msg.replace('#','+'))
case '__invert__':
throw _b_.TypeError(msg.replace('#','~'))
case '__call__':
throw _b_.TypeError("'"+cname+"'"+' object is not callable')
default:
throw _b_.AttributeError("'"+cname+"' object has no attribute '"+attr+"'")}}
function getattr(obj,attr,_default){var klass=$B.get_class(obj)
if(klass===undefined){
if(obj[attr]!==undefined)return $B.$JS2Py(obj[attr])
if(_default!==undefined)return _default
throw _b_.AttributeError('object has no attribute '+attr)}
switch(attr){case '__call__':
if(typeof obj=='function'){if(obj.$blocking){console.log('calling blocking function '+obj.__name__)}
return obj}else if(klass===$B.JSObject.$dict && typeof obj.js=='function'){return function(){return $B.JSObject(obj.js.apply(null,arguments))}}
break
case '__class__':
return klass.$factory
case '__dict__':
return $B.obj_dict(obj)
case '__doc__':
for(var i=0;i<builtin_names.length;i++){if(obj===_b_[builtin_names[i]]){_get_builtins_doc()
return $B.builtins_doc[builtin_names[i]]}}
break
case '__mro__':
if(klass===$B.$factory){
var res=[],pos=0
for(var i=0;i<obj.$dict.__mro__.length;i++){res[pos++]=obj.$dict.__mro__[i].$factory}
return res}
break
case '__subclasses__':
if(klass===$B.$factory){var subclasses=obj.$dict.$subclasses ||[]
return function(){return subclasses}}
break}
if(typeof obj=='function'){if(attr !==undefined && obj[attr]!==undefined){if(attr=='__module__'){
return obj[attr]}}}
if(klass.$native){if(klass[attr]===undefined){var object_attr=_b_.object.$dict[attr]
if(object_attr!==undefined){klass[attr]=object_attr}
else{if(_default===undefined){attr_error(attr,klass.__name__)}
return _default}}
if(klass.descriptors && klass.descriptors[attr]!==undefined){return klass[attr](obj)}
if(typeof klass[attr]=='function'){
if(attr=='__new__')return klass[attr].apply(null,arguments)
var method=function(){var args=[obj],pos=1
for(var i=0;i<arguments.length;i++){args[pos++]=arguments[i]}
return klass[attr].apply(null,args)}
method.__class__=$B.$MethodDict
method.$infos={__class__: klass.$factory,__func__ : klass[attr],__name__ : attr,__self__ : obj}
method.__str__=method.__repr__=function(){return '<built-in method '+attr+' of '+klass.__name__+' object>'}
return method}
return klass[attr]}
var is_class=klass.is_class,mro,attr_func
if(is_class){attr_func=$B.$type.__getattribute__
if(obj.$dict===undefined){console.log('obj '+obj+' $dict undefined')}
obj=obj.$dict}else{var mro=klass.__mro__
if(mro===undefined){console.log('in getattr '+attr+' mro undefined for '+obj+' dir '+dir(obj)+' class '+obj.__class__)
for(var _attr in obj){console.log('obj attr '+_attr+' : '+obj[_attr])}
console.log('obj class '+dir(klass)+' str '+klass)}
for(var i=0;i<mro.length;i++){attr_func=mro[i]['__getattribute__']
if(attr_func!==undefined){break}}}
if(typeof attr_func!=='function'){console.log(attr+' is not a function '+attr_func)}
try{var res=attr_func(obj,attr)}
catch(err){if(_default!==undefined)return _default
throw err}
if(res!==undefined){return res}
if(_default !==undefined)return _default
var cname=klass.__name__
if(is_class)cname=obj.__name__
attr_error(attr,cname)}
function globals(){
return $B.obj_dict($B.last($B.frames_stack)[3])}
function hasattr(obj,attr){try{getattr(obj,attr);return true}
catch(err){return false}}
function hash(obj){if(arguments.length!=1){throw _b_.TypeError("hash() takes exactly one argument ("+
arguments.length+" given)")}
if(obj===undefined)console.log('hash:obj is undefined',obj)
if(obj.__hashvalue__ !==undefined)return obj.__hashvalue__
if(isinstance(obj,_b_.int))return obj.valueOf()
if(isinstance(obj,bool))return _b_.int(obj)
if(obj.__hash__ !==undefined){return obj.__hashvalue__=obj.__hash__()}
var hashfunc=getattr(obj,'__hash__',_b_.None)
if(hashfunc==_b_.None)return $B.$py_next_hash++
if(hashfunc.$infos===undefined){return obj.__hashvalue__=hashfunc()}
if(hashfunc.$infos.__func__===_b_.object.$dict.__hash__){if(getattr(obj,'__eq__').$infos.__func__!==_b_.object.$dict.__eq__){throw _b_.TypeError("unhashable type: '"+
$B.get_class(obj).__name__+"'")}else{return $B.$py_next_hash++}}else{return obj.__hashvalue__=hashfunc()}}
function _get_builtins_doc(){if($B.builtins_doc===undefined){
var url=$B.brython_path
if(url.charAt(url.length-1)=='/'){url=url.substr(0,url.length-1)}
url +='/builtins_docstrings.js'
var f=_b_.open(url)
eval(f.$content)
$B.builtins_doc=docs}}
function help(obj){if(obj===undefined)obj='help'
if(typeof obj=='string' && _b_[obj]!==undefined){_get_builtins_doc()
var _doc=$B.builtins_doc[obj]
if(_doc !==undefined && _doc !=''){_b_.print(_doc)
return}}
for(var i=0;i<builtin_names.length;i++){if(obj===_b_[builtin_names[i]]){_get_builtins_doc()
_b_.print(_doc=$B.builtins_doc[builtin_names[i]])}}
if(typeof obj=='string'){$B.$import("pydoc");
var pydoc=$B.imported["pydoc"]
getattr(getattr(pydoc,"help"),"__call__")(obj)
return}
try{return getattr(obj,'__doc__')}
catch(err){console.log('help err '+err);return ''}}
function hex(x){return $builtin_base_convert_helper(x,16)}
function id(obj){if(isinstance(obj,[_b_.str,_b_.int,_b_.float])){return getattr(_b_.str(obj),'__hash__')()}else if(obj.$id!==undefined){return obj.$id}
else{return obj.$id=$B.UUID()}}
function __import__(mod_name,globals,locals,fromlist,level){
var $=$B.args('__import__',5,{name:null,globals:null,locals:null,fromlist:null,level:null},['name','globals','locals','fromlist','level'],arguments,{globals:None,locals:None,fromlist:_b_.tuple(),level:0},null,null)
return $B.$__import__($.name,$.globals,$.locals,$.fromlist);}
function input(src){var stdin=($B.imported.sys && $B.imported.sys.stdin ||$B.stdin);
if(stdin.__original__){return prompt(src);}
var val=_b_.getattr(stdin,'readline')();
val=val.split('\n')[0];
if(stdin.len===stdin.pos){_b_.getattr(stdin,'close')();}
return val;}
function isinstance(obj,arg){if(obj===null)return arg===None
if(obj===undefined)return false
if(arg.constructor===Array){for(var i=0;i<arg.length;i++){if(isinstance(obj,arg[i]))return true}
return false}
if(arg===_b_.int &&(obj===True ||obj===False)){return True}
var klass=$B.get_class(obj)
if(klass===undefined){switch(arg){case _b_.int:
return((typeof obj)=="number"||obj.constructor===Number)&&(obj.valueOf()%1===0)
case _b_.float:
return((typeof obj=="number" && obj.valueOf()%1!==0))||
(klass===_b_.float.$dict)
case _b_.str:
return(typeof obj=="string"||klass===_b_.str.$dict)
case _b_.list:
return(obj.constructor===Array)
default:
return false}}
if(arg.$dict===undefined){return false}
if(klass==$B.$factory){klass=obj.$dict.__class__}
for(var i=0;i<klass.__mro__.length;i++){var kl=klass.__mro__[i]
if(kl===arg.$dict){return true}
else if(arg===_b_.str && 
kl===$B.$StringSubclassFactory.$dict){return true}
else if(arg===_b_.list && 
kl===$B.$ListSubclassFactory.$dict){return true}}
var hook=getattr(arg,'__instancecheck__',null)
if(hook!==null){return hook(obj)}
return false}
function issubclass(klass,classinfo){if(arguments.length!==2){throw _b_.TypeError("issubclass expected 2 arguments, got "+arguments.length)}
if(!klass.__class__ ||klass.__class__!==$B.$factory){throw _b_.TypeError("issubclass() arg 1 must be a class")}
if(isinstance(classinfo,_b_.tuple)){for(var i=0;i<classinfo.length;i++){if(issubclass(klass,classinfo[i]))return true}
return false}
if(classinfo.__class__.is_class){if(klass.$dict.__mro__.indexOf(classinfo.$dict)>-1){return true}}
var hook=getattr(classinfo,'__subclasscheck__',null)
if(hook!==null){return hook(klass)}
return false}
var iterator_class=$B.make_class({name:'iterator',init:function(self,getitem,len){self.getitem=getitem
self.len=len
self.counter=-1}})
iterator_class.$dict.__next__=function(self){self.counter++
if(self.len!==null && self.counter==self.len){throw _b_.StopIteration('')}
try{return self.getitem(self.counter)}
catch(err){throw _b_.StopIteration('')}}
function iter(obj){try{var _iter=getattr(obj,'__iter__')}
catch(err){var gi=getattr(obj,'__getitem__',null),ln=getattr(obj,'__len__',null)
if(gi!==null){if(ln!==null){var len=getattr(ln,'__call__')()
return iterator_class(gi,len)}else{return iterator_class(gi,null)}}
throw _b_.TypeError("'"+$B.get_class(obj).__name__+"' object is not iterable")}
var res=_iter()
try{getattr(res,'__next__')}
catch(err){if(isinstance(err,_b_.AttributeError)){throw _b_.TypeError(
"iter() returned non-iterator of type '"+
$B.get_class(res).__name__+"'")}}
return res}
function len(obj){try{return getattr(obj,'__len__')()}
catch(err){throw _b_.TypeError("object of type '"+$B.get_class(obj).__name__+
"' has no len()")}}
function locals(){
var locals_obj=$B.last($B.frames_stack)[1]
return $B.obj_dict(locals_obj)}
var $MapDict={__class__:$B.$type,__name__:'map'}
$MapDict.__mro__=[$MapDict,$ObjectDict]
$MapDict.__iter__=function(self){return self}
function map(){var func=getattr(arguments[0],'__call__')
var iter_args=[],pos=0
for(var i=1;i<arguments.length;i++){iter_args[pos++]=iter(arguments[i])}
var __next__=function(){var args=[],pos=0
for(var i=0;i<iter_args.length;i++){args[pos++]=next(iter_args[i])}
return func.apply(null,args)}
var obj={__class__:$MapDict,__repr__:function(){return "<map object>"},__str__:function(){return "<map object>"},__next__: __next__}
return obj}
function $extreme(args,op){
var $op_name='min'
if(op==='__gt__')$op_name="max"
if(args.length==0){throw _b_.TypeError($op_name+" expected 1 arguments, got 0")}
var last_arg=args[args.length-1]
var nb_args=args.length
var has_kw_args=false
var has_default=false
var func=false
if(last_arg.$nat=='kw'){nb_args--
last_arg=last_arg.kw
for(var attr in last_arg){switch(attr){case 'key':
var func=last_arg[attr]
has_key=true
break
case '$$default': 
var default_value=last_arg[attr]
has_default=true
break
default:
throw _b_.TypeError("'"+attr+"' is an invalid keyword argument for this function")
break}}}
if(!func){func=function(x){return x}}
if(nb_args==0){throw _b_.TypeError($op_name+" expected 1 arguments, got 0")}else if(nb_args==1){
var $iter=iter(args[0]),res=null
while(true){try{var x=next($iter)
if(res===null ||bool(getattr(func(x),op)(func(res)))){res=x}}catch(err){if(err.__name__=="StopIteration"){if(res===null){if(has_default){return default_value}
else{throw _b_.ValueError($op_name+"() arg is an empty sequence")}}else{return res}}
throw err}}}else{if(has_default){throw _b_.TypeError("Cannot specify a default for "+$op_name+"() with multiple positional arguments")}
var res=null
for(var i=0;i<nb_args;i++){var x=args[i]
if(res===null ||bool(getattr(func(x),op)(func(res)))){res=x}}
return res}}
function max(){var args=[],pos=0
for(var i=0;i<arguments.length;i++){args[pos++]=arguments[i]}
return $extreme(args,'__gt__')}
function memoryview(obj){throw NotImplementedError('memoryview is not implemented')}
function min(){var args=[],pos=0
for(var i=0;i<arguments.length;i++){args[pos++]=arguments[i]}
return $extreme(args,'__lt__')}
function next(obj){var ga=getattr(obj,'__next__')
if(ga!==undefined)return ga()
throw _b_.TypeError("'"+$B.get_class(obj).__name__+
"' object is not an iterator")}
function _NotImplemented(){return{__class__:_NotImplemented.$dict}}
_NotImplemented.__class__=$B.$factory
_NotImplemented.$dict={$factory: _NotImplemented,__class__: $B.$type,__name__: 'NotImplementedType'}
_NotImplemented.$dict.__mro__=[_NotImplemented.$dict,$ObjectDict]
var NotImplemented={__class__ : _NotImplemented.$dict,__str__: function(){return 'NotImplemented'}}
function $not(obj){return !bool(obj)}
function oct(x){return $builtin_base_convert_helper(x,8)}
function ord(c){
switch($B.get_class(c)){case _b_.str.$dict:
if(c.length==1)return c.charCodeAt(0)
throw _b_.TypeError('ord() expected a character, but string of length ' + 
c.length + ' found')
case _b_.bytes.$dict:
case _b_.bytearray.$dict:
if(c.source.length==1)return c.source[0]
throw _b_.TypeError('ord() expected a character, but string of length ' + 
c.source.length + ' found')
default:
throw _b_.TypeError('ord() expected a character, but ' + 
$B.get_class(c).__name__ + ' was found')}}
function pow(){var $ns=$B.args('pow',3,{x:null,y:null,z:null},['x','y','z'],arguments,{z:null},null,null)
var x=$ns['x'],y=$ns['y'],z=$ns['z']
var res=getattr(x,'__pow__')(y)
if(z===null){return res}
else{if(!isinstance(x,_b_.int)||!isinstance(y,_b_.int)){throw _b_.TypeError("pow() 3rd argument not allowed unless "+
"all arguments are integers")}
return getattr(res,'__mod__')(z)}}
function $print(){var $ns=$B.args('print',0,{},[],arguments,{},'args','kw')
var ks=$ns['kw'].$string_dict
var end=ks['end']===undefined ? '\n' : ks['end'],sep=ks['sep']===undefined ? ' ' : ks['sep'],file=ks['file']===undefined ? $B.stdout : ks['file'],args=$ns['args']
getattr(file,'write')(args.map(_b_.str).join(sep)+end)
return None}
$print.__name__='print'
$print.is_func=true
var $PropertyDict={__class__ : $B.$type,__name__ : 'property',}
$PropertyDict.__mro__=[$PropertyDict,$ObjectDict]
$B.$PropertyDict=$PropertyDict
function property(fget,fset,fdel,doc){var p={__class__ : $PropertyDict,__doc__ : doc ||"",$type:fget.$type,fget:fget,fset:fset,fdel:fdel,toString:function(){return '<property>'}}
p.__get__=function(self,obj,objtype){if(obj===undefined)return self
if(self.fget===undefined)throw _b_.AttributeError("unreadable attribute")
return getattr(self.fget,'__call__')(obj)}
if(fset!==undefined){p.__set__=function(self,obj,value){if(self.fset===undefined)throw _b_.AttributeError("can't set attribute")
getattr(self.fset,'__call__')(obj,value)}}
p.__delete__=fdel;
p.getter=function(fget){return property(fget,p.fset,p.fdel,p.__doc__)}
p.setter=function(fset){return property(p.fget,fset,p.fdel,p.__doc__)}
p.deleter=function(fdel){return property(p.fget,p.fset,fdel,p.__doc__)}
return p}
property.__class__=$B.$factory
property.$dict=$PropertyDict
$PropertyDict.$factory=property
function repr(obj){if(obj.__class__===$B.$factory){
var func=$B.$type.__getattribute__(obj.$dict.__class__,'__repr__')
return func(obj)}
var func=getattr(obj,'__repr__')
if(func!==undefined){return func()}
throw _b_.AttributeError("object has no attribute __repr__")}
var $ReversedDict={__class__:$B.$type,__name__:'reversed'}
$ReversedDict.__mro__=[$ReversedDict,$ObjectDict]
$ReversedDict.__iter__=function(self){return self}
$ReversedDict.__next__=function(self){self.$counter--
if(self.$counter<0)throw _b_.StopIteration('')
return self.getter(self.$counter)}
function reversed(seq){
try{return getattr(seq,'__reversed__')()}
catch(err){if(err.__name__!='AttributeError'){throw err}}
try{var res={__class__:$ReversedDict,$counter : getattr(seq,'__len__')(),getter:getattr(seq,'__getitem__')}
return res}catch(err){throw _b_.TypeError("argument to reversed() must be a sequence")}}
reversed.__class__=$B.$factory
reversed.$dict=$ReversedDict
$ReversedDict.$factory=reversed
function round(arg,n){if(!isinstance(arg,[_b_.int,_b_.float])){throw _b_.TypeError("type "+arg.__class__+" doesn't define __round__ method")}
if(isinstance(arg,_b_.float)&&(arg.value===Infinity ||arg.value===-Infinity)){throw _b_.OverflowError("cannot convert float infinity to integer")}
if(n===undefined)return _b_.int(Math.round(arg))
if(!isinstance(n,_b_.int)){throw _b_.TypeError(
"'"+n.__class__+"' object cannot be interpreted as an integer")}
var mult=Math.pow(10,n)
return _b_.int.$dict.__truediv__(Number(Math.round(arg.valueOf()*mult)),mult)}
function setattr(obj,attr,value){if(!isinstance(attr,_b_.str)){throw _b_.TypeError("setattr(): attribute name must be string")}
switch(attr){case 'alert':
case 'case':
case 'catch':
case 'constructor':
case 'Date':
case 'delete':
case 'default':
case 'document':
case 'Error':
case 'history':
case 'function':
case 'location':
case 'Math':
case 'new':
case 'Number':
case 'RegExp':
case 'this':
case 'throw':
case 'var':
case 'super':
case 'window':
attr='$$'+attr
break
case '__class__':
obj.__class__=value.$dict;return None
break}
if(obj.__class__===$B.$factory){
if(obj.$dict.$methods && typeof value=='function' 
&& value.__class__!==$B.$factory){
obj.$dict.$methods[attr]=$B.make_method(attr,obj.$dict,value,value)
return None}else{obj.$dict[attr]=value;return None}}
var res=obj[attr],klass=$B.get_class(obj)
if(res===undefined && klass){var mro=klass.__mro__,_len=mro.length
for(var i=0;i<_len;i++){res=mro[i][attr]
if(res!==undefined)break}}
if(res!==undefined){
if(res.__set__!==undefined){res.__set__(res,obj,value);return None}
var __set__=getattr(res,'__set__',null)
if(__set__ &&(typeof __set__=='function')){__set__.apply(res,[obj,value]);return None}}
if(klass && klass.$slots && klass.$slots[attr]===undefined){throw _b_.AttributeError("'"+klass.__name__+"' object has no attribute'"+
attr+"'")}
var setattr=false
if(klass!==undefined){for(var i=0,_len=klass.__mro__.length;i<_len;i++){setattr=klass.__mro__[i].__setattr__
if(setattr){break}}}
if(!setattr){obj[attr]=value}else{setattr(obj,attr,value)}
return None}
function sorted(){var $=$B.args('sorted',1,{iterable:null},['iterable'],arguments,{},null,'kw')
var _list=_b_.list(iter($.iterable)),args=[_list]
for(var i=1;i<arguments.length;i++){args.push(arguments[i])}
_b_.list.$dict.sort.apply(null,args)
return _list}
var $StaticmethodDict={__class__:$B.$type,__name__:'staticmethod'}
$StaticmethodDict.__mro__=[$StaticmethodDict,$ObjectDict]
function staticmethod(func){func.$type='staticmethod'
return func}
staticmethod.__class__=$B.$factory
staticmethod.$dict=$StaticmethodDict
$StaticmethodDict.$factory=staticmethod
function sum(iterable,start){if(start===undefined){start=0}else{
if(typeof start==='str'){throw _b_.TypeError("TypeError: sum() can't sum strings [use ''.join(seq) instead]")}
if(_b_.isinstance(start,_b_.bytes)){throw _b_.TypeError("TypeError: sum() can't sum bytes [use b''.join(seq) instead]")}}
var res=start
var iterable=iter(iterable)
while(1){try{var _item=next(iterable)
res=getattr(res,'__add__')(_item)}catch(err){if(err.__name__==='StopIteration'){break}
else{throw err}}}
return res}
var $SuperDict={__class__:$B.$type,__name__:'super'}
$SuperDict.__getattribute__=function(self,attr){if($SuperDict[attr]!==undefined){
return function(){return $SuperDict[attr](self)}}
var mro=self.__thisclass__.$dict.__mro__,res
for(var i=1;i<mro.length;i++){
res=mro[i][attr]
if(res!==undefined){
if(res.__class__===$PropertyDict){return res.__get__(res,self.__self_class__)}
if(self.__self_class__!==None){var _args=[self.__self_class__]
if(attr=='__new__'){_args=[]}
var method=(function(initial_args){return function(){
var local_args=initial_args.slice()
var pos=initial_args.length
for(var i=0;i<arguments.length;i++){local_args[pos++]=arguments[i]}
var x=res.apply(null,local_args)
if(x===undefined)return None
return x}})(_args)
method.__class__={__class__:$B.$type,__name__:'method',__mro__:[$ObjectDict]}
method.__func__=res
method.__self__=self
return method}
return res}}
throw _b_.AttributeError("object 'super' has no attribute '"+attr+"'")}
$SuperDict.__mro__=[$SuperDict,$ObjectDict]
$SuperDict.__repr__=$SuperDict.__str__=function(self){var res="<super: <class '"+self.__thisclass__.$dict.__name__+"'"
if(self.__self_class__!==undefined){res +=', <'+self.__self_class__.__class__.__name__+' object>'}
return res+'>'}
function $$super(_type1,_type2){return{__class__:$SuperDict,__thisclass__:_type1,__self_class__:(_type2 ||None)}}
$$super.$dict=$SuperDict
$$super.__class__=$B.$factory
$SuperDict.$factory=$$super
$$super.$is_func=true
var $Reader={__class__:$B.$type,__name__:'reader'}
$Reader.__enter__=function(self){return self}
$Reader.__exit__=function(self){return false}
$Reader.__iter__=function(self){return iter(self.$lines)}
$Reader.__len__=function(self){return self.lines.length}
$Reader.__mro__=[$Reader,$ObjectDict]
$Reader.close=function(self){self.closed=true}
$Reader.read=function(self,nb){if(self.closed===true)throw _b_.ValueError('I/O operation on closed file')
if(nb===undefined)return self.$content
self.$counter+=nb
if(self.$bin){var res=self.$content.source.slice(self.$counter-nb,self.$counter)
return _b_.bytes(res)}
return self.$content.substr(self.$counter-nb,nb)}
$Reader.readable=function(self){return true}
$Reader.readline=function(self,limit){
self.$lc=self.$lc===undefined ? -1 : self.$lc
if(self.closed===true)throw _b_.ValueError('I/O operation on closed file')
if(self.$lc==self.$lines.length-1){return self.$bin ? _b_.bytes(): ''}
self.$lc++
var res=self.$lines[self.$lc]
self.$counter +=(self.$bin ? res.source.length : res.length)
return res}
$Reader.readlines=function(self,hint){if(self.closed===true)throw _b_.ValueError('I/O operation on closed file')
self.$lc=self.$lc===undefined ? -1 : self.$lc
return self.$lines.slice(self.$lc+1)}
$Reader.seek=function(self,offset,whence){if(self.closed===True)throw _b_.ValueError('I/O operation on closed file')
if(whence===undefined)whence=0
if(whence===0){self.$counter=offset}
else if(whence===1){self.$counter +=offset}
else if(whence===2){self.$counter=self.$content.length+offset}}
$Reader.seekable=function(self){return true}
$Reader.tell=function(self){return self.$counter}
$Reader.writable=function(self){return false}
var $BufferedReader={__class__:$B.$type,__name__:'_io.BufferedReader'}
$BufferedReader.__mro__=[$BufferedReader,$Reader,$ObjectDict]
var $TextIOWrapper={__class__:$B.$type,__name__:'_io.TextIOWrapper'}
$TextIOWrapper.__mro__=[$TextIOWrapper,$Reader,$ObjectDict]
function $url_open(){
var $ns=$B.args('open',3,{file:null,mode:null,encoding:null},['file','mode','encoding'],arguments,{mode:'r',encoding:'utf-8'},'args','kw')
for(var attr in $ns){eval('var '+attr+'=$ns["'+attr+'"]')}
if(args.length>0)var mode=args[0]
if(args.length>1)var encoding=args[1]
var is_binary=mode.search('b')>-1
if(isinstance(file,$B.JSObject))return new $OpenFile(file.js,mode,encoding)
if(isinstance(file,_b_.str)){
if(window.XMLHttpRequest){
var req=new XMLHttpRequest();}else{
var req=new ActiveXObject("Microsoft.XMLHTTP");}
req.onreadystatechange=function(){var status=req.status
if(status===404){$res=_b_.IOError('File '+file+' not found')}else if(status!==200){$res=_b_.IOError('Could not open file '+file+' : status '+status)}else{$res=req.responseText
if(is_binary){$res=_b_.str.$dict.encode($res,'utf-8')}}}
var fake_qs='?foo='+$B.UUID()
req.open('GET',file+fake_qs,false)
if(is_binary){req.overrideMimeType('text/plain; charset=utf-8');}
req.send()
if($res.constructor===Error)throw $res
if(is_binary){var lf=_b_.bytes('\n','ascii'),lines=_b_.bytes.$dict.split($res,lf)
for(var i=0;i<lines.length-1;i++){lines[i].source.push(10)}}else{var lines=$res.split('\n')
for(var i=0;i<lines.length-1;i++){lines[i]+='\n'}}
var res={$content:$res,$counter:0,$lines:lines,$bin:is_binary,closed:False,encoding:encoding,mode:mode,name:file}
res.__class__=is_binary ? $BufferedReader : $TextIOWrapper
return res}}
var $ZipDict={__class__:$B.$type,__name__:'zip'}
var $zip_iterator=$B.$iterator_class('zip_iterator')
$ZipDict.__iter__=function(self){
return self.$iterator=self.$iterator ||
$B.$iterator(self.items,$zip_iterator)}
$ZipDict.__mro__=[$ZipDict,$ObjectDict]
function zip(){var res={__class__:$ZipDict,items:[]}
if(arguments.length==0)return res
var $ns=$B.args('zip',0,{},[],arguments,{},'args','kw')
var _args=$ns['args']
var args=[],pos=0
for(var i=0;i<_args.length;i++){args[pos++]=iter(_args[i])}
var kw=$ns['kw']
var rank=0,items=[]
while(1){var line=[],flag=true,pos=0
for(var i=0;i<args.length;i++){try{line[pos++]=next(args[i])}catch(err){if(err.__name__==='StopIteration'){flag=false;break}
else{throw err}}}
if(!flag)break
items[rank++]=_b_.tuple(line)}
res.items=items
return res}
zip.__class__=$B.$factory
zip.$dict=$ZipDict
$ZipDict.$factory=zip
function no_set_attr(klass,attr){if(klass[attr]!==undefined){throw _b_.AttributeError("'"+klass.__name__+"' object attribute '"+
attr+"' is read-only")}else{throw _b_.AttributeError("'"+klass.__name__+
"' object has no attribute '"+attr+"'")}}
var $BoolDict=$B.$BoolDict={__class__:$B.$type,__dir__:$ObjectDict.__dir__,__name__:'bool',$native:true}
$BoolDict.__mro__=[$BoolDict,$ObjectDict]
bool.__class__=$B.$factory
bool.$dict=$BoolDict
$BoolDict.$factory=bool
$BoolDict.__add__=function(self,other){if(self.valueOf())return other + 1;
return other;}
var True=true
var False=false
$BoolDict.__eq__=function(self,other){if(self.valueOf())return !!other
return !other}
$BoolDict.__ne__=function(self,other){if(self.valueOf())return !other
return !!other}
$BoolDict.__ge__=function(self,other){return _b_.int.$dict.__ge__($BoolDict.__hash__(self),other)}
$BoolDict.__gt__=function(self,other){return _b_.int.$dict.__gt__($BoolDict.__hash__(self),other)}
$BoolDict.__hash__=$BoolDict.__index__=$BoolDict.__int__=function(self){if(self.valueOf())return 1
return 0}
$BoolDict.__le__=function(self,other){return !$BoolDict.__gt__(self,other)}
$BoolDict.__lshift__=function(self,other){return self.valueOf()<< other}
$BoolDict.__lt__=function(self,other){return !$BoolDict.__ge__(self,other)}
$BoolDict.__mul__=function(self,other){if(self.valueOf())return other
return 0;}
$BoolDict.__neg__=function(self){return -$B.int_or_bool(self)}
$BoolDict.__pos__=$B.int_or_bool
$BoolDict.__repr__=$BoolDict.__str__=function(self){if(self.valueOf())return "True"
return "False"}
$BoolDict.__setattr__=function(self,attr){return no_set_attr($BoolDict,attr)}
$BoolDict.__sub__=function(self,other){if(self.valueOf())return 1-other;
return -other;}
$BoolDict.__xor__=function(self,other){return self.valueOf()!=other.valueOf()}
var $EllipsisDict={__class__:$B.$type,__name__:'Ellipsis',}
$EllipsisDict.__mro__=[$ObjectDict]
$EllipsisDict.$factory=$EllipsisDict
var Ellipsis={__bool__ : function(){return True},__class__ : $EllipsisDict,__repr__ : function(){return 'Ellipsis'},__str__ : function(){return 'Ellipsis'},toString : function(){return 'Ellipsis'}}
for(var $key in $B.$comps){
switch($B.$comps[$key]){case 'ge':
case 'gt':
case 'le':
case 'lt':
Ellipsis['__'+$B.$comps[$key]+'__']=(function(k){return function(other){throw _b_.TypeError("unorderable types: ellipsis() "+k+" "+
$B.get_class(other).__name__)}})($key)}}
for(var $func in Ellipsis){if(typeof Ellipsis[$func]==='function'){Ellipsis[$func].__str__=(function(f){return function(){return "<method-wrapper "+f+" of Ellipsis object>"}})($func)}}
var $NoneDict={__class__:$B.$type,__name__:'NoneType'}
$NoneDict.__mro__=[$NoneDict,$ObjectDict]
$NoneDict.__setattr__=function(self,attr){return no_set_attr($NoneDict,attr)}
var None={__bool__ : function(){return False},__class__ : $NoneDict,__hash__ : function(){return 0},__repr__ : function(){return 'None'},__str__ : function(){return 'None'},toString : function(){return 'None'}}
$NoneDict.$factory=function(){return None}
$NoneDict.$factory.__class__=$B.$factory
$NoneDict.$factory.$dict=$NoneDict
for(var $op in $B.$comps){
var key=$B.$comps[$op]
switch(key){case 'ge':
case 'gt':
case 'le':
case 'lt':
$NoneDict['__'+key+'__']=(function(op){return function(other){throw _b_.TypeError("unorderable types: NoneType() "+op+" "+
$B.get_class(other).__name__+"()")}})($op)}}
for(var $func in None){if(typeof None[$func]==='function'){None[$func].__str__=(function(f){return function(){return "<method-wrapper "+f+" of NoneType object>"}})($func)}}
var $FunctionCodeDict={__class__:$B.$type,__name__:'function code'}
$FunctionCodeDict.__mro__=[$FunctionCodeDict,$ObjectDict]
$FunctionCodeDict.$factory={__class__:$B.$factory,$dict:$FunctionCodeDict}
var $FunctionGlobalsDict={__class:$B.$type,__name__:'function globals'}
$FunctionGlobalsDict.__mro__=[$FunctionGlobalsDict,$ObjectDict]
$FunctionGlobalsDict.$factory={__class__:$B.$factory,$dict:$FunctionGlobalsDict}
var $FunctionDict=$B.$FunctionDict={__class__:$B.$type,__code__:{__class__:$FunctionCodeDict,__name__:'function code'},__globals__:{__class__:$FunctionGlobalsDict,__name__:'function globals'},__name__:'function'}
$FunctionDict.__getattribute__=function(self,attr){
if(self.$infos && self.$infos[attr]!==undefined){if(attr=='__code__'){var res={__class__:$B.$CodeDict}
for(var attr in self.$infos.__code__){res[attr]=self.$infos.__code__[attr]}
return res}else if(attr=='__annotations__'){
return $B.obj_dict(self.$infos[attr])}else{return self.$infos[attr]}}else{return _b_.object.$dict.__getattribute__(self,attr)}}
$FunctionDict.__repr__=$FunctionDict.__str__=function(self){return '<function '+self.$infos.__name__+'>'}
$FunctionDict.__mro__=[$FunctionDict,$ObjectDict]
var $Function=function(){}
$Function.__class__=$B.$factory
$FunctionDict.$factory=$Function
$Function.$dict=$FunctionDict
_b_.__BRYTHON__=__BRYTHON__
var builtin_funcs=['abs','all','any','ascii','bin','bool','bytearray','bytes','callable','chr','classmethod','compile','complex','delattr','dict','dir','divmod','enumerate','eval','exec','exit','filter','float','format','frozenset','getattr','globals','hasattr','hash','help','hex','id','input','int','isinstance','issubclass','iter','len','list','locals','map','max','memoryview','min','next','object','oct','open','ord','pow','print','property','quit','range','repr','reversed','round','set','setattr','slice','sorted','staticmethod','str','sum','$$super','tuple','type','vars','zip']
for(var i=0;i<builtin_funcs.length;i++){var name=builtin_funcs[i]
if(name=='open'){name1='$url_open'}
if(name=='super'){name='$$super'}
if(name=='eval'){name='$eval'}
$B.builtin_funcs[name]=true}
$B.builtin_funcs['$eval']=true
var other_builtins=['Ellipsis','False','None','True','__debug__','__import__','copyright','credits','license','NotImplemented','type']
var builtin_names=builtin_funcs.concat(other_builtins)
for(var i=0;i<builtin_names.length;i++){var name=builtin_names[i]
var orig_name=name
var name1=name
if(name=='open'){name1='$url_open'}
if(name=='super'){name='$$super'}
if(name=='eval'){name=name1='$eval'}
if(name=='print'){name1='$print'}
$B.bound['__builtins__'][name]=true
try{_b_[name]=eval(name1)
if($B.builtin_funcs[name]!==undefined){
if(_b_[name].__repr__===undefined){
_b_[name].__repr__=_b_[name].__str__=(function(x){return function(){return '<built-in function '+x+'>'}})(orig_name)}
_b_[name].__module__='builtins'
_b_[name].__name__=name
_b_[name].__defaults__=_b_[name].__defaults__ ||[]
_b_[name].__kwdefaults__=_b_[name].__kwdefaults__ ||{}
_b_[name].__annotations__=_b_[name].__annotations__ ||{}}
_b_[name].__doc__=_b_[name].__doc__ ||''}
catch(err){}}
_b_['$eval']=$eval
_b_['open']=$url_open
_b_['print']=$print
_b_['$$super']=$$super})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $TracebackDict={__class__:$B.$type,__name__:'traceback'}
$TracebackDict.__getattribute__=function(self,attr){if(self.stack.length==0){alert('no stack',attr)}
var last_frame=$B.last(self.stack)
if(last_frame==undefined){alert('last frame undef ');console.log(self.stack,Object.keys(self.stack))}
var line_info=last_frame[1].$line_info
switch(attr){case 'tb_frame':
return frame(self.stack)
case 'tb_lineno':
if(line_info===undefined){return -1}
else{return parseInt(line_info.split(',')[0])}
case 'tb_lasti':
if(line_info===undefined){return '<unknown>'}
else{var info=line_info.split(',')
var src=$B.$py_src[info[1]]
if(src!==undefined){return src.split('\n')[parseInt(info[0]-1)].trim()}else{return '<unknown>'}}
case 'tb_next':
if(self.stack.length==1){return None}
else{return traceback(self.stack.slice(0,self.stack.length-1))}
default:
return $TracebackDict[attr]}}
$TracebackDict.__mro__=[$TracebackDict,_b_.object.$dict]
$TracebackDict.__str__=function(self){return '<traceback object>'}
function traceback(stack){return{__class__ : $TracebackDict,stack : stack}}
traceback.__class__=$B.$factory
traceback.$dict=$TracebackDict
$TracebackDict.$factory=traceback
var $FrameDict={__class__:$B.$type,__name__:'frame'}
$FrameDict.__getattr__=function(self,attr){
if(attr=='f_back'){if(self.$pos>0){return frame(self.$stack,self.$pos-1)}}}
$FrameDict.__mro__=[$FrameDict,_b_.object.$dict]
function to_dict(obj){var res=_b_.dict()
var setitem=_b_.dict.$dict.__setitem__
for(var attr in obj){if(attr.charAt(0)=='$'){continue}
setitem(res,attr,obj[attr])}
return res}
function frame(stack,pos){var mod_name=stack[2]
var fs=stack
var res={__class__:$FrameDict,f_builtins :{},
$stack: stack,}
if(pos===undefined){pos=fs.length-1}
res.$pos=pos
if(fs.length){var _frame=fs[pos]
var locals_id=_frame[0]
try{res.f_locals=$B.obj_dict(_frame[1])}catch(err){console.log('err '+err)
throw err}
res.f_globals=$B.obj_dict(_frame[3])
if($B.debug>0){if(_frame[1].$line_info===undefined){res.f_lineno=-1}
else{res.f_lineno=parseInt(_frame[1].$line_info.split(',')[0])}}else{res.f_lineno=-1}
res.f_code={__class__:$B.$CodeDict,co_code:None,
co_name: locals_id,
co_filename: _frame[3].__name__ }
if(res.f_code.co_filename===undefined){console.log(_frame[0],_frame[1],_frame[2],_frame[3]);alert('no cofilename')}}
return res}
frame.__class__=$B.$factory
frame.$dict=$FrameDict
$FrameDict.$factory=frame
$B._frame=frame
var $BaseExceptionDict={__class__:$B.$type,__bases__ :[_b_.object],__module__:'builtins',__name__:'BaseException'}
$BaseExceptionDict.__init__=function(self){self.args=_b_.tuple([arguments[1]])}
$BaseExceptionDict.__repr__=function(self){return self.__class__.__name__+repr(self.args)}
$BaseExceptionDict.__str__=function(self){return _b_.str(self.args[0])}
$BaseExceptionDict.__mro__=[$BaseExceptionDict,_b_.object.$dict]
$BaseExceptionDict.__new__=function(cls){var err=_b_.BaseException()
err.__name__=cls.$dict.__name__
err.__class__=cls.$dict
return err}
$BaseExceptionDict.__getattr__=function(self,attr){if(attr=='info'){var name=self.__class__.__name__
if(name=='SyntaxError' ||name=='IndentationError'){return 'File "'+self.args[1]+'", line '+self.args[2]+'\n    '+
self.args[4]}
var info='Traceback (most recent call last):'
if(self.$js_exc!==undefined){for(var attr in self.$js_exc){if(attr==='message')continue
try{info +='\n    '+attr+' : '+self.$js_exc[attr]}
catch(_err){}}
info+='\n'}
for(var i=0;i<self.$stack.length;i++){var frame=self.$stack[i]
if(frame[1].$line_info===undefined){continue}
var line_info=frame[1].$line_info.split(',')
var lines=$B.$py_src[line_info[1]].split('\n')
info +='\n  module '+line_info[1]+' line '+line_info[0]
var line=lines[parseInt(line_info[0])-1]
if(line)line=line.replace(/^[ ]+/g,'')
if(line===undefined){console.log('line undef...',line_info,$B.$py_src[line_info[1]])}
info +='\n    '+line}
return info}else if(attr=='traceback'){
return traceback(self.$stack)}else{throw AttributeError(self.__class__.__name__+
"has no attribute '"+attr+"'")}}
$BaseExceptionDict.with_traceback=function(self,tb){self.traceback=tb
return self}
$B.set_func_names($BaseExceptionDict)
var BaseException=function(){var err=Error()
err.__name__='BaseException'
err.args=_b_.tuple(Array.prototype.slice.call(arguments))
err.$message=arguments[0]
err.__class__=$BaseExceptionDict
err.$py_error=true
err.$stack=$B.frames_stack.slice()
$B.current_exception=err
return err}
BaseException.__class__=$B.$factory
BaseException.$dict=$BaseExceptionDict
$BaseExceptionDict.$factory=BaseException
_b_.BaseException=BaseException
$B.exception=function(js_exc){
if(!js_exc.$py_error){
if($B.debug>0 && js_exc.info===undefined){var _frame=$B.last($B.frames_stack)
if(_frame && _frame[1].$line_info!==undefined){var line_info=_frame[1].$line_info.split(',')
var mod_name=line_info[1]
var module=$B.modules[mod_name]
if(module){if(module.caller!==undefined){
var mod_name=line_info[1]}
var lib_module=mod_name
var line_num=parseInt(line_info[0])
if($B.$py_src[mod_name]===undefined){console.log('pas de py_src pour '+mod_name)}
var lines=$B.$py_src[mod_name].split('\n')
js_exc.message +="\n  module '"+lib_module+"' line "+line_num
js_exc.message +='\n'+lines[line_num-1]
js_exc.info_in_msg=true}}else{console.log('error ',js_exc)}}
var exc=Error()
exc.__name__='Internal Javascript error: '+(js_exc.__name__ ||js_exc.name)
exc.__class__=_b_.Exception.$dict
exc.$js_exc=js_exc
if(js_exc.name=='ReferenceError'){exc.__name__='NameError'
exc.__class__=_b_.NameError.$dict
js_exc.message=js_exc.message.replace('$$','')}else if(js_exc.name=="InternalError"){exc.__name__='RuntimeError'
exc.__class__=_b_.RuntimeError.$dict}
exc.$message=js_exc.message ||'<'+js_exc+'>'
exc.args=_b_.tuple([exc.$message])
exc.info=''
exc.$py_error=true
exc.$stack=$B.frames_stack.slice()}else{var exc=js_exc}
$B.current_exception=exc
return exc}
$B.is_exc=function(exc,exc_list){
if(exc.__class__===undefined)exc=$B.exception(exc)
var exc_class=exc.__class__.$factory
for(var i=0;i<exc_list.length;i++){if(issubclass(exc_class,exc_list[i]))return true}
return false}
$B.clear_exc=function(){$B.current_exception=null}
function $make_exc(names,parent){
var _str=[],pos=0
for(var i=0;i<names.length;i++){var name=names[i]
$B.bound['__builtins__'][name]=true
var $exc=(BaseException+'').replace(/BaseException/g,name)
_str[pos++]='var $'+name+'Dict={__class__:$B.$type,__name__:"'+name+'"}'
_str[pos++]='$'+name+'Dict.__bases__ = [parent]'
_str[pos++]='$'+name+'Dict.__module__ = "builtins"'
_str[pos++]='$'+name+'Dict.__mro__=[$'+name+'Dict].concat(parent.$dict.__mro__)'
_str[pos++]='_b_.'+name+'='+$exc
_str[pos++]='_b_.'+name+'.__class__=$B.$factory'
_str[pos++]='$'+name+'Dict.$factory=_b_.'+name
_str[pos++]='_b_.'+name+'.$dict=$'+name+'Dict'}
eval(_str.join(';'))}
$make_exc(['SystemExit','KeyboardInterrupt','GeneratorExit','Exception'],BaseException)
$make_exc(['StopIteration','ArithmeticError','AssertionError','AttributeError','BufferError','EOFError','ImportError','LookupError','MemoryError','NameError','OSError','ReferenceError','RuntimeError','SyntaxError','SystemError','TypeError','ValueError','Warning'],_b_.Exception)
$make_exc(['FloatingPointError','OverflowError','ZeroDivisionError'],_b_.ArithmeticError)
$make_exc(['IndexError','KeyError'],_b_.LookupError)
$make_exc(['UnboundLocalError'],_b_.NameError)
$make_exc(['BlockingIOError','ChildProcessError','ConnectionError','FileExistsError','FileNotFoundError','InterruptedError','IsADirectoryError','NotADirectoryError','PermissionError','ProcessLookupError','TimeoutError'],_b_.OSError)
$make_exc(['BrokenPipeError','ConnectionAbortedError','ConnectionRefusedError','ConnectionResetError'],_b_.ConnectionError)
$make_exc(['NotImplementedError'],_b_.RuntimeError)
$make_exc(['IndentationError'],_b_.SyntaxError)
$make_exc(['TabError'],_b_.IndentationError)
$make_exc(['UnicodeError'],_b_.ValueError)
$make_exc(['UnicodeDecodeError','UnicodeEncodeError','UnicodeTranslateError'],_b_.UnicodeError)
$make_exc(['DeprecationWarning','PendingDeprecationWarning','RuntimeWarning','SyntaxWarning','UserWarning','FutureWarning','ImportWarning','UnicodeWarning','BytesWarning','ResourceWarning'],_b_.Warning)
$make_exc(['EnvironmentError','IOError','VMSError','WindowsError'],_b_.OSError)
$B.$NameError=function(name){
throw _b_.NameError(name)}
$B.$TypeError=function(msg){throw _b_.TypeError(msg)}})(__BRYTHON__)

;(function($B){var _b_=$B.builtins,None=_b_.None,$RangeDict={__class__:$B.$type,__dir__:_b_.object.$dict.__dir__,__name__:'range',$native:true,descriptors:{start:true,step:true,stop:true}}
$RangeDict.__contains__=function(self,other){if($RangeDict.__len__(self)==0){return false}
try{other=$B.int_or_bool(other)}
catch(err){
try{$RangeDict.index(self,other);return true}
catch(err){return false}}
var sub=$B.sub(other,self.start),fl=$B.floordiv(sub,self.step),res=$B.mul(self.step,fl)
if($B.eq(res,sub)){if($B.gt(self.stop,self.start)){return $B.ge(other,self.start)&& $B.gt(self.stop,other)}else{return $B.ge(self.start,other)&& $B.gt(other,self.stop)}}else{return false}}
$RangeDict.__delattr__=function(self,attr,value){throw _b_.AttributeError('readonly attribute')}
$RangeDict.__eq__=function(self,other){if(_b_.isinstance(other,range)){var len=$RangeDict.__len__(self)
if(!$B.eq(len,$RangeDict.__len__(other))){return false}
if(len==0){return true}
if(!$B.eq(self.start,other.start)){return false}
if(len==1){return true}
return $B.eq(self.step,other.step)}
return false}
function compute_item(r,i){var len=$RangeDict.__len__(r)
if(len==0){return r.start}
else if(i>len){return r.stop}
return $B.add(r.start,$B.mul(r.step,i))}
$RangeDict.__getitem__=function(self,rank){if(_b_.isinstance(rank,_b_.slice)){var norm=_b_.slice.$dict.$conv_for_seq(rank,$RangeDict.__len__(self)),substep=$B.mul(self.step,norm.step),substart=compute_item(self,norm.start),substop=compute_item(self,norm.stop)
return range(substart,substop,substep)}
if(typeof rank !="number"){rank=$B.$GetInt(rank)}
if($B.gt(0,rank)){rank=$B.add(rank,$RangeDict.__len__(self))}
var res=$B.add(self.start,$B.mul(rank,self.step))
if(($B.gt(self.step,0)&&($B.ge(res,self.stop)||$B.gt(self.start,res)))||
($B.gt(0,self.step)&&($B.ge(self.stop,res)||$B.gt(res,self.start)))){throw _b_.IndexError('range object index out of range')}
return res }
$RangeDict.__hash__=function(self){var len=$RangeDict.__len__(self)
if(len==0){return _b_.hash(_b_.tuple([0,None,None]))}
if(len==1){return _b_.hash(_b_.tuple([1,self.start,None]))}
return _b_.hash(_b_.tuple([len,self.start,self.step]))}
$RangeIterator=function(obj){return{__class__:$RangeIterator.$dict,obj: obj}}
$RangeIterator.__class__=$B.$factory
$RangeIterator.$dict={__class__: $B.$type,__name__: 'range_iterator',$factory: $RangeIterator,__iter__: function(self){return self},__next__: function(self){return _b_.next(self.obj)}}
$RangeIterator.$dict.__mro__=[$RangeIterator.$dict,_b_.object.$dict]
$RangeDict.__iter__=function(self){var res={__class__ : $RangeDict,start:self.start,stop:self.stop,step:self.step}
if(self.$safe){res.$counter=self.start-self.step}else{res.$counter=$B.sub(self.start,self.step)}
return $RangeIterator(res)}
$RangeDict.__len__=function(self){var len
if($B.gt(self.step,0)){if($B.ge(self.start,self.stop)){return 0}
var n=$B.sub(self.stop,$B.add(1,self.start)),q=$B.floordiv(n,self.step)
len=$B.add(1,q)}else{if($B.ge(self.stop,self.start)){return 0}
var n=$B.sub(self.start,$B.add(1,self.stop)),q=$B.floordiv(n,$B.mul(-1,self.step))
len=$B.add(1,q)}
if($B.maxsize===undefined){$B.maxsize=$B.LongInt.$dict.__pow__($B.LongInt(2),63)
$B.maxsize=$B.LongInt.$dict.__sub__($B.maxsize,1)}
return len}
$RangeDict.__next__=function(self){if(self.$safe){self.$counter +=self.step
if((self.step>0 && self.$counter >=self.stop)
||(self.step<0 && self.$counter <=self.stop)){throw _b_.StopIteration('')}}else{self.$counter=$B.add(self.$counter,self.step)
if(($B.gt(self.step,0)&& $B.ge(self.$counter,self.stop))
||($B.gt(0,self.step)&& $B.ge(self.stop,self.$counter))){throw _b_.StopIteration('')}}
return self.$counter}
$RangeDict.__mro__=[$RangeDict,_b_.object.$dict]
$RangeDict.__reversed__=function(self){var n=$B.sub($RangeDict.__len__(self),1)
return range($B.add(self.start,$B.mul(n,self.step)),$B.sub(self.start,self.step),$B.mul(-1,self.step))}
$RangeDict.__repr__=$RangeDict.__str__=function(self){var res='range('+_b_.str(self.start)+', '+_b_.str(self.stop)
if(self.step!=1)res +=', '+_b_.str(self.step)
return res+')'}
$RangeDict.__setattr__=function(self,attr,value){throw _b_.AttributeError('readonly attribute')}
$RangeDict.start=function(self){return self.start}
$RangeDict.step=function(self){return self.step},$RangeDict.stop=function(self){return self.stop}
$RangeDict.count=function(self,ob){if(_b_.isinstance(ob,[_b_.int,_b_.float,_b_.bool])){return _b_.int($RangeDict.__contains__(self,ob))}else{var comp=_b_.getattr(ob,'__eq__'),it=$RangeDict.__iter__(self)
_next=$RangeIterator.$dict.__next__,nb=0
while(true){try{if(comp(_next(it))){nb++}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){return nb}
throw err}}}}
$RangeDict.index=function(self,other){var $=$B.args('index',2,{self:null,other:null},['self','other'],arguments,{},null,null),self=$.self,other=$.other
try{other=$B.int_or_bool(other)}catch(err){var comp=_b_.getattr(other,'__eq__'),it=$RangeDict.__iter__(self),_next=$RangeIterator.$dict.__next__,nb=0
while(true){try{if(comp(_next(it))){return nb}
nb++}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){throw _b_.ValueError(_b_.str(other)+' not in range')}
throw err}}}
var sub=$B.sub(other,self.start),fl=$B.floordiv(sub,self.step),res=$B.mul(self.step,fl)
if($B.eq(res,sub)){if(($B.gt(self.stop,self.start)&& $B.ge(other,self.start)
&& $B.gt(self.stop,other))||
($B.ge(self.start,self.stop)&& $B.ge(self.start,other)
&& $B.gt(other,self.stop))){return fl}else{throw _b_.ValueError(_b_.str(other)+' not in range')}}else{throw _b_.ValueError(_b_.str(other)+' not in range')}}
function range(){var $=$B.args('range',3,{start:null,stop:null,step:null},['start','stop','step'],arguments,{stop:null,step:null},null,null),start=$.start,stop=$.stop,step=$.step,safe
if(stop===null && step===null){stop=$B.PyNumber_Index(start)
safe=typeof stop==="number"
return{__class__:$RangeDict,start: 0,stop: stop,step: 1,$is_range: true,$safe: safe}}
if(step===null){step=1}
start=$B.PyNumber_Index(start)
stop=$B.PyNumber_Index(stop)
step=$B.PyNumber_Index(step)
if(step==0){throw _b_.ValueError("range() arg 3 must not be zero")}
safe=(typeof start=='number' && typeof stop=='number' &&
typeof step=='number')
return{__class__: $RangeDict,start: start,stop: stop,step: step,$is_range: true,$safe: safe}}
range.__class__=$B.$factory
range.$dict=$RangeDict
$RangeDict.$factory=range
range.$is_func=true
var $SliceDict={__class__:$B.$type,	__name__:'slice',	$native:true,	descriptors:{start:true,step:true,stop:true}}
$SliceDict.__mro__=[$SliceDict,_b_.object.$dict]
$SliceDict.__repr__=$SliceDict.__str__=function(self){return 'slice('+_b_.str(self.start)+','+
_b_.str(self.stop)+','+_b_.str(self.step)+')'}
$SliceDict.__setattr__=function(self,attr,value){throw _b_.AttributeError('readonly attribute')}
$SliceDict.$conv=function(self,len){
return{start: self.start===_b_.None ? 0 : self.start,stop: self.stop===_b_.None ? len : self.stop,step: self.step===_b_.None ? 1 : self.step}}
$SliceDict.$conv_for_seq=function(self,len){
var step=self.step===None ? 1 : $B.PyNumber_Index(self.step),step_is_neg=$B.gt(0,step),len_1=$B.sub(len,1)
if(step==0){throw Error('ValueError : slice step cannot be zero');}
var start,end;
if(self.start===None){start=step_is_neg ? len_1 : 0;}else{
start=$B.PyNumber_Index(self.start);
if($B.gt(0,start))start=$B.add(start,len);
if($B.gt(0,start))start=step<0 ? -1 : 0
if($B.ge(start,len))start=step<0 ? len_1 : len;}
if(self.stop===None){stop=step_is_neg ? -1 : len;}else{
stop=$B.PyNumber_Index(self.stop);
if($B.gt(0,stop))stop +=len
if($B.gt(0,stop))stop=step<0 ? -1 : 0
if($B.ge(stop,len))stop=step_is_neg ? len_1 : len;}
return{start: start,stop: stop,step: step}}
$SliceDict.start=function(self){return self.start}
$SliceDict.step=function(self){return self.step}
$SliceDict.stop=function(self){return self.stop}
$SliceDict.indices=function(self,length){var len=$B.$GetInt(length)
if(len < 0)_b_.ValueError('length should not be negative')
if(self.step > 0){var _len=_b_.min(len,self.stop)
return _b_.tuple([self.start,_len,self.step])}else if(self.step==_b_.None){var _len=_b_.min(len,self.stop)
var _start=self.start
if(_start==_b_.None)_start=0
return _b_.tuple([_start,_len,1])}
_b_.NotImplementedError("Error! negative step indices not implemented yet")}
function slice(){var $=$B.args('slice',3,{start:null,stop:null,step:null},['start','stop','step'],arguments,{stop:null,step:null},null,null),start,stop,step
if($.stop===null && $.step===null){start=_b_.None
stop=$.start
step=_b_.None}else{start=$.start
stop=$.stop
step=$.step===null ? _b_.None : $.step}
var res={__class__ : $SliceDict,start:start,stop:stop,step:step}
return res}
slice.__class__=$B.$factory
slice.$dict=$SliceDict
$SliceDict.$factory=slice
slice.$is_func=true
_b_.range=range
_b_.slice=slice})(__BRYTHON__)
;(function($B){var _b_=$B.builtins
var $ObjectDict=_b_.object.$dict
var isinstance=_b_.isinstance,getattr=_b_.getattr,None=_b_.None
var from_unicode={},to_unicode={}
var $BytearrayDict={__class__:$B.$type,__name__:'bytearray'}
var mutable_methods=['__delitem__','clear','copy','count','index','pop','remove','reverse','sort']
for(var i=0,_len_i=mutable_methods.length;i < _len_i;i++){var method=mutable_methods[i]
$BytearrayDict[method]=(function(m){return function(self){var args=[self.source],pos=1
for(var i=1,_len_i=arguments.length;i < _len_i;i++)args[pos++]=arguments[i]
return _b_.list.$dict[m].apply(null,args)}})(method)}
var $bytearray_iterator=$B.$iterator_class('bytearray_iterator')
$BytearrayDict.__iter__=function(self){return $B.$iterator(self.source,$bytearray_iterator)}
$BytearrayDict.__mro__=[$BytearrayDict,$ObjectDict]
$BytearrayDict.__repr__=$BytearrayDict.__str__=function(self){return 'bytearray('+$BytesDict.__repr__(self)+")"}
$BytearrayDict.__setitem__=function(self,arg,value){if(isinstance(arg,_b_.int)){if(!isinstance(value,_b_.int)){throw _b_.TypeError('an integer is required')}else if(value>255){throw _b_.ValueError("byte must be in range(0, 256)")}
var pos=arg
if(arg<0)pos=self.source.length+pos
if(pos>=0 && pos<self.source.length){self.source[pos]=value}
else{throw _b_.IndexError('list index out of range')}}else if(isinstance(arg,_b_.slice)){var start=arg.start===None ? 0 : arg.start
var stop=arg.stop===None ? self.source.length : arg.stop
var step=arg.step===None ? 1 : arg.step
if(start<0)start=self.source.length+start
if(stop<0)stop=self.source.length+stop
self.source.splice(start,stop-start)
if(_b_.hasattr(value,'__iter__')){var $temp=_b_.list(value)
for(var i=$temp.length-1;i>=0;i--){if(!isinstance($temp[i],_b_.int)){throw _b_.TypeError('an integer is required')}else if($temp[i]>255){throw ValueError("byte must be in range(0, 256)")}
self.source.splice(start,0,$temp[i])}}else{throw _b_.TypeError("can only assign an iterable")}}else{
throw _b_.TypeError('list indices must be integer, not '+$B.get_class(arg).__name__)}}
$BytearrayDict.append=function(self,b){if(arguments.length!=2){throw _b_.TypeError(
"append takes exactly one argument ("+(arguments.length-1)+" given)")}
if(!isinstance(b,_b_.int))throw _b_.TypeError("an integer is required")
if(b>255)throw ValueError("byte must be in range(0, 256)")
self.source[self.source.length]=b}
$BytearrayDict.insert=function(self,pos,b){if(arguments.length!=3){throw _b_.TypeError(
"insert takes exactly 2 arguments ("+(arguments.length-1)+" given)")}
if(!isinstance(b,_b_.int))throw _b_.TypeError("an integer is required")
if(b>255)throw ValueError("byte must be in range(0, 256)")
_b_.list.$dict.insert(self.source,pos,b)}
function bytearray(source,encoding,errors){var _bytes=bytes(source,encoding,errors)
var obj={__class__:$BytearrayDict}
$BytearrayDict.__init__(obj,source,encoding,errors)
return obj}
bytearray.__class__=$B.$factory
bytearray.$dict=$BytearrayDict
$BytearrayDict.$factory=bytearray
bytearray.__code__={}
bytearray.__code__.co_argcount=1
bytearray.__code__.co_consts=[]
bytearray.__code__.co_varnames=['i']
var $BytesDict={__class__ : $B.$type,__name__ : 'bytes'}
$BytesDict.__add__=function(self,other){if(!isinstance(other,bytes)){throw _b_.TypeError("can't concat bytes to " + _b_.str(other))}
self.source=self.source.concat(other.source)
return self}
var $bytes_iterator=$B.$iterator_class('bytes_iterator')
$BytesDict.__iter__=function(self){return $B.$iterator(self.source,$bytes_iterator)}
$BytesDict.__eq__=function(self,other){return getattr(self.source,'__eq__')(other.source)}
$BytesDict.__ge__=function(self,other){return _b_.list.$dict.__ge__(self.source,other.source)}
$BytesDict.__getitem__=function(self,arg){var i
if(isinstance(arg,_b_.int)){var pos=arg
if(arg<0)pos=self.source.length+pos
if(pos>=0 && pos<self.source.length)return self.source[pos]
throw _b_.IndexError('index out of range')}else if(isinstance(arg,_b_.slice)){var step=arg.step===None ? 1 : arg.step
if(step>0){var start=arg.start===None ? 0 : arg.start
var stop=arg.stop===None ? getattr(self.source,'__len__')(): arg.stop}else{var start=arg.start===None ? 
getattr(self.source,'__len__')()-1 : arg.start
var stop=arg.stop===None ? 0 : arg.stop}
if(start<0)start=self.source.length+start
if(stop<0)stop=self.source.length+stop
var res=[],i=null,pos=0
if(step>0){if(stop<=start)return ''
for(i=start;i<stop;i+=step)res[pos++]=self.source[i]}else{
if(stop>=start)return ''
for(i=start;i>=stop;i+=step)res[pos++]=self.source[i]}
return bytes(res)}else if(isinstance(arg,bool)){return self.source.__getitem__(_b_.int(arg))}}
$BytesDict.__gt__=function(self,other){return _b_.list.$dict.__gt__(self.source,other.source)}
$BytesDict.__hash__=function(self){if(self===undefined){return $BytesDict.__hashvalue__ ||$B.$py_next_hash-- }
var hash=1;
for(var i=0,_len_i=self.length;i < _len_i;i++){hash=(101*hash + self.source[i])& 0xFFFFFFFF}
return hash}
$BytesDict.__init__=function(self,source,encoding,errors){var int_list=[],pos=0
if(source===undefined){}else if(isinstance(source,_b_.int)){var i=source
while(i--)int_list[pos++]=0}else{if(isinstance(source,_b_.str)){if(encoding===undefined)
throw _b_.TypeError("string argument without an encoding")
int_list=encode(source,encoding)}else{
int_list=_b_.list(source)}}
self.source=int_list
self.encoding=encoding
self.errors=errors}
$BytesDict.__le__=function(self,other){return _b_.list.$dict.__le__(self.source,other.source)}
$BytesDict.__len__=function(self){return self.source.length}
$BytesDict.__lt__=function(self,other){return _b_.list.$dict.__lt__(self.source,other.source)}
$BytesDict.__mro__=[$BytesDict,$ObjectDict]
$BytesDict.__mul__=function(){var $=$B.args('__mul__',2,{self:null,other:null},['self','other'],arguments,{},null,null),other=$B.PyNumber_Index($.other),res=bytes()
for(var i=0;i<other;i++){res.source=res.source.concat($.self.source)}
return res}
$BytesDict.__ne__=function(self,other){return !$BytesDict.__eq__(self,other)}
$BytesDict.__repr__=$BytesDict.__str__=function(self){var res="b'"
for(var i=0,_len_i=self.source.length;i < _len_i;i++){var s=self.source[i]
if(s<32 ||s>=128){var hx=s.toString(16)
hx=(hx.length==1 ? '0' : '')+ hx
res +='\\x'+hx}else{res +=String.fromCharCode(s)}}
return res+"'"}
$BytesDict.__reduce_ex__=function(self){return $BytesDict.__repr__(self)}
$BytesDict.decode=function(self,encoding,errors){if(encoding===undefined)encoding='utf-8'
if(errors===undefined)errors='strict'
switch(errors){case 'strict':
case 'ignore':
case 'replace':
case 'surrogateescape':
case 'xmlcharrefreplace':
case 'backslashreplace':
return decode(self.source,encoding,errors)
default:}}
$BytesDict.join=function(){var $ns=$B.args('join',2,{self:null,iterable:null},['self','iterable'],arguments,{}),self=$ns['self'],iterable=$ns['iterable']
var next_func=_b_.getattr(_b_.iter(iterable),'__next__'),res=bytes(),empty=true
while(true){try{var item=next_func()
if(empty){empty=false}
else{res=$BytesDict.__add__(res,self)}
res=$BytesDict.__add__(res,item)}catch(err){if(isinstance(err,_b_.StopIteration)){break}
throw err}}
return res}
$BytesDict.maketrans=function(from,to){var _t=[]
for(var i=0;i < 256;i++)_t[i]=i
for(var i=0,_len_i=from.source.length;i < _len_i;i++){var _ndx=from.source[i]
_t[_ndx]=to.source[i]}
return bytes(_t)}
$BytesDict.split=function(){var $=$B.args('split',2,{self:null,sep:null},['self','sep'],arguments,{},null,null),res=[],start=0,stop=0
var seps=$.sep.source,len=seps.length,src=$.self.source,blen=src.length
while(stop<blen){var match=true
for(var i=0;i<len && match;i++){if(src[stop+i]!=seps[i]){match=false}}
if(match){res.push(bytes(src.slice(start,stop)))
start=stop+len
stop=start}else{stop++}}
if(match ||(stop>start)){res.push(bytes(src.slice(start,stop)))}
return res}
function _strip(self,cars,lr){if(cars===undefined){cars=[],pos=0
var ws='\r\n \t'
for(var i=0,_len_i=ws.length;i < _len_i;i++)cars[pos++]=ws.charCodeAt(i)}else if(isinstance(cars,bytes)){cars=cars.source}else{throw _b_.TypeError("Type str doesn't support the buffer API")}
if(lr=='l'){for(var i=0,_len_i=self.source.length;i < _len_i;i++){if(cars.indexOf(self.source[i])==-1)break}
return bytes(self.source.slice(i))}
for(var i=self.source.length-1;i>=0;i--){if(cars.indexOf(self.source[i])==-1)break}
return bytes(self.source.slice(0,i+1))}
$BytesDict.lstrip=function(self,cars){return _strip(self,cars,'l')}
$BytesDict.rstrip=function(self,cars){return _strip(self,cars,'r')}
$BytesDict.startswith=function(){var $=$B.args('startswith',2,{self: null,start: null},['self','start'],arguments,{},null,null)
if(_b_.isinstance($.start,bytes)){var res=true
for(var i=0;i<$.start.source.length && res;i++){res=$.self.source[i]==$.start.source[i]}
return res}else if(_b_.isinstance($.start,_b_.tuple)){var items=[]
for(var i=0;i<$.start.length;i++){if(_b_.isinstance($.start[i],bytes)){items=items.concat($.start[i].source)}else{throw _b_.TypeError("startswith first arg must be bytes or "+
"a tuple of bytes, not "+$B.get_class($.start).__name__)}}
var start=bytes(items)
return $BytesDict.startswith($.self,start)}else{throw _b_.TypeError("startswith first arg must be bytes or a tuple of bytes, not "+
$B.get_class($.start).__name__)}}
$BytesDict.strip=function(self,cars){var res=$BytesDict.lstrip(self,cars)
return $BytesDict.rstrip(res,cars)}
$BytesDict.translate=function(self,table,_delete){if(_delete===undefined){_delete=[]}
else if(isinstance(_delete,bytes)){_delete=_delete.source}
else{throw _b_.TypeError("Type "+$B.get_class(_delete).__name+" doesn't support the buffer API")}
var res=[],pos=0
if(isinstance(table,bytes)&& table.source.length==256){for(var i=0,_len_i=self.source.length;i < _len_i;i++){if(_delete.indexOf(self.source[i])>-1)continue
res[pos++]=table.source[self.source[i]]}}
return bytes(res)}
$BytesDict.upper=function(self){var _res=[],pos=0
for(var i=0,_len_i=self.source.length;i < _len_i;i++)_res[pos++]=self.source[i].toUpperCase()
return bytes(_res)}
function $UnicodeEncodeError(encoding,code_point,position){throw _b_.UnicodeEncodeError("'"+encoding+
"' codec can't encode character "+_b_.hex(code_point)+
" in position "+position)}
function $UnicodeDecodeError(encoding,position){throw _b_.UnicodeDecodeError("'"+encoding+
"' codec can't decode bytes in position "+position)}
function _hex(int){return int.toString(16)}
function _int(hex){return parseInt(hex,16)}
function normalise(encoding){var enc=encoding.toLowerCase()
if(enc.substr(0,7)=='windows'){enc='cp'+enc.substr(7)}
enc=enc.replace('-','')
enc=enc.replace('-','_')
return enc}
function load_decoder(enc){
if(to_unicode[enc]===undefined){load_encoder(enc)
to_unicode[enc]={}
for(var attr in from_unicode[enc]){to_unicode[enc][from_unicode[enc][attr]]=attr}}}
function load_encoder(enc){
if(from_unicode[enc]===undefined){var mod=_b_.__import__('encodings.'+enc),table=mod[enc].decoding_table
from_unicode[enc]={}
for(var i=0;i<table.length;i++){from_unicode[enc][table.charCodeAt(i)]=i}}}
function decode(b,encoding,errors){var s='',enc=normalise(encoding)
switch(enc){case 'utf-8':
case 'utf8':
var i=0,cp
var _int_800=_int('800'),_int_c2=_int('c2'),_int_1000=_int('1000')
var _int_e0=_int('e0'),_int_e1=_int('e1'),_int_e3=_int('e3')
var _int_a0=_int('a0'),_int_80=_int('80'),_int_2000=_int('2000')
while(i<b.length){if(b[i]<=127){s +=String.fromCharCode(b[i])
i +=1}else if(b[i]<_int_e0){if(i<b.length-1){cp=b[i+1]+ 64*(b[i]-_int_c2)
s +=String.fromCharCode(cp)
i +=2}else{$UnicodeDecodeError(encoding,i)}}else if(b[i]==_int_e0){if(i<b.length-2){var zone=b[i+1]-_int_a0
cp=b[i+2]-_int_80+_int_800+64*zone
s +=String.fromCharCode(cp)
i +=3}else{$UnicodeDecodeError(encoding,i)}}else if(b[i]<_int_e3){if(i<b.length-2){var zone=b[i+1]-_int_80
cp=b[i+2]-_int_80+_int_1000+64*zone
s +=String.fromCharCode(cp)
i +=3}else{$UnicodeDecodeError(encoding,i)}}else{if(i<b.length-2){var zone1=b[i]-_int_e1-1
var zone=b[i+1]-_int_80+64*zone1
cp=b[i+2]-_int_80+_int_2000+64*zone
s +=String.fromCharCode(cp)
i +=3}else{if(errors=='surrogateescape'){s+='\\udc' + _hex(b[i])
i+=1}else{
$UnicodeDecodeError(encoding,i)}}}}
break;
case 'latin1':
case 'iso8859_1':
case 'windows1252':
for(var i=0,_len_i=b.length;i < _len_i;i++)s +=String.fromCharCode(b[i])
break;
case 'ascii':
for(var i=0,_len_i=b.length;i < _len_i;i++){var cp=b[i]
if(cp<=127){s +=String.fromCharCode(cp)}
else{var msg="'ascii' codec can't decode byte 0x"+cp.toString(16)
msg +=" in position "+i+": ordinal not in range(128)"
throw _b_.UnicodeDecodeError(msg)}}
break;
default:
try{load_decoder(enc)}
catch(err){throw _b_.LookupError("unknown encoding: "+ enc)}
for(var i=0,_len_i=b.length;i < _len_i;i++){var u=to_unicode[enc][b[i]]
if(u!==undefined){s+=String.fromCharCode(u)}
else{s +=String.fromCharCode(b[i])}}
break;
throw _b_.LookupError("unknown encoding: "+encoding)}
return s}
function encode(s,encoding){var t=[],pos=0,enc=normalise(encoding)
switch(enc){case 'utf-8':
case 'utf8':
var _int_800=_int('800'),_int_c2=_int('c2'),_int_1000=_int('1000')
var _int_e0=_int('e0'),_int_e1=_int('e1'),_int_a0=_int('a0'),_int_80=_int('80')
var _int_2000=_int('2000'),_int_D000=_int('D000')
for(var i=0,_len_i=s.length;i < _len_i;i++){var cp=s.charCodeAt(i)
if(cp<=127){t[pos++]=cp}else if(cp<_int_800){var zone=Math.floor((cp-128)/64)
t[pos++]=_int_c2+zone
t[pos++]=cp -64*zone}else if(cp<_int_1000){var zone=Math.floor((cp-_int_800)/64)
t[pos++]=_int_e0
t[pos++]=_int_a0+zone
t[pos++]=_int_80 + cp - _int_800 - 64 * zone}else if(cp<_int_2000){var zone=Math.floor((cp-_int_1000)/64)
t[pos++]=_int_e1+Math.floor((cp-_int_1000)/_int_1000)
t[pos++]=_int_80+zone
t[pos++]=_int_80 + cp - _int_1000 -64*zone}else if(cp<_int_D000){var zone=Math.floor((cp-_int_2000)/64)
var zone1=Math.floor((cp-_int_2000)/_int_1000)
t[pos++]=_int_e1+Math.floor((cp-_int_1000)/_int_1000)
t[pos++]=_int_80+zone-zone1*64
t[pos++]=_int_80 + cp - _int_2000 - 64 * zone}}
break;
case 'latin1': 
case 'iso8859_1': 
case 'windows1252': 
for(var i=0,_len_i=s.length;i < _len_i;i++){var cp=s.charCodeAt(i)
if(cp<=255){t[pos++]=cp}
else{$UnicodeEncodeError(encoding,i)}}
break;
case 'ascii':
for(var i=0,_len_i=s.length;i < _len_i;i++){var cp=s.charCodeAt(i)
if(cp<=127){t[pos++]=cp}
else{$UnicodeEncodeError(encoding,i)}}
break;
default:
try{load_encoder(enc)}
catch(err){throw _b_.LookupError("unknown encoding: "+ enc)}
for(var i=0,_len_i=s.length;i < _len_i;i++){var cp=s.charCodeAt(i)
if(from_unicode[enc][cp]===undefined){$UnicodeEncodeError(encoding,cp,i)}
t[pos++]=from_unicode[enc][cp]}
break}
return t}
function bytes(source,encoding,errors){
var obj={__class__:$BytesDict}
$BytesDict.__init__(obj,source,encoding,errors)
return obj}
bytes.__class__=$B.$factory
bytes.$dict=$BytesDict
$BytesDict.$factory=bytes
bytes.__code__={}
bytes.__code__.co_argcount=1
bytes.__code__.co_consts=[]
bytes.__code__.co_varnames=['i']
for(var $attr in $BytesDict){if($BytearrayDict[$attr]===undefined){$BytearrayDict[$attr]=(function(attr){return function(){return $BytesDict[attr].apply(null,arguments)}})($attr)}}
$B.set_func_names($BytesDict)
$B.set_func_names($BytearrayDict)
_b_.bytes=bytes
_b_.bytearray=bytearray})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $ObjectDict=_b_.object.$dict
var $LocationDict={__class__:$B.$type,__name__:'Location'}
$LocationDict.__mro__=[$LocationDict,$ObjectDict]
function $Location(){
var obj={}
for(var x in window.location){if(typeof window.location[x]==='function'){obj[x]=(function(f){return function(){return f.apply(window.location,arguments)}})(window.location[x])}else{obj[x]=window.location[x]}}
if(obj['replace']===undefined){
obj['replace']=function(url){window.location=url}}
obj.__class__=$LocationDict
obj.toString=function(){return window.location.toString()}
obj.__repr__=obj.__str__=obj.toString
return obj}
$LocationDict.$factory=$Location
$Location.$dict=$LocationDict
var $JSConstructorDict={__class__:$B.$type,__name__:'JSConstructor'}
$JSConstructorDict.__call__=function(self){
var args=[null]
for(var i=1,_len_i=arguments.length;i < _len_i;i++){args.push(pyobj2jsobj(arguments[i]))}
var factory=self.func.bind.apply(self.func,args)
var res=new factory()
return $B.$JS2Py(res)}
$JSConstructorDict.__mro__=[$JSConstructorDict,$ObjectDict]
function JSConstructor(obj){
return{
__class__:$JSConstructorDict,func:obj.js_func}}
JSConstructor.__class__=$B.$factory
JSConstructor.$dict=$JSConstructorDict
$JSConstructorDict.$factory=JSConstructor
var jsobj2pyobj=$B.jsobj2pyobj=function(jsobj){switch(jsobj){case true:
case false:
return jsobj}
if(Array.isArray(jsobj))return _b_.list(jsobj)
if(typeof jsobj==='number'){if(jsobj.toString().indexOf('.')==-1)return _b_.int(jsobj)
return _b_.float(jsobj)}
return $B.JSObject(jsobj)}
var pyobj2jsobj=$B.pyobj2jsobj=function(pyobj){
if(pyobj===true ||pyobj===false)return pyobj
if(pyobj===_b_.None)return null
var klass=$B.get_class(pyobj)
if(klass===undefined){
return pyobj;}
if(klass===$JSObjectDict ||klass===$JSConstructorDict){
if(pyobj.js_func!==undefined){return pyobj.js_func}
return pyobj.js}else if(klass.__mro__.indexOf($B.DOMNodeDict)>-1){
return pyobj.elt}else if([_b_.list.$dict,_b_.tuple.$dict].indexOf(klass)>-1){
var res=[]
for(var i=0,_len_i=pyobj.length;i < _len_i;i++){res.push(pyobj2jsobj(pyobj[i]))}
return res}else if(klass===_b_.dict.$dict){
var jsobj={}
var items=_b_.list(_b_.dict.$dict.items(pyobj))
for(var j=0,_len_j=items.length;j < _len_j;j++){jsobj[items[j][0]]=pyobj2jsobj(items[j][1])}
return jsobj}else if(klass===$B.builtins.float.$dict){
return pyobj.valueOf()}else if(klass===$B.$FunctionDict){
return function(){try{var args=[]
for(var i=0;i<arguments.length;i++){if(arguments[i]===undefined){args.push(_b_.None)}
else{args.push(jsobj2pyobj(arguments[i]))}}
return pyobj.apply(null,args)}catch(err){console.log(err)
console.log(_b_.getattr(err,'info'))
console.log(err.__name__+':',err.args[0])
throw err}}}else{
return pyobj}}
var $JSObjectDict={__class__:$B.$type,__name__:'JSObject',toString:function(){return '(JSObject)'}}
$JSObjectDict.__bool__=function(self){return(new Boolean(self.js)).valueOf()}
$JSObjectDict.__delattr__=function(self,attr){_b_.getattr(self,attr)
delete self.js[attr]
return _b_.None}
$JSObjectDict.__dir__=function(self){return Object.keys(self.js)}
$JSObjectDict.__getattribute__=function(self,attr){if(attr.substr(0,2)=='$$')attr=attr.substr(2)
if(self.js===null)return $ObjectDict.__getattribute__(None,attr)
if(attr==='__class__')return $JSObjectDict
if(self.__class__===$JSObjectDict && attr=="$bind" && 
self.js[attr]===undefined &&
self.js['addEventListener']!==undefined){attr='addEventListener'}
var js_attr=self.js[attr]
if(self.js_func && self.js_func[attr]!==undefined){js_attr=self.js_func[attr]}
if(js_attr !==undefined){if(typeof js_attr=='function'){
var res=function(){var args=[],arg
for(var i=0,_len_i=arguments.length;i < _len_i;i++){if(arguments[i].$nat!=undefined){
throw TypeError("A Javascript function can't "+
"take keyword arguments")}else{args.push(pyobj2jsobj(arguments[i]))}}
if(attr==='replace' && self.js===location){location.replace(args[0])
return}
return $B.$JS2Py(js_attr.apply(self.js,args))}
res.__repr__=function(){return '<function '+attr+'>'}
res.__str__=function(){return '<function '+attr+'>'}
return{__class__:$JSObjectDict,js:res,js_func:js_attr}}else{if(Array.isArray(self.js[attr])){return self.js[attr]}
return $B.$JS2Py(self.js[attr])}}else if(self.js===window && attr==='$$location'){
return $Location()}
var res
var mro=self.__class__.__mro__
for(var i=0,_len_i=mro.length;i < _len_i;i++){var v=mro[i][attr]
if(v!==undefined){res=v
break}}
if(res!==undefined){if(typeof res==='function'){
return function(){var args=[self],arg
for(var i=0,_len_i=arguments.length;i < _len_i;i++){arg=arguments[i]
if(arg &&(arg.__class__===$JSObjectDict ||arg.__class__===$JSConstructorDict)){args.push(arg.js)}else{args.push(arg)}}
return res.apply(self,args)}}
return $B.$JS2Py(res)}else{
throw _b_.AttributeError("no attribute "+attr+' for '+self.js)}}
$JSObjectDict.__getitem__=function(self,rank){if(typeof self.js.length=='number' &&
typeof self.js.item=='function'){var rank_to_int=_b_.int(rank)
if(rank_to_int<0){rank_to_int+=self.js.length}
var res=self.js.item(rank_to_int)
if(res===undefined){throw _b_.KeyError(rank)}
return res}
try{return getattr(self.js,'__getitem__')(rank)}
catch(err){if(self.js[rank]!==undefined){return JSObject(self.js[rank])}
throw _b_.KeyError(rank)}}
var $JSObject_iterator=$B.$iterator_class('JS object iterator')
$JSObjectDict.__iter__=function(self){var items=[]
if(window.Symbol && self.js[Symbol.iterator]!==undefined){
if(self.js.length!==undefined && self.js.item!==undefined){for(var i=0;i<self.js.length ;i++){items.push(self.js[i])}}else{for(var item in self.js){if(self.js.hasOwnProperty(item )){items.push(jsobj2pyobj(item))}}}
return $B.$iterator(items,$JSObject_iterator)}else if(self.js.length!==undefined && self.js.item !==undefined){
for(var i=0;i<self.js.length ;i++){items.push(self.js[i])}
return $B.$iterator(items,$JSObject_iterator)}
var _dict=$JSObjectDict.to_dict(self)
return _b_.dict.$dict.__iter__(_dict)}
$JSObjectDict.__len__=function(self){if(typeof self.js.length=='number'){return self.js.length}
try{return getattr(self.js,'__len__')()}
catch(err){throw _b_.AttributeError(self.js+' has no attribute __len__')}}
$JSObjectDict.__mro__=[$JSObjectDict,$ObjectDict]
$JSObjectDict.__repr__=function(self){return "<JSObject wraps "+self.js+">"}
$JSObjectDict.__setattr__=function(self,attr,value){if(isinstance(value,JSObject)){self.js[attr]=value.js}
else{self.js[attr]=value
if(typeof value=='function'){self.js[attr]=function(){var args=[]
for(var i=0,len=arguments.length;i<len;i++){args.push($B.$JS2Py(arguments[i]))}
try{return value.apply(null,args)}
catch(err){err=$B.exception(err)
var info=_b_.getattr(err,'info')
err.toString=function(){return info+'\n'+err.__class__.__name__+
': '+_b_.repr(err.args[0])}
console.log(err+'')
throw err}}}}}
$JSObjectDict.__setitem__=$JSObjectDict.__setattr__
$JSObjectDict.__str__=$JSObjectDict.__repr__
var no_dict={'string':true,'function':true,'number':true,'boolean':true}
$JSObjectDict.bind=function(self,evt,func){return $JSObjectDict.__getattribute__(self,'addEventListener').js(evt,func)}
$JSObjectDict.to_dict=function(self){
var res=_b_.dict()
for(var key in self.js){var value=self.js[key]
if(typeof value=='object' && !Array.isArray(value)){_b_.dict.$dict.__setitem__(res,key,$JSObjectDict.to_dict(JSObject(value)))}else{_b_.dict.$dict.__setitem__(res,key,value)}}
return res}
function JSObject(obj){if(obj===null){return _b_.None}
if(typeof obj=='function'){return{__class__:$JSObjectDict,js:obj}}
var klass=$B.get_class(obj)
if(klass===_b_.float.$dict)return _b_.float(obj)
if(klass!==undefined)return obj
return{__class__:$JSObjectDict,js:obj}}
JSObject.__class__=$B.$factory
JSObject.$dict=$JSObjectDict
$JSObjectDict.$factory=JSObject
$B.JSObject=JSObject
$B.JSConstructor=JSConstructor})(__BRYTHON__)
;(function($B){$B.stdlib={}
var pylist=['VFS_import','__future__','_abcoll','_codecs','_collections','_csv','_dummy_thread','_functools','_imp','_io','_markupbase','_random','_socket','_sre','_string','_strptime','_struct','_sysconfigdata','_testcapi','_thread','_threading_local','_warnings','_weakref','_weakrefset','abc','antigravity','argparse','atexit','base64','bdb','binascii','bisect','calendar','cmd','code','codecs','codeop','colorsys','configparser','Clib','copy','copyreg','csv','datetime','decimal','difflib','doctest','errno','external_import','fnmatch','formatter','fractions','functools','gc','genericpath','getopt','gettext','glob','heapq','imp','inspect','io','itertools','keyword','linecache','locale','marshal','numbers','opcode','operator','optparse','os','pdb','pickle','platform','posix','posixpath','pprint','pwd','pydoc','queue','re','reprlib','select','shutil','signal','site','site-packages.__future__','site-packages.docs','site-packages.header','site-packages.highlight','site-packages.test_sp','site-packages.turtle','socket','sre_compile','sre_constants','sre_parse','stat','string','struct','subprocess','sys','sysconfig','tarfile','tempfile','test.namespace_pkgs.module_and_namespace_package.a_test','textwrap','this','threading','time','timeit','token','tokenize','traceback','types','uuid','warnings','weakref','webbrowser','zipfile','zlib']
for(var i=0;i<pylist.length;i++)$B.stdlib[pylist[i]]=['py']
var js=['_ajax','_browser','_html','_jsre','_multiprocessing','_posixsubprocess','_svg','_sys','aes','builtins','dis','hashlib','hmac-md5','hmac-ripemd160','hmac-sha1','hmac-sha224','hmac-sha256','hmac-sha3','hmac-sha384','hmac-sha512','javascript','json','long_int','math','md5','modulefinder','pbkdf2','rabbit','rabbit-legacy','random','rc4','ripemd160','sha1','sha224','sha256','sha3','sha384','sha512','tripledes']
for(var i=0;i<js.length;i++)$B.stdlib[js[i]]=['js']
var pkglist=['browser','collections','encodings','html','http','importlib','jqueryui','logging','multiprocessing','multiprocessing.dummy','pydoc_data','site-packages.ui','test','test.encoded_modules','test.leakers','test.namespace_pkgs.not_a_namespace_pkg.foo','test.support','test.test_email','test.test_importlib','test.test_importlib.builtin','test.test_importlib.extension','test.test_importlib.frozen','test.test_importlib.import_','test.test_importlib.source','test.test_json','test.tracedmodules','unittest','unittest.test','unittest.test.testmock','urllib','xml','xml.dom','xml.etree','xml.parsers','xml.sax']
for(var i=0;i<pkglist.length;i++)$B.stdlib[pkglist[i]]=['py',true]})(__BRYTHON__)

;(function($B){var _b_=$B.builtins
$B.$ModuleDict={__class__ : $B.$type,__name__ : 'module'}
$B.$ModuleDict.__repr__=$B.$ModuleDict.__str__=function(self){return '<module '+self.__name__+'>'}
$B.$ModuleDict.__mro__=[$B.$ModuleDict,_b_.object.$dict]
function module(name,doc,package){return{__class__:$B.$ModuleDict,__name__:name,__doc__:doc||_b_.None,__package__:package||_b_.None}}
module.__class__=$B.$factory
module.$dict=$B.$ModuleDict
$B.$ModuleDict.$factory=module
var loader=function(){}
var Loader={__class__:$B.$type,__name__ : 'Loader'}
Loader.__mro__=[Loader,_b_.object.$dict]
Loader.$factory=loader
loader.$dict=Loader
loader.__class__=$B.$factory
function parent_package(mod_name){var parts=mod_name.split('.');
parts.pop();
return parts.join('.');}
function $importer(){
var $xmlhttp=new XMLHttpRequest();
if($B.$CORS && "withCredentials" in $xmlhttp){}else if($B.$CORS && typeof window.XDomainRequest !="undefined"){
$xmlhttp=new window.XDomainRequest();}else if(window.XMLHttpRequest){}else{
$xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
var fake_qs;
switch($B.$options.cache){case 'version':
fake_qs="?v="+$B.version_info[2]
break;
case 'browser':
fake_qs=''
break;
default:
fake_qs="?v="+$B.UUID()}
var timer=setTimeout(function(){$xmlhttp.abort()
throw _b_.ImportError("No module named '"+module+"'")},5000)
return[$xmlhttp,fake_qs,timer]}
function $download_module(module,url,package,blocking){var imp=$importer(),$xmlhttp=imp[0],fake_qs=imp[1],timer=imp[2],res=null,mod_name=module.__name__,no_block=Array.isArray(blocking)||blocking===false
if(no_block){console.log('download non blocking',mod_name)
$xmlhttp.open('GET',url+fake_qs,true)}else{$xmlhttp.open('GET',url+fake_qs,false)}
if($B.$CORS){$xmlhttp.onload=function(){if($xmlhttp.status==200 ||$xmlhttp.status==0){res=$xmlhttp.responseText}else{
res=_b_.FileNotFoundError("No module named '"+mod_name+"'")}}
$xmlhttp.onerror=function(){res=_b_.FileNotFoundError("No module named '"+mod_name+"'")}}else{
$xmlhttp.onreadystatechange=function(){if($xmlhttp.readyState==4){window.clearTimeout(timer)
if($xmlhttp.status==200 ||$xmlhttp.status==0){res=$xmlhttp.responseText
module.$last_modified=$xmlhttp.getResponseHeader('Last-Modified')
if(no_block){var ext=url.substr(url.length-2)
if(ext=='py'){try{import_py1(module,mod_name,url,package,res)}
catch(err){console.log(err);throw err}}else if(ext=='js'){try{run_js(res,url,module)}
catch(err){console.log(err);throw err}}
console.log('non blocking ok',mod_name)
blocking[1]()
return}}else{
console.log('Error '+$xmlhttp.status+
' means that Python module '+mod_name+
' was not found at url '+url)
res=_b_.FileNotFoundError("No module named '"+mod_name+"'")}}}}
if('overrideMimeType' in $xmlhttp){$xmlhttp.overrideMimeType("text/plain")}
$xmlhttp.send()
if(!no_block){
if(res==null)throw _b_.FileNotFoundError("No module named '"+mod_name+"' (res is null)")
if(res.constructor===Error){throw res}
return res}}
$B.$download_module=$download_module
function import_js(module,path,blocking){try{var module_contents=$download_module(module,path,undefined,blocking)
if(Array.isArray(blocking)){return}}catch(err){return null}
run_js(module_contents,path,module)
return true}
function run_js(module_contents,path,module){
try{eval(module_contents);}catch(err){console.log(err)
throw err}
try{$module}
catch(err){console.log('no $module')
throw _b_.ImportError("name '$module' is not defined in module")}
if(module !==undefined){
for(var attr in $module){module[attr]=$module[attr];}
$module=module;}
else{
$module.__class__=$B.$ModuleDict
$module.__name__=module.name
$module.__repr__=$module.__str__=function(){if($B.builtin_module_names.indexOf(module.name)> -1){return "<module '"+module.name+"' (built-in)>"}
return "<module '"+module.name+"' from "+path+" >"}
$module.toString=function(){return "<module '"+module.name+"' from "+path+" >"}
if(module.name !='builtins'){
$module.__file__=path}}
$B.imported[module.__name__]=$module
return true}
function show_ns(){var kk=Object.keys(window)
for(var i=0,_len_i=kk.length;i < _len_i;i++){console.log(kk[i])
if(kk[i].charAt(0)=='$'){console.log(eval(kk[i]))}}
console.log('---')}
function import_py1(module,mod_name,path,package,module_contents){console.log('importpy1',mod_name)
$B.imported[mod_name].$is_package=module.$is_package
$B.imported[mod_name].$last_modified=module.$last_modified
if(path.substr(path.length-12)=='/__init__.py'){
$B.imported[mod_name].__package__=mod_name
$B.imported[mod_name].__path__=path
$B.imported[mod_name].$is_package=module.$is_package=true}else if(package){$B.imported[mod_name].__package__=package}else{var mod_elts=mod_name.split('.')
mod_elts.pop()
$B.imported[mod_name].__package__=mod_elts.join('.')}
$B.imported[mod_name].__file__=path
return run_py(module_contents,path,module)}
function import_py(module,path,package,blocking){
var mod_name=module.__name__,module_contents=$download_module(module,path,package,blocking)
if(Array.isArray(blocking)){return}
$B.imported[mod_name].$is_package=module.$is_package
$B.imported[mod_name].$last_modified=module.$last_modified
if(path.substr(path.length-12)=='/__init__.py'){
$B.imported[mod_name].__package__=mod_name
$B.imported[mod_name].__path__=path
$B.imported[mod_name].$is_package=module.$is_package=true}else if(package){$B.imported[mod_name].__package__=package}else{var mod_elts=mod_name.split('.')
mod_elts.pop()
$B.imported[mod_name].__package__=mod_elts.join('.')}
$B.imported[mod_name].__file__=path
return run_py(module_contents,path,module)}
$B.run_py=run_py=function(module_contents,path,module,compiled){if(!compiled){var $Node=$B.$Node,$NodeJSCtx=$B.$NodeJSCtx
$B.$py_module_path[module.__name__]=path
var root=$B.py2js(module_contents,module.__name__,module.__name__,'__builtins__')
var body=root.children
root.children=[]
var mod_node=new $Node('expression')
new $NodeJSCtx(mod_node,'var $module=(function()')
root.insert(0,mod_node)
for(var i=0,_len_i=body.length;i < _len_i;i++){mod_node.add(body[i])}
var ret_node=new $Node('expression')
new $NodeJSCtx(ret_node,'return $locals_'+module.__name__.replace(/\./g,'_'))
mod_node.add(ret_node)
var ex_node=new $Node('expression')
new $NodeJSCtx(ex_node,')(__BRYTHON__)')
root.add(ex_node)}
try{var js=(compiled)? module_contents : root.to_js()
if($B.$options.debug==10){console.log('code for module '+module.__name__)
console.log(js)}
eval(js)}catch(err){
throw err}
try{
var mod=eval('$module')
for(var attr in mod){module[attr]=mod[attr];}
module.__initializing__=false
$B.imported[module.__name__]=module
return true}catch(err){console.log(''+err+' '+' for module '+module.name)
for(var attr in err)console.log(attr+' '+err[attr])
if($B.debug>0){console.log('line info '+__BRYTHON__.line_info)}
throw err}}
function new_spec(fields){
fields.__class__=$B.$ModuleDict
return fields;}
function finder_VFS(){return{__class__:finder_VFS.$dict}}
finder_VFS.__class__=$B.$factory
finder_VFS.$dict={$factory: finder_VFS,__class__: $B.$type,__name__: 'VFSFinder',create_module : function(cls,spec){
return _b_.None;},exec_module : function(cls,module){var stored=module.__spec__.loader_state.stored;
delete module.__spec__['loader_state'];
var ext=stored[0],module_contents=stored[1];
module.$is_package=stored[2];
var path=$B.brython_path+'Lib/'+module.__name__
if(module.$is_package){path +='/__init__.py'}
module.__file__=path
if(ext=='.js'){run_js(module_contents,module.__path__,module)}
else{run_py(module_contents,module.__path__,module,ext=='.pyc.js')}
if($B.debug>1){console.log('import '+module.__name__+' from VFS')}},find_module: function(cls,name,path){return{__class__:Loader,load_module:function(name,path){var spec=cls.$dict.find_spec(cls,name,path)
var mod=module(name)
$B.imported[name]=mod
mod.__spec__=spec
cls.$dict.exec_module(cls,mod)}}},find_spec : function(cls,fullname,path,prev_module){if(!$B.use_VFS){return _b_.None;}
var stored=$B.VFS[fullname];
if(stored===undefined){return _b_.None;}
var is_package=stored[2],is_builtin=$B.builtin_module_names.indexOf(fullname)> -1;
return new_spec({name : fullname,loader: cls,
origin : is_builtin? 'built-in' : 'py_VFS',
submodule_search_locations: is_package?[]: _b_.None,loader_state:{stored: stored},
cached: _b_.None,parent: is_package? fullname : parent_package(fullname),has_location: _b_.False});}}
finder_VFS.$dict.__mro__=[finder_VFS.$dict,_b_.object.$dict]
finder_VFS.$dict.create_module.$type='classmethod'
finder_VFS.$dict.exec_module.$type='classmethod'
finder_VFS.$dict.find_module.$type='classmethod'
finder_VFS.$dict.find_spec.$type='classmethod'
function finder_stdlib_static(){return{__class__:finder_stdlib_static.$dict}}
finder_stdlib_static.__class__=$B.$factory
finder_stdlib_static.$dict={$factory : finder_stdlib_static,__class__ : $B.$type,__name__ : 'StdlibStatic',create_module : function(cls,spec){
return _b_.None;},exec_module : function(cls,module,blocking){var metadata=module.__spec__.loader_state;
module.$is_package=metadata.is_package;
if(metadata.ext=='py'){import_py(module,metadata.path,module.__package__,blocking);}
else{
import_js(module,metadata.path,blocking);}
delete module.__spec__['loader_state'];},find_module: function(cls,name,path){var spec=cls.$dict.find_spec(cls,name,path)
if(spec===_b_.None){return _b_.None}
return{__class__:Loader,load_module:function(name,path){var mod=module(name)
$B.imported[name]=mod
mod.__spec__=spec
mod.__package__=spec.parent
cls.$dict.exec_module(cls,mod,spec.blocking)}}},find_spec: function(cls,fullname,path,prev_module){if($B.stdlib){var address=$B.stdlib[fullname];
if(address===undefined){var elts=fullname.split('.')
if(elts.length>1){var mod_name=elts.pop()
var package=$B.stdlib[elts.join('.')]
if(package && package[1]){address=['py']}}}
if(address !==undefined){var ext=address[0],is_pkg=address[1]!==undefined,path=$B.brython_path +((ext=='py')? 'Lib/' : 'libs/')+
fullname.replace(/\./g,'/'),metadata={ext: ext,is_package: is_pkg,path: path +(is_pkg? '/__init__.py' :
((ext=='py')? '.py' : '.js')),address: address}
var res=new_spec(
{name : fullname,loader: cls,
origin : metadata.path,submodule_search_locations: is_pkg?[path]: _b_.None,loader_state: metadata,
cached: _b_.None,parent: is_pkg? fullname :
parent_package(fullname),has_location: _b_.True});
return res}}
return _b_.None;}}
finder_stdlib_static.$dict.__mro__=[finder_stdlib_static.$dict,_b_.object.$dict]
finder_stdlib_static.$dict.create_module.$type='classmethod'
finder_stdlib_static.$dict.exec_module.$type='classmethod'
finder_stdlib_static.$dict.find_module.$type='classmethod'
finder_stdlib_static.$dict.find_spec.$type='classmethod'
function finder_path(){return{__class__:finder_path.$dict}}
finder_path.__class__=$B.$factory
finder_path.$dict={$factory: finder_path,__class__: $B.$type,__name__: 'ImporterPath',create_module : function(cls,spec){
return _b_.None;},exec_module : function(cls,module){var _spec=_b_.getattr(module,'__spec__'),code=_spec.loader_state.code;
module.$is_package=_spec.loader_state.is_package,delete _spec.loader_state['code'];
var src_type=_spec.loader_state.type
if(src_type=='py' ||src_type=='pyc.js'){run_py(code,_spec.origin,module,src_type=='pyc.js');}
else if(_spec.loader_state.type=='js'){run_js(code,_spec.origin,module)}},find_module: function(cls,name,path){return finder_path.$dict.find_spec(cls,name,path)},find_spec : function(cls,fullname,path,prev_module){if(is_none(path)){
path=$B.path}
for(var i=0,li=path.length;i<li;++i){var path_entry=path[i];
if(path_entry[path_entry.length - 1]!='/'){path_entry +='/'}
var finder=$B.path_importer_cache[path_entry];
if(finder===undefined){var finder_notfound=true;
for(var j=0,lj=$B.path_hooks.length;
j < lj && finder_notfound;
++j){var hook=$B.path_hooks[j];
try{
finder=_b_.getattr(hook,'__call__')(path_entry)
finder_notfound=false;}
catch(e){if(e.__class__ !==_b_.ImportError.$dict){throw e;}}}
if(finder_notfound){$B.path_importer_cache[path_entry]=_b_.None;}}
var spec=_b_.getattr(_b_.getattr(finder,'find_spec'),'__call__')(fullname,prev_module);
if(!is_none(spec)){return spec;}}
return _b_.None;}}
finder_path.$dict.__mro__=[finder_path.$dict,_b_.object.$dict]
finder_path.$dict.create_module.$type='classmethod'
finder_path.$dict.exec_module.$type='classmethod'
finder_path.$dict.find_module.$type='classmethod'
finder_path.$dict.find_spec.$type='classmethod'
function vfs_hook(path){if(path.substr(-1)=='/'){path=path.slice(0,-1);}
var ext=path.substr(-7);
if(ext !='.vfs.js'){throw _b_.ImportError('VFS file URL must end with .vfs.js extension');}
self={__class__: vfs_hook.$dict,path: path};
vfs_hook.$dict.load_vfs(self);
return self;}
vfs_hook.__class__=$B.$factory
vfs_hook.$dict={$factory: vfs_hook,__class__: $B.$type,__name__: 'VfsPathFinder',load_vfs: function(self){try{var code=$download_module({__name__:'<VFS>'},self.path)}
catch(e){self.vfs=undefined;
throw new _b_.ImportError(e.$message ||e.message);}
eval(code);
try{
self.vfs=$vfs;}
catch(e){throw new _b_.ImportError('Expecting $vfs var in VFS file');}
$B.path_importer_cache[self.path + '/']=self;},find_spec: function(self,fullname,module){if(self.vfs===undefined){try{vfs_hook.$dict.load_vfs(self)}
catch(e){console.log("Could not load VFS while importing '" + fullname + "'");
return _b_.None;}}
var stored=self.vfs[fullname];
if(stored===undefined){return _b_.None;}
var is_package=stored[2];
return new_spec({name : fullname,loader: finder_VFS,
origin : self.path + '#' + fullname,
submodule_search_locations: is_package?[self.path]:
_b_.None,loader_state:{stored: stored},
cached: _b_.None,parent: is_package? fullname : parent_package(fullname),has_location: _b_.True});},invalidate_caches: function(self){self.vfs=undefined;}}
vfs_hook.$dict.__mro__=[vfs_hook.$dict,_b_.object.$dict]
function url_hook(path_entry,hint){return{__class__: url_hook.$dict,path_entry:path_entry,hint:hint }}
url_hook.__class__=$B.$factory
url_hook.$dict={$factory: url_hook,__class__: $B.$type,__name__ : 'UrlPathFinder',__repr__: function(self){return '<UrlPathFinder' +(self.hint? " for '" + self.hint + "'":
"(unbound)")+ ' at ' + self.path_entry + '>'},find_spec : function(self,fullname,module){var loader_data={},notfound=true,hint=self.hint,base_path=self.path_entry + fullname.match(/[^.]+$/g)[0],modpaths=[];
var tryall=hint===undefined;
if(tryall ||hint=='js'){
modpaths=[[base_path + '.js','js',false]];}
if(tryall ||hint=='pyc.js'){
modpaths=modpaths.concat([[base_path + '.pyc.js','pyc.js',false],[base_path + '/__init__.pyc.js','pyc.js',true]]);}
if(tryall ||hint=='py'){
modpaths=modpaths.concat([[base_path + '.py','py',false],[base_path + '/__init__.py','py',true]]);}
for(var j=0;notfound && j < modpaths.length;++j){try{var file_info=modpaths[j];
loader_data.code=$download_module({__name__:fullname},file_info[0]);
notfound=false;
loader_data.type=file_info[1];
loader_data.is_package=file_info[2];
if(hint===undefined){self.hint=file_info[1];
$B.path_importer_cache[self.path_entry]=self;}
if(loader_data.is_package){
$B.path_importer_cache[base_path + '/']=
url_hook(base_path + '/',self.hint);}
loader_data.path=file_info[0];}catch(err){}}
if(!notfound){return new_spec({name : fullname,loader: finder_path,origin : loader_data.path,
submodule_search_locations: loader_data.is_package?[base_path]:
_b_.None,loader_state: loader_data,
cached: _b_.None,parent: loader_data.is_package? fullname :
parent_package(fullname),has_location: _b_.True});}
return _b_.None;},invalidate_caches : function(self){}}
url_hook.$dict.__mro__=[url_hook.$dict,_b_.object.$dict]
$B.$path_hooks=[vfs_hook,url_hook];
$B.path_importer_cache={};
var _sys_paths=[[$B.script_dir + '/','py'],[$B.brython_path + 'Lib/','py'],[$B.brython_path + 'Lib/site-packages/','py'],[$B.brython_path + 'libs/','js']];
for(i=0;i < _sys_paths.length;++i){var _path=_sys_paths[i],_type=_path[1];
_path=_path[0];
$B.path_importer_cache[_path]=url_hook(_path,_type);}
delete _path;
delete _type;
delete _sys_paths;
$B.is_none=function(o){return o===undefined ||o==_b_.None;}
$B.$__import__=function(mod_name,globals,locals,fromlist,level,blocking){
var modobj=$B.imported[mod_name],parsed_name=mod_name.split('.');
if(modobj==_b_.None){
throw _b_.ImportError(mod_name)}
if(modobj===undefined){
if(is_none(fromlist)){fromlist=[];}
for(var i=0,modsep='',_mod_name='',len=parsed_name.length - 1,__path__=_b_.None;i <=len;++i){var _parent_name=_mod_name;
_mod_name +=modsep + parsed_name[i];
modsep='.';
var modobj=$B.imported[_mod_name];
if(modobj==_b_.None){
throw _b_.ImportError(_mod_name)}
else if(modobj===undefined){try{$B.import_hooks(_mod_name,__path__,undefined,blocking)}
catch(err){delete $B.imported[_mod_name]
throw err}
if(is_none($B.imported[_mod_name])){throw _b_.ImportError(_mod_name)}
else{
if(_parent_name){_b_.setattr($B.imported[_parent_name],parsed_name[i],$B.imported[_mod_name]);}}}
if(i < len){try{__path__=_b_.getattr($B.imported[_mod_name],'__path__')}
catch(e){
if(i==len-1 && $B.imported[_mod_name][parsed_name[len]]&& 
$B.imported[_mod_name][parsed_name[len]].__class__===$B.$ModuleDict){return $B.imported[_mod_name][parsed_name[len]]}
throw _b_.ImportError(_mod_name)}}}}
else if(Array.isArray(blocking)){var frames=$B.frames_stack
for(var i=0;i<frames.length;i++){var locals_id='$locals_'+frames[i][0].replace(/\./g,'_')
eval('var '+locals_id+'=frames[i][1]')}
eval('var $locals='+locals_id)
blocking[1]()}
if(fromlist.length > 0){
return $B.imported[mod_name]}
else{
return $B.imported[parsed_name[0]]}}
$B.$import=function(mod_name,fromlist,aliases,locals,blocking){var parts=mod_name.split('.');
if(mod_name[mod_name.length - 1]=='.'){parts.pop()}
var norm_parts=[],prefix=true;
for(var i=0,_len_i=parts.length;i < _len_i;i++){var p=parts[i];
if(prefix && p==''){
elt=norm_parts.pop();
if(elt===undefined){throw _b_.ImportError("Parent module '' not loaded, cannot perform relative import");}}
else{
prefix=false;
norm_parts.push(p.substr(0,2)=='$$' ? p.substr(2): p)}}
var mod_name=norm_parts.join('.')
if($B.$options.debug==10){console.log('$import '+mod_name)
console.log('use VFS ? '+$B.use_VFS)
console.log('use static stdlib paths ? '+$B.static_stdlib_import)}
var current_frame=$B.frames_stack[$B.frames_stack.length-1],_globals=current_frame[3],__import__=_globals['__import__'],globals=$B.obj_dict(_globals);
if(__import__===undefined){
__import__=$B.$__import__;}
var modobj=_b_.getattr(__import__,'__call__')(mod_name,globals,undefined,fromlist,0);
if(!fromlist ||fromlist.length==0){
var alias=aliases[mod_name];
if(alias){locals[alias]=$B.imported[mod_name];}
else{
locals[norm_parts[0]]=modobj;}}
else{
var __all__=fromlist,thunk={};
if(fromlist && fromlist[0]=='*'){__all__=_b_.getattr(modobj,'__all__',thunk);
if(__all__ !==thunk){
aliases={};}}
if(__all__===thunk){
for(var attr in modobj){if(attr[0]!=='_'){locals[attr]=modobj[attr];}}}
else{
for(var i=0,l=__all__.length;i < l;++i){var name=__all__[i];
var alias=aliases[name]||name;
try{
locals[alias]=_b_.getattr(modobj,name);}
catch($err1){
_b_.getattr(__import__,'__call__')(mod_name + '.' + name,globals,undefined,[],0);
try{
locals[alias]=_b_.getattr(modobj,name);}
catch($err3){
if($err3.__class__===_b_.AttributeError.$dict){$err3.__class__=_b_.ImportError.$dict;}}}}}}}
$B.$import_non_blocking=function(mod_name,func){console.log('import non blocking',mod_name)
$B.$import(mod_name,[],[],{},[false,func])}
$B.$meta_path=[finder_VFS,finder_stdlib_static,finder_path];
function optimize_import_for_path(path,filetype){if(path.slice(-1)!='/'){path=path + '/' }
$B.path_importer_cache[path]=url_hook(path,filetype);}
_importlib_module={__class__ : $B.$ModuleDict,__name__ : '_importlib',Loader: Loader,VFSFinder: finder_VFS,StdlibStatic: finder_stdlib_static,ImporterPath: finder_path,VFSPathFinder : vfs_hook,UrlPathFinder: url_hook,optimize_import_for_path : optimize_import_for_path}
_importlib_module.__repr__=_importlib_module.__str__=function(){return "<module '_importlib' (built-in)>"}
$B.imported['_importlib']=$B.modules['_importlib']=_importlib_module})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $ObjectDict=_b_.object.$dict
function $err(op,other){var msg="unsupported operand type(s) for "+op
msg +=": 'float' and '"+$.get_class(other).__name__+"'"
throw _b_.TypeError(msg)}
var $FloatDict={__class__:$B.$type,__dir__:$ObjectDict.__dir__,__name__:'float',$native:true}
$FloatDict.as_integer_ratio=function(self){if(self.valueOf()==Number.POSITIVE_INFINITY ||
self.valueOf()==Number.NEGATIVE_INFINITY){throw _b_.OverflowError("Cannot pass infinity to float.as_integer_ratio.")}
if(!Number.isFinite(self.valueOf())){throw _b_.ValueError("Cannot pass NaN to float.as_integer_ratio.")}
var tmp=_b_.$frexp(self.valueOf())
var fp=tmp[0]
var exponent=tmp[1]
for(var i=0;i < 300;i++){if(fp==Math.floor(fp)){break}else{
fp *=2
exponent--}}
numerator=float(fp)
py_exponent=abs(exponent)
denominator=1
console.log(exponent,py_exponent,numerator,denominator)
py_exponent=_b_.getattr(int(denominator),"__lshift__")(py_exponent)
if(exponent > 0){numerator=numerator * py_exponent}else{
denominator=py_exponent}
console.log(exponent,py_exponent,numerator,denominator)
return _b_.tuple([_b_.int(numerator),_b_.int(denominator)])}
$FloatDict.__bool__=function(self){return _b_.bool(self.valueOf())}
$FloatDict.__class__=$B.$type
$FloatDict.__eq__=function(self,other){if(isNaN(self)&& isNaN(other)){return true}
if(isinstance(other,_b_.int))return self==other
if(isinstance(other,float)){
return self.valueOf()==other.valueOf()}
if(isinstance(other,_b_.complex)){if(other.imag !=0)return false
return self==other.real}
if(_b_.hasattr(other,'__eq__')){return _b_.getattr(other,'__eq__')(self.value)}
return self.value===other}
$FloatDict.__floordiv__=function(self,other){if(isinstance(other,[_b_.int,float])){if(other.valueOf()==0)throw ZeroDivisionError('division by zero')
return float(Math.floor(self/other))}
if(hasattr(other,'__rfloordiv__')){return getattr(other,'__rfloordiv__')(self)}
$err('//',other)}
$FloatDict.fromhex=function(arg){
if(!isinstance(arg,_b_.str)){throw _b_.ValueError('argument must be a string')}
var value=arg.trim()
switch(value.toLowerCase()){case '+inf':
case 'inf':
case '+infinity':
case 'infinity':
return $FloatClass(Infinity)
case '-inf':
case '-infinity':
return $FloatClass(-Infinity)
case '+nan':
case 'nan':
return $FloatClass(Number.NaN)
case '-nan':
return $FloatClass(-Number.NaN)
case '':
throw _b_.ValueError('count not convert string to float')}
var _m=/^(\d*\.?\d*)$/.exec(value)
if(_m !==null)return $FloatClass(parseFloat(_m[1]))
var _m=/^(\+|-)?(0x)?([0-9A-F]+\.?)?(\.[0-9A-F]+)?(p(\+|-)?\d+)?$/i.exec(value)
if(_m==null)throw _b_.ValueError('invalid hexadecimal floating-point string')
var _sign=_m[1]
var _int=parseInt(_m[3]||'0',16)
var _fraction=_m[4]||'.0'
var _exponent=_m[5]||'p0'
if(_sign=='-'){_sign=-1}else{_sign=1}
var _sum=_int
for(var i=1,_len_i=_fraction.length;i < _len_i;i++){_sum+=parseInt(_fraction.charAt(i),16)/Math.pow(16,i)}
return new Number(_sign * _sum * Math.pow(2,parseInt(_exponent.substring(1))))}
$FloatDict.__getformat__=function(arg){if(arg=='double' ||arg=='float')return 'IEEE, little-endian'
throw _b_.ValueError("__getformat__() argument 1 must be 'double' or 'float'")}
function preformat(self,fmt){if(fmt.empty){return _b_.str(self)}
if(fmt.type && 'eEfFgGn%'.indexOf(fmt.type)==-1){throw _b_.ValueError("Unknown format code '"+fmt.type+
"' for object of type 'float'")}
if(isNaN(self)){if(fmt.type=='f'||fmt.type=='g'){return 'nan'}
else{return 'NAN'}}
if(self==Number.POSITIVE_INFINITY){if(fmt.type=='f'||fmt.type=='g'){return 'inf'}
else{return 'INF'}}
if(fmt.precision===undefined && fmt.type !==undefined){fmt.precision=6}
if(fmt.type=='%'){self *=100}
if(fmt.type=='e'){var res=self.toExponential(fmt.precision),exp=parseInt(res.substr(res.search('e')+1))
if(Math.abs(exp)<10){res=res.substr(0,res.length-1)+'0'+
res.charAt(res.length-1)}
return res }
if(fmt.precision!==undefined){
var prec=fmt.precision
if(prec && 'fF%'.indexOf(fmt.type)>-1){var pos_pt=Math.abs(self).toString().search(/\./)
if(pos_pt>-1){prec+=pos_pt}else{prec=Math.abs(self).toString().length}}
var res=self.toPrecision(prec),pt_pos=res.indexOf('.')
if(fmt.type!==undefined && 
(fmt.type=='%' ||fmt.type.toLowerCase()=='f')){if(pt_pos==-1){res +='.'+'0'.repeat(fmt.precision)}
else{missing=fmt.precision-res.length+pt_pos+1
if(missing>0)res +='0'.repeat(missing)}}else{var res1=self.toExponential(fmt.precision-1),exp=parseInt(res1.substr(res1.search('e')+1))
if(exp<-4 ||exp>=fmt.precision-1){res=res1
if(Math.abs(exp)<10){res=res.substr(0,res.length-1)+'0'+
res.charAt(res.length-1)}}}}else{var res=_b_.str(self)}
if(fmt.type===undefined||'gGn'.indexOf(fmt.type)!=-1){
while(res.charAt(res.length-1)=='0'){res=res.substr(0,res.length-1)}
if(res.charAt(res.length-1)=='.'){if(fmt.type===undefined){res +='0'}
else{res=res.substr(0,res.length-1)}}}
if(fmt.sign!==undefined){if((fmt.sign==' ' ||fmt.sign=='+')&& self>0){res=fmt.sign+res}}
if(fmt.type=='%'){res+='%'}
return res}
$FloatDict.__format__=function(self,format_spec){var fmt=new $B.parse_format_spec(format_spec)
fmt.align=fmt.align ||'>'
var raw=preformat(self,fmt).split('.'),_int=raw[0]
if(fmt.comma){var len=_int.length,nb=Math.ceil(_int.length/3),chunks=[]
for(var i=0;i<nb;i++){chunks.push(_int.substring(len-3*i-3,len-3*i))}
chunks.reverse()
raw[0]=chunks.join(',')}
return $B.format_width(raw.join('.'),fmt)}
$FloatDict.__hash__=function(self){if(self===undefined){return $FloatDict.__hashvalue__ ||$B.$py_next_hash-- }
var _v=self.valueOf()
if(_v===Infinity)return 314159
if(_v===-Infinity)return -271828
if(isNaN(_v))return 0
if(_v==Math.round(_v))return Math.round(_v)
var r=_b_.$frexp(_v)
r[0]*=Math.pow(2,31)
var hipart=_b_.int(r[0])
r[0]=(r[0]- hipart)* Math.pow(2,31)
var x=hipart + _b_.int(r[0])+(r[1]<< 15)
return x & 0xFFFFFFFF}
_b_.$isninf=function(x){var x1=x
if(isinstance(x,float))x1=x.valueOf()
return x1==-Infinity ||x1==Number.NEGATIVE_INFINITY}
_b_.$isinf=function(x){var x1=x
if(isinstance(x,float))x1=x.valueOf()
return x1==Infinity ||x1==-Infinity ||x1==Number.POSITIVE_INFINITY ||x1==Number.NEGATIVE_INFINITY}
_b_.$fabs=function(x){return x>0?float(x):float(-x)}
_b_.$frexp=function(x){var x1=x
if(isinstance(x,float))x1=x.valueOf()
if(isNaN(x1)||_b_.$isinf(x1)){return[x1,-1]}
if(x1==0)return[0,0]
var sign=1,ex=0,man=x1
if(man < 0.){sign=-sign
man=-man}
while(man < 0.5){man *=2.0
ex--}
while(man >=1.0){man *=0.5
ex++}
man *=sign
return[man ,ex]}
_b_.$ldexp=function(x,i){if(_b_.$isninf(x))return float('-inf')
if(_b_.$isinf(x))return float('inf')
var y=x
if(isinstance(x,float))y=x.valueOf()
if(y==0)return y
var j=i
if(isinstance(i,float))j=i.valueOf()
return y * Math.pow(2,j)}
$FloatDict.hex=function(self){
var DBL_MANT_DIG=53 
var TOHEX_NBITS=DBL_MANT_DIG + 3 -(DBL_MANT_DIG+2)%4;
switch(self.valueOf()){case Infinity:
case -Infinity:
case Number.NaN:
case -Number.NaN:
return self
case -0:
return '-0x0.0p0'
case 0:
return '0x0.0p0'}
var _a=_b_.$frexp(_b_.$fabs(self.valueOf()))
var _m=_a[0],_e=_a[1]
var _shift=1 - Math.max(-1021 - _e,0)
_m=_b_.$ldexp(_m,_shift)
_e -=_shift
var _int2hex='0123456789ABCDEF'.split('')
var _s=_int2hex[Math.floor(_m)]
_s+='.'
_m -=Math.floor(_m)
for(var i=0;i <(TOHEX_NBITS-1)/4;i++){_m*=16.0
_s+=_int2hex[Math.floor(_m)]
_m-=Math.floor(_m)}
var _esign='+'
if(_e < 0){_esign='-'
_e=-_e}
if(self.value < 0)return "-0x" + _s + 'p' + _esign + _e;
return "0x" + _s + 'p' + _esign + _e;}
$FloatDict.__init__=function(self,value){self=new Number(value)}
$FloatDict.__int__=function(self){return parseInt(self)}
$FloatDict.is_integer=function(self){return _b_.int(self)==self}
$FloatDict.__mod__=function(self,other){
if(other==0){throw ZeroDivisionError('float modulo')}
if(isinstance(other,_b_.int))return new Number((self%other+other)%other)
if(isinstance(other,float)){
var q=Math.floor(self/other),r=self-other*q
return new Number(r)}
if(isinstance(other,_b_.bool)){var bool_value=0;
if(other.valueOf())bool_value=1;
return new Number((self%bool_value+bool_value)%bool_value)}
if(hasattr(other,'__rmod__'))return getattr(other,'__rmod__')(self)
$err('%',other)}
$FloatDict.__mro__=[$FloatDict,$ObjectDict]
$FloatDict.__mul__=function(self,other){if(isinstance(other,_b_.int)){if(other.__class__==$B.LongInt.$dict){return new Number(self*parseFloat(other.value))}
return new Number(self*other)}
if(isinstance(other,float))return new Number(self*other)
if(isinstance(other,_b_.bool)){var bool_value=0;
if(other.valueOf())bool_value=1;
return new Number(self*bool_value)}
if(isinstance(other,_b_.complex)){return _b_.complex(float(self*other.real),float(self*other.imag))}
if(hasattr(other,'__rmul__'))return getattr(other,'__rmul__')(self)
$err('*',other)}
$FloatDict.__ne__=function(self,other){return !$FloatDict.__eq__(self,other)}
$FloatDict.__neg__=function(self,other){return float(-self)}
$FloatDict.__pos__=function(self){return self}
$FloatDict.__pow__=function(self,other){var other_int=isinstance(other,_b_.int)
if(other_int ||isinstance(other,float)){if(self==1){return self}
if(other==0){return new Number(1)}
if(self==-1 && 
(!isFinite(other)||other.__class__===$B.LongInt.$dict ||!$B.is_safe_int(other))
&& !isNaN(other)){return new Number(1)}
else if(self==0 && isFinite(other)&& other<0){throw _b_.ZeroDivisionError("0.0 cannot be raised to a negative power")}else if(self==Number.NEGATIVE_INFINITY && !isNaN(other)){if(other<0 && other%2==1){return new Number(-0.0)}else if(other<0){return new Number(0)}
else if(other>0 && other%2==1){return Number.NEGATIVE_INFINITY}else{return Number.POSITIVE_INFINITY}}else if(self==Number.POSITIVE_INFINITY && !isNaN(other)){return other>0 ? self : new Number(0)}
if(other==Number.NEGATIVE_INFINITY && !isNaN(self)){return Math.abs(self)<1 ? Number.POSITIVE_INFINITY : new Number(0)}else if(other==Number.POSITIVE_INFINITY && !isNaN(self)){return Math.abs(self)<1 ? new Number(0): Number.POSITIVE_INFINITY}
if(self<0 && !_b_.getattr(other,'__eq__')(_b_.int(other))){
return _b_.complex.$dict.__pow__(_b_.complex(self,0),other)}
return float(Math.pow(self,other))}
if(hasattr(other,'__rpow__'))return getattr(other,'__rpow__')(self)
$err("** or pow()",other)}
$FloatDict.__repr__=$FloatDict.__str__=function(self){if(self===float)return "<class 'float'>"
if(self.valueOf()==Infinity)return 'inf'
if(self.valueOf()==-Infinity)return '-inf'
if(isNaN(self.valueOf()))return 'nan'
var res=self.valueOf()+'' 
if(res.indexOf('.')==-1)res+='.0'
return _b_.str(res)}
$FloatDict.__setattr__=function(self,attr,value){if(self.constructor===Number){if($FloatDict[attr]===undefined){throw _b_.AttributeError("'float' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError("'float' object attribute '"+attr+"' is read-only")}}
self[attr]=value
return $N}
$FloatDict.__truediv__=function(self,other){if(isinstance(other,[_b_.int,float])){if(other.valueOf()==0)throw ZeroDivisionError('division by zero')
return float(self/other)}
if(isinstance(other,_b_.complex)){var cmod=other.real*other.real+other.imag*other.imag
if(cmod==0)throw ZeroDivisionError('division by zero')
return _b_.complex(float(self*other.real/cmod),float(-self*other.imag/cmod))}
if(hasattr(other,'__rtruediv__'))return getattr(other,'__rtruediv__')(self)
$err('/',other)}
var $op_func=function(self,other){if(isinstance(other,_b_.int)){if(other.__class__===$B.LongInt.$dict){return float(self-parseInt(other.value))}else{return float(self-other)}}
if(isinstance(other,float))return float(self-other)
if(isinstance(other,_b_.bool)){var bool_value=0;
if(other.valueOf())bool_value=1;
return float(self-bool_value)}
if(isinstance(other,_b_.complex)){return _b_.complex(self - other.real,-other.imag)}
if(hasattr(other,'__rsub__'))return getattr(other,'__rsub__')(self)
$err('-',other)}
$op_func +='' 
var $ops={'+':'add','-':'sub'}
for(var $op in $ops){var $opf=$op_func.replace(/-/gm,$op)
$opf=$opf.replace(/__rsub__/gm,'__r'+$ops[$op]+'__')
eval('$FloatDict.__'+$ops[$op]+'__ = '+$opf)}
var $comp_func=function(self,other){if(isinstance(other,_b_.int)){if(other.__class__===$B.LongInt.$dict){return self > parseInt(other.value)}
return self > other.valueOf()}
if(isinstance(other,float))return self > other
throw _b_.TypeError(
"unorderable types: "+self.__class__.__name__+'() > '+$B.get_class(other).__name__+"()")}
$comp_func +='' 
var $comps={'>':'gt','>=':'ge','<':'lt','<=':'le'}
for(var $op in $comps){eval("$FloatDict.__"+$comps[$op]+'__ = '+$comp_func.replace(/>/gm,$op))}
$B.make_rmethods($FloatDict)
var $notimplemented=function(self,other){throw _b_.TypeError(
"unsupported operand types for OPERATOR: '"+self.__class__.__name__+
"' and '"+$B.get_class(other).__name__+"'")}
$notimplemented +='' 
for(var $op in $B.$operators){
switch($op){case '+=':
case '-=':
case '*=':
case '/=':
case '%=':
break
default:
var $opfunc='__'+$B.$operators[$op]+'__'
if($FloatDict[$opfunc]===undefined){eval('$FloatDict.'+$opfunc+"="+$notimplemented.replace(/OPERATOR/gm,$op))}}}
function $FloatClass(value){return new Number(value)}
function to_digits(s){
var arabic_digits='\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669',res=''
for(var i=0;i<s.length;i++){var x=arabic_digits.indexOf(s[i])
if(x>-1){res +=x}
else{res +=s[i]}}
return res}
var float=function(value){switch(value){case undefined:
return $FloatClass(0.0)
case Number.MAX_VALUE:
return $FloatClass(Infinity)
case -Number.MAX_VALUE:
return $FloatClass(-Infinity)}
if(typeof value=="number")return $FloatClass(value)
if(isinstance(value,float)){return value}
if(isinstance(value,_b_.bytes)){var s=getattr(value,'decode')('latin-1')
return float(getattr(value,'decode')('latin-1'))}
if(hasattr(value,'__float__')){return $FloatClass(getattr(value,'__float__')())}
if(typeof value=='string'){value=value.trim()
switch(value.toLowerCase()){case '+inf':
case 'inf':
case '+infinity':
case 'infinity':
return Number.POSITIVE_INFINITY
case '-inf':
case '-infinity':
return Number.NEGATIVE_INFINITY
case '+nan':
case 'nan':
return Number.NaN
case '-nan':
return -Number.NaN
case '':
throw _b_.ValueError('count not convert string to float')
default:
value=to_digits(value)
if(isFinite(value))return $FloatClass(eval(value))
else{
_b_.str.$dict.encode(value,'latin-1')
throw _b_.ValueError("Could not convert to float(): '"+_b_.str(value)+"'")}}}
throw _b_.TypeError("float() argument must be a string or a number, not '"+
$B.get_class(value).__name__+"'")}
float.__class__=$B.$factory
float.$dict=$FloatDict
$FloatDict.$factory=float
$FloatDict.__new__=$B.$__new__(float)
$B.$FloatClass=$FloatClass
_b_.float=float})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $ObjectDict=_b_.object.$dict,$N=_b_.None
function $err(op,other){var msg="unsupported operand type(s) for "+op
msg +=": 'int' and '"+$B.get_class(other).__name__+"'"
throw _b_.TypeError(msg)}
var $IntDict={__class__:$B.$type,__name__:'int',__dir__:$ObjectDict.__dir__,toString:function(){return '$IntDict'},$native:true,descriptors:{'numerator':true,'denominator':true,'imag':true,'real':true}}
$IntDict.from_bytes=function(){var $=$B.args("from_bytes",3,{bytes:null,byteorder:null,signed:null},['bytes','byteorder','signed'],arguments,{signed:False},null,null)
var x=$.bytes,byteorder=$.byteorder,signed=$.signed
var _bytes,_len
if(isinstance(x,[_b_.list,_b_.tuple])){_bytes=x
_len=len(x)}else if(isinstance(x,[_b_.bytes,_b_.bytearray])){_bytes=x.source
_len=x.source.length}else{
_b_.TypeError("Error! " + _b_.type(x)+ " is not supported in int.from_bytes. fix me!")}
switch(byteorder){case 'big':
var num=_bytes[_len - 1];
var _mult=256
for(var i=(_len - 2);i >=0;i--){
num=$B.add($B.mul(_mult,_bytes[i]),num)
_mult=$B.mul(_mult,256)}
if(!signed)return num
if(_bytes[0]< 128)return num
return $B.sub(num,_mult)
case 'little':
var num=_bytes[0]
if(num >=128)num=num - 256
var _mult=256
for(var i=1;i < _len;i++){num=$B.add($B.mul(_mult,_bytes[i]),num)
_mult=$B.mul(_mult,256)}
if(!signed)return num
if(_bytes[_len - 1]< 128)return num
return $B.sub(num,_mult)}
throw _b_.ValueError("byteorder must be either 'little' or 'big'");}
$IntDict.to_bytes=function(length,byteorder,star){
throw _b_.NotImplementedError("int.to_bytes is not implemented yet")}
$IntDict.__abs__=function(self){return abs(self)}
$IntDict.__bool__=function(self){return new Boolean(self.valueOf())}
$IntDict.__ceil__=function(self){return Math.ceil(self)}
$IntDict.__class__=$B.$type
$IntDict.__divmod__=function(self,other){return divmod(self,other)}
$IntDict.__eq__=function(self,other){
if(other===undefined)return self===int
if(isinstance(other,int))return self.valueOf()==other.valueOf()
if(isinstance(other,_b_.float))return self.valueOf()==other.valueOf()
if(isinstance(other,_b_.complex)){if(other.imag !=0)return False
return self.valueOf()==other.real}
if(hasattr(other,'__eq__'))return getattr(other,'__eq__')(self)
return self.valueOf()===other}
function preformat(self,fmt){if(fmt.empty){return _b_.str(self)}
if(fmt.type && 'bcdoxXn'.indexOf(fmt.type)==-1){throw _b_.ValueError("Unknown format code '"+fmt.type+
"' for object of type 'int'")}
switch(fmt.type){case undefined:
case 'd':
return self.toString()
case 'b':
return(fmt.alternate ? '0b' : '')+ self.toString(2)
case 'c':
return _b_.chr(self)
case 'o':
return(fmt.alternate ? '0o' : '')+ self.toString(8)
case 'x':
return(fmt.alternate ? '0x' : '')+ self.toString(16)
case 'X':
return(fmt.alternate ? '0X' : '')+ self.toString(16).toUpperCase()
case 'n':
return self }
return res}
$IntDict.__format__=function(self,format_spec){var fmt=new $B.parse_format_spec(format_spec)
if(fmt.type && 'eEfFgG%'.indexOf(fmt.type)!=-1){
return _b_.float.$dict.__format__(self,format_spec)}
fmt.align=fmt.align ||'>'
var res=preformat(self,fmt)
if(fmt.comma){var len=res.length,nb=Math.ceil(res.length/3),chunks=[]
for(var i=0;i<nb;i++){chunks.push(res.substring(len-3*i-3,len-3*i))}
chunks.reverse()
res=chunks.join(',')}
return $B.format_width(res,fmt)}
$IntDict.__floordiv__=function(self,other){if(isinstance(other,int)){if(other==0)throw ZeroDivisionError('division by zero')
return Math.floor(self/other)}
if(isinstance(other,_b_.float)){if(!other.valueOf())throw ZeroDivisionError('division by zero')
return Math.floor(self/other)}
if(hasattr(other,'__rfloordiv__')){return getattr(other,'__rfloordiv__')(self)}
$err("//",other)}
$IntDict.__hash__=function(self){if(self===undefined){return $IntDict.__hashvalue__ ||$B.$py_next_hash-- }
return self.valueOf()}
$IntDict.__index__=function(self){return self}
$IntDict.__init__=function(self,value){if(value===undefined){value=0}
self.toString=function(){return value}
return $N}
$IntDict.__int__=function(self){return self}
$IntDict.__invert__=function(self){return ~self}
$IntDict.__lshift__=function(self,other){if(isinstance(other,int)){return int($B.LongInt.$dict.__lshift__($B.LongInt(self),$B.LongInt(other)))}
var rlshift=getattr(other,'__rlshift__',null)
if(rlshift!==null){return rlshift(self)}
$err('<<',other)}
$IntDict.__mod__=function(self,other){
if(isinstance(other,_b_.tuple)&& other.length==1)other=other[0]
if(isinstance(other,[int,_b_.float,bool])){if(other===false){other=0}else if(other===true){other=1}
if(other==0){throw _b_.ZeroDivisionError(
"integer division or modulo by zero")}
return(self%other+other)%other}
if(hasattr(other,'__rmod__'))return getattr(other,'__rmod__')(self)
$err('%',other)}
$IntDict.__mro__=[$IntDict,$ObjectDict]
$IntDict.__mul__=function(self,other){var val=self.valueOf()
if(typeof other==="string"){return other.repeat(val)}
if(isinstance(other,int)){var res=self*other
if(res>$B.min_int && res<$B.max_int){return res}
else{return int($B.LongInt.$dict.__mul__($B.LongInt(self),$B.LongInt(other)))}}
if(isinstance(other,_b_.float)){return new Number(self*other)}
if(isinstance(other,_b_.bool)){if(other.valueOf())return self
return int(0)}
if(isinstance(other,_b_.complex)){return _b_.complex($IntDict.__mul__(self,other.real),$IntDict.__mul__(self,other.imag))}
if(isinstance(other,[_b_.list,_b_.tuple])){var res=[]
var $temp=other.slice(0,other.length)
for(var i=0;i<val;i++)res=res.concat($temp)
if(isinstance(other,_b_.tuple))res=_b_.tuple(res)
return res}
if(hasattr(other,'__rmul__'))return getattr(other,'__rmul__')(self)
$err("*",other)}
$IntDict.__name__='int'
$IntDict.__neg__=function(self){return -self}
$IntDict.__new__=function(cls){if(cls===undefined){throw _b_.TypeError('int.__new__(): not enough arguments')}
return{__class__:cls.$dict}}
$IntDict.__pos__=function(self){return self}
$IntDict.__pow__=function(self,other){if(isinstance(other,int)){switch(other.valueOf()){case 0:
return int(1)
case 1:
return int(self.valueOf())}
var res=Math.pow(self.valueOf(),other.valueOf())
if(!isFinite(res)){return res}
if(res>$B.min_int && res<$B.max_int){return res}
else{return int($B.LongInt.$dict.__pow__($B.LongInt(self),$B.LongInt(other)))}}
if(isinstance(other,_b_.float)){if(self>=0){return new Number(Math.pow(self,other.valueOf()))}
else{
return _b_.complex.$dict.__pow__(_b_.complex(self,0),other)}}
if(hasattr(other,'__rpow__'))return getattr(other,'__rpow__')(self)
$err("**",other)}
$IntDict.__repr__=function(self){if(self===int)return "<class 'int'>"
return self.toString()}
$IntDict.__rshift__=function(self,other){if(isinstance(other,int)){return int($B.LongInt.$dict.__rshift__($B.LongInt(self),$B.LongInt(other)))}
var rrshift=getattr(other,'__rrshift__',null)
if(rrshift!==null){return rrshift(self)}
$err('>>',other)}
$IntDict.__setattr__=function(self,attr,value){if(typeof self=="number"){if($IntDict[attr]===undefined){throw _b_.AttributeError("'int' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError("'int' object attribute '"+attr+"' is read-only")}}
self[attr]=value
return $N}
$IntDict.__str__=$IntDict.__repr__
$IntDict.__truediv__=function(self,other){if(isinstance(other,int)){if(other==0)throw ZeroDivisionError('division by zero')
if(other.__class__==$B.LongInt.$dict){return new Number(self/parseInt(other.value))}
return new Number(self/other)}
if(isinstance(other,_b_.float)){if(!other.valueOf())throw ZeroDivisionError('division by zero')
return new Number(self/other)}
if(isinstance(other,_b_.complex)){var cmod=other.real*other.real+other.imag*other.imag
if(cmod==0)throw ZeroDivisionError('division by zero')
return _b_.complex(self*other.real/cmod,-self*other.imag/cmod)}
if(hasattr(other,'__rtruediv__'))return getattr(other,'__rtruediv__')(self)
$err("/",other)}
$IntDict.bit_length=function(self){s=bin(self)
s=getattr(s,'lstrip')('-0b')
return s.length }
$IntDict.numerator=function(self){return self}
$IntDict.denominator=function(self){return int(1)}
$IntDict.imag=function(self){return int(0)}
$IntDict.real=function(self){return self}
$B.max_int32=(1<<30)* 2 - 1
$B.min_int32=- $B.max_int32
var $op_func=function(self,other){if(isinstance(other,int)){if(other.__class__===$B.LongInt.$dict){return $B.LongInt.$dict.__sub__($B.LongInt(self),$B.LongInt(other))}
if(self > $B.max_int32 ||self < $B.min_int32 ||
other > $B.max_int32 ||other < $B.min_int32){return $B.LongInt.$dict.__sub__($B.LongInt(self),$B.LongInt(other))}
return self-other}
if(isinstance(other,_b_.bool))return self-other
if(hasattr(other,'__rsub__'))return getattr(other,'__rsub__')(self)
$err("-",other)}
$op_func +='' 
var $ops={'&':'and','|':'or','^':'xor'}
for(var $op in $ops){var opf=$op_func.replace(/-/gm,$op)
opf=opf.replace(new RegExp('sub','gm'),$ops[$op])
eval('$IntDict.__'+$ops[$op]+'__ = '+opf)}
var $op_func=function(self,other){if(isinstance(other,int)){if(typeof other=='number'){var res=self.valueOf()-other.valueOf()
if(res>=$B.min_int && res<=$B.max_int){return res}
else{return $B.LongInt.$dict.__sub__($B.LongInt(self),$B.LongInt(other))}}else{return $B.LongInt.$dict.__sub__($B.LongInt(self),$B.LongInt(other))}}
if(isinstance(other,_b_.float)){return new Number(self-other)}
if(isinstance(other,_b_.complex)){return _b_.complex(self-other.real,-other.imag)}
if(isinstance(other,_b_.bool)){var bool_value=0;
if(other.valueOf())bool_value=1;
return self-bool_value}
if(isinstance(other,_b_.complex)){return _b_.complex(self.valueOf()- other.real,other.imag)}
if(hasattr(other,'__rsub__'))return getattr(other,'__rsub__')(self)
throw $err('-',other)}
$op_func +='' 
var $ops={'+':'add','-':'sub'}
for(var $op in $ops){var opf=$op_func.replace(/-/gm,$op)
opf=opf.replace(new RegExp('sub','gm'),$ops[$op])
eval('$IntDict.__'+$ops[$op]+'__ = '+opf)}
var $comp_func=function(self,other){if(other.__class__===$B.LongInt.$dict)return $B.LongInt.$dict.__gt__($B.LongInt(self),other)
if(isinstance(other,int))return self.valueOf()> other.valueOf()
if(isinstance(other,_b_.float))return self.valueOf()> other.valueOf()
if(isinstance(other,_b_.bool)){return self.valueOf()> _b_.bool.$dict.__hash__(other)}
if(hasattr(other,'__int__')||hasattr(other,'__index__')){return $IntDict.__gt__(self,$B.$GetInt(other))}
throw _b_.TypeError(
"unorderable types: int() > "+$B.get_class(other).__name__+"()")}
$comp_func +='' 
for(var $op in $B.$comps){eval("$IntDict.__"+$B.$comps[$op]+'__ = '+
$comp_func.replace(/>/gm,$op).replace(/__gt__/gm,'__'+$B.$comps[$op]+'__'))}
$B.make_rmethods($IntDict)
var $valid_digits=function(base){var digits=''
if(base===0)return '0'
if(base < 10){for(var i=0;i < base;i++)digits+=String.fromCharCode(i+48)
return digits}
var digits='0123456789'
for(var i=10;i < base;i++)digits+=String.fromCharCode(i+55)
return digits}
var int=function(value,base){
if(value===undefined){return 0}
if(typeof value=='number' && 
(base===undefined ||base==10)){return parseInt(value)}
if(base!==undefined){if(!isinstance(value,[_b_.str,_b_.bytes,_b_.bytearray])){throw TypeError("int() can't convert non-string with explicit base")}}
if(isinstance(value,_b_.complex)){throw TypeError("can't convert complex to int")}
var $ns=$B.args('int',2,{x:null,base:null},['x','base'],arguments,{'base':10},'null','null')
var value=$ns['x']
var base=$ns['base']
if(isinstance(value,_b_.float)&& base===10){if(value<$B.min_int ||value>$B.max_int){return $B.LongInt.$dict.$from_float(value)}
else{return value>0 ? Math.floor(value): Math.ceil(value)}}
if(!(base >=2 && base <=36)){
if(base !=0)throw _b_.ValueError("invalid base")}
if(typeof value=='number'){if(base==10){if(value < $B.min_int ||value > $B.max_int)return $B.LongInt(value)
return value}else if(value.toString().search('e')>-1){
throw _b_.OverflowError("can't convert to base "+base)}else{var res=parseInt(value,base)
if(res < $B.min_int ||res > $B.max_int)return $B.LongInt(value,base)
return res}}
if(value===true)return Number(1)
if(value===false)return Number(0)
if(value.__class__===$B.LongInt.$dict){var z=parseInt(value.value)
if(z>$B.min_int && z<$B.max_int){return z}
else{return value}}
base=$B.$GetInt(base)
if(isinstance(value,_b_.str))value=value.valueOf()
if(typeof value=="string"){var _value=value.trim()
if(_value.length==2 && base==0 &&(_value=='0b' ||_value=='0o' ||_value=='0x')){throw _b_.ValueError('invalid value')}
if(_value.length >2){var _pre=_value.substr(0,2).toUpperCase()
if(base==0){if(_pre=='0B')base=2
if(_pre=='0O')base=8
if(_pre=='0X')base=16}
if(_pre=='0B' ||_pre=='0O' ||_pre=='0X'){_value=_value.substr(2)}}
var _digits=$valid_digits(base)
var _re=new RegExp('^[+-]?['+_digits+']+$','i')
if(!_re.test(_value)){throw _b_.ValueError(
"invalid literal for int() with base "+base +": '"+_b_.str(value)+"'")}
if(base <=10 && !isFinite(value)){throw _b_.ValueError(
"invalid literal for int() with base "+base +": '"+_b_.str(value)+"'")}
var res=parseInt(_value,base)
if(res < $B.min_int ||res > $B.max_int)return $B.LongInt(_value,base)
return res}
if(isinstance(value,[_b_.bytes,_b_.bytearray])){var _digits=$valid_digits(base)
for(var i=0;i<value.source.length;i++){if(_digits.indexOf(String.fromCharCode(value.source[i]))==-1){throw _b_.ValueError("invalid literal for int() with base "+
base +": "+_b_.repr(value))}}
return Number(parseInt(getattr(value,'decode')('latin-1'),base))}
if(hasattr(value,'__int__'))return getattr(value,'__int__')()
if(hasattr(value,'__index__'))return getattr(value,'__index__')()
if(hasattr(value,'__trunc__')){var res=getattr(value,'__trunc__')(),int_func=_b_.getattr(res,'__int__',null)
if(int_func===null){throw TypeError('__trunc__ returned non-Integral (type '+
$B.get_class(res).__name__+')')}
var res=int_func()
if(isinstance(res,int)){return res}
throw TypeError('__trunc__ returned non-Integral (type '+
$B.get_class(res).__name__+')')}
throw _b_.ValueError(
"invalid literal for int() with base "+base +": '"+_b_.str(value)+"'")}
int.$dict=$IntDict
int.__class__=$B.$factory
$IntDict.$factory=int
_b_.int=int})(__BRYTHON__)
;(function($B){
eval($B.InjectBuiltins())
var $LongIntDict={__class__:$B.$type,__name__:'int'}
function add_pos(v1,v2){
var res='',carry=0,iself=v1.length,sv=0,x
for(var i=v2.length-1;i>=0;i--){iself--
if(iself<0){sv=0}else{sv=parseInt(v1.charAt(iself))}
x=(carry+sv+parseInt(v2.charAt(i))).toString()
if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}
else{res=x+res;carry=0}}
while(iself>0){iself--
x=(carry+parseInt(v1.charAt(iself))).toString()
if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}
else{res=x+res;carry=0}}
if(carry){res=carry+res}
return{__class__:$LongIntDict,value:res,pos:true}}
function check_shift(shift){
if(!isinstance(shift,LongInt)){throw TypeError("shift must be int, not '"+
$B.get_class(shift).__name__+"'")}
if(!shift.pos){throw ValueError("negative shift count")}}
function clone(obj){
var obj1={}
for(var attr in obj){obj1[attr]=obj[attr]}
return obj1}
function comp_pos(v1,v2){
if(v1.length>v2.length){return 1}
else if(v1.length<v2.length){return -1}
else{if(v1>v2){return 1}
else if(v1<v2){return -1}}
return 0}
function divmod_pos(v1,v2){
var v1_init=v1,quotient,mod
if(comp_pos(v1,v2)==-1){
quotient='0'
mod=LongInt(v1)}else if(v2==v1){
quotient='1';
mod=LongInt('0')}else{var quotient='',v1_init=v1
var left=v1.substr(0,v2.length)
if(v1<v2){left=v1.substr(0,v2.length+1)}
var right=v1.substr(left.length)
var mv2={}
while(true){
var candidate=Math.floor(parseInt(left)/parseInt(v2))+''
if(mv2[candidate]===undefined){mv2[candidate]=mul_pos(v2,candidate).value}
if(comp_pos(left,mv2[candidate])==-1){
candidate--
if(mv2[candidate]===undefined){mv2[candidate]=mul_pos(v2,candidate).value}}
quotient +=candidate
left=sub_pos(left,mv2[candidate]).value
if(right.length==0){break}
left +=right.charAt(0)
right=right.substr(1)}
mod=sub_pos(v1,mul_pos(quotient,v2).value)}
return[LongInt(quotient),mod]}
function split_chunks(s,size){var nb=Math.ceil(s.length/size),chunks=[],len=s.length
for(var i=0;i<nb;i++){var pos=len-size*(i+1)
if(pos<0){size +=pos;pos=0}
chunks.push(parseInt(s.substr(pos,size)))}
return chunks}
function mul_pos(x,y){
var chunk_size=6
var cx=split_chunks(x,chunk_size),cy=split_chunks(y,chunk_size)
var products={},len=cx.length+cy.length
for(var i=0;i<len-1;i++){products[i]=0}
for(var i=0;i<cx.length;i++){for(var j=0;j<cy.length;j++){products[i+j]+=cx[i]*cy[j]}}
var nb=len-1,pos
for(var i=0;i<len-1;i++){var chunks=split_chunks(products[i].toString(),chunk_size)
for(var j=1;j<chunks.length;j++){pos=i+j
if(products[pos]===undefined){products[pos]=parseInt(chunks[j]);nb=pos}
else{products[pos]+=parseInt(chunks[j])}}
products[i]=chunks[0]}
var result='',i=0,s
while(products[i]!==undefined){s=products[i].toString()
if(products[i+1]!==undefined){s='0'.repeat(chunk_size-s.length)+s}
result=s+result;
i++}
return LongInt(result)}
function sub_pos(v1,v2){
var res='',carry=0,i1=v1.length,sv=0,x
for(var i=v2.length-1;i>=0;i--){i1--
sv=parseInt(v1.charAt(i1))
x=(sv-carry-parseInt(v2.charAt(i)))
if(x<0){res=(10+x)+res;carry=1}
else{res=x+res;carry=0}}
while(i1>0){i1--
x=(parseInt(v1.charAt(i1))-carry)
if(x<0){res=(10+x)+res;carry=1}
else{res=x+res;carry=0}}
while(res.charAt(0)=='0' && res.length>1){res=res.substr(1)}
return{__class__:$LongIntDict,value:res,pos:true}}
$LongIntDict.$from_float=function(value){var s=Math.abs(value).toString(),v=s
if(s.search('e')>-1){var t=/-?(\d)(\.\d+)?e([+-])(\d*)/.exec(s),n1=t[1],n2=t[2],pos=t[3],exp=t[4]
if(pos=='+'){if(n2===undefined){v=n1+'0'.repeat(exp-1)}else{v=n1+n2+'0'.repeat(exp-1-n2.length)}}}
return{__class__:$LongIntDict,value: v,pos: value >=0}}
$LongIntDict.__abs__=function(self){return{__class__:$LongIntDict,value: self.value,pos:true}}
$LongIntDict.__add__=function(self,other){if(isinstance(other,_b_.float)){return _b_.float(parseInt(self.value)+other.value)}
if(typeof other=='number')other=LongInt(_b_.str(other))
var res
if(self.pos&&other.pos){
return add_pos(self.value,other.value)}else if(!self.pos&&!other.pos){
res=add_pos(self.value,other.value)
res.pos=false
return intOrLong(res)}else if(self.pos && !other.pos){
switch(comp_pos(self.value,other.value)){case 1:
res=sub_pos(self.value,other.value)
break
case 0:
res={__class__:$LongIntDict,value:0,pos:true}
break
case -1:
res=sub_pos(other.value,self.value)
res.pos=false
break}
return intOrLong(res)}else{
switch(comp_pos(self.value,other.value)){case 1:
res=sub_pos(self.value,other.value)
res.pos=false
break
case 0:
res={__class__:$LongIntDict,value:0,pos:true}
break
case -1:
res=sub_pos(other.value,self.value)
break}
return intOrLong(res)}}
$LongIntDict.__and__=function(self,other){if(typeof other=='number')other=LongInt(_b_.str(other))
var v1=$LongIntDict.__index__(self)
var v2=$LongIntDict.__index__(other)
if(v1.length<v2.length){var temp=v2;v2=v1;v1=temp}
var start=v1.length-v2.length
var res=''
for(var i=0;i<v2.length;i++){if(v1.charAt(start+i)=='1' && v2.charAt(i)=='1'){res +='1'}
else{res +='0'}}
return intOrLong(LongInt(res,2))}
$LongIntDict.__divmod__=function(self,other){if(typeof other=='number')other=LongInt(_b_.str(other))
var dm=divmod_pos(self.value,other.value)
if(self.pos!==other.pos){if(dm[0].value!='0'){dm[0].pos=false}
if(dm[1].value!='0'){
dm[0]=$LongIntDict.__sub__(dm[0],LongInt('1'))
dm[1]=$LongIntDict.__add__(dm[1],LongInt('1'))}}
return[intOrLong(dm[0]),intOrLong(dm[1])]}
$LongIntDict.__eq__=function(self,other){if(typeof other=='number')other=LongInt(_b_.str(other))
return self.value==other.value && self.pos==other.pos}
$LongIntDict.__float__=function(self){return new Number(parseFloat(self.value))}
$LongIntDict.__floordiv__=function(self,other){if(isinstance(other,_b_.float)){return _b_.float(parseInt(self.value)/other)}
if(typeof other=='number')other=LongInt(_b_.str(other))
return intOrLong($LongIntDict.__divmod__(self,other)[0])}
$LongIntDict.__ge__=function(self,other){if(typeof other=='number')other=LongInt(_b_.str(other))
if(self.pos !=other.pos){return !other.pos}
if(self.value.length>other.value.length){return self.pos}
else if(self.value.length<other.value.length){return !self.pos}
else{return self.pos ? self.value >=other.value : self.value <=other.value}}
$LongIntDict.__gt__=function(self,other){return !$LongIntDict.__le__(self,other)}
$LongIntDict.__index__=function(self){
var res='',pos=self.value.length,temp=self.value,d
while(true){d=divmod_pos(temp,'2')
res=d[1].value + res
temp=d[0].value
if(temp=='0'){break}}
return intOrLong(res)}
$LongIntDict.__invert__=function(self){return $LongIntDict.__sub__(LongInt('-1'),self)}
$LongIntDict.__le__=function(self,other){if(typeof other=='number')other=LongInt(_b_.str(other))
if(self.pos !==other.pos){return !self.pos}
if(self.value.length>other.value.length){return !self.pos}
else if(self.value.length<other.value.length){return self.pos}
else{return self.pos ? self.value <=other.value : self.value >=other.value}}
$LongIntDict.__lt__=function(self,other){return !$LongIntDict.__ge__(self,other)}
$LongIntDict.__lshift__=function(self,shift){var is_long=shift.__class__==$LongIntDict
if(is_long){var shift_value=parseInt(shift.value)
if(shift_value<0){throw _b_.ValueError('negative shift count')}
if(shift_value < $B.max_int){shift_safe=true;shift=shift_value}}
if(shift_safe){if(shift_value==0){return self}}else{shift=LongInt(shift)
if(shift.value=='0'){return self}}
var res=self.value
while(true){var x,carry=0,res1=''
for(var i=res.length-1;i>=0;i--){x=(carry+parseInt(res.charAt(i))*2).toString()
if(x.length==2){res1=x.charAt(1)+res1;carry=parseInt(x.charAt(0))}
else{res1=x+res1;carry=0}}
if(carry){res1=carry+res1}
res=res1
if(shift_safe){shift--
if(shift==0){break}}else{shift=sub_pos(shift.value,'1')
if(shift.value=='0'){break}}}
return intOrLong({__class__:$LongIntDict,value:res,pos:self.pos})}
$LongIntDict.__mod__=function(self,other){return intOrLong($LongIntDict.__divmod__(self,other)[1])}
$LongIntDict.__mro__=[$LongIntDict,_b_.int.$dict,_b_.object.$dict]
$LongIntDict.__mul__=function(self,other){switch(self){case Number.NEGATIVE_INFINITY:
case Number.POSITIVE_INFINITY:
var eq=_b_.getattr(other,'__eq__')
if(eq(0)){return NaN}
else if(_b_.getattr(other,'__gt__')(0)){return self}
else{return -self}}
if(isinstance(other,_b_.float)){return _b_.float(parseInt(self.value)*other)}
if(typeof other=='number')other=LongInt(_b_.str(other))
var res=mul_pos(self.value,other.value)
if(self.pos==other.pos){return intOrLong(res)}
res.pos=false
return intOrLong(res)}
$LongIntDict.__neg__=function(obj){return{__class__:$LongIntDict,value:obj.value,pos:!obj.pos}}
$LongIntDict.__or__=function(self,other){other=LongInt(other)
var v1=$LongIntDict.__index__(self)
var v2=$LongIntDict.__index__(other)
if(v1.length<v2.length){var temp=v2;v2=v1;v1=temp}
var start=v1.length-v2.length
var res=v1.substr(0,start)
for(var i=0;i<v2.length;i++){if(v1.charAt(start+i)=='1' ||v2.charAt(i)=='1'){res +='1'}
else{res +='0'}}
return intOrLong(LongInt(res,2))}
$LongIntDict.__pos__=function(self){return self}
$LongIntDict.__pow__=function(self,power){if(typeof power=="number"){power=LongInt(_b_.str(power))}else if(!isinstance(power,LongInt)){var msg="power must be a LongDict, not '"
throw TypeError(msg+$B.get_class(power).__name__+"'")}
if(!power.pos){if(self.value=='1'){return self}
return LongInt('0')}else if(power.value=='0'){return LongInt('1')}
var res={__class__:$LongIntDict,value:self.value,pos:self.pos}
var pow=power.value
while(true){pow=sub_pos(pow,'1').value
if(pow=='0'){break}
res=LongInt($LongIntDict.__mul__(res,self))}
return intOrLong(res)}
$LongIntDict.__rshift__=function(self,shift){shift=LongInt(shift)
if(shift.value=='0'){return self}
var res=self.value
while(true){res=divmod_pos(res,'2')[0].value
if(res.value=='0'){break}
shift=sub_pos(shift.value,'1')
if(shift.value=='0'){break}}
return intOrLong({__class__:$LongIntDict,value:res,pos:self.pos})}
$LongIntDict.__str__=$LongIntDict.__repr__=function(self){var res=""
if(!self.pos){res +='-'}
return res+self.value}
$LongIntDict.__sub__=function(self,other){if(isinstance(other,_b_.float)){return _b_.float(parseInt(self.value)-other.value)}
if(typeof other=='number')other=LongInt(_b_.str(other))
var res
if(self.pos && other.pos){switch(comp_pos(self.value,other.value)){case 1:
res=sub_pos(self.value,other.value)
break
case 0:
res={__class__:$LongIntDict,value:'0',pos:true}
break
case -1:
res=sub_pos(other.value,self.value)
res.pos=false
break}
return intOrLong(res)}else if(!self.pos && !other.pos){switch(comp_pos(self.value,other.value)){case 1:
res=sub_pos(self.value,other.value)
res.pos=false
break
case 0:
res={__class__:$LongIntDict,value:'0',pos:true}
break
case -1:
res=sub_pos(other.value,self.value)
break}
return intOrLong(res)}else if(self.pos && !other.pos){return intOrLong(add_pos(self.value,other.value))}else{res=add_pos(self.value,other.value)
res.pos=false
return intOrLong(res)}}
$LongIntDict.__truediv__=function(self,other){if(isinstance(other,LongInt)){return _b_.float(parseInt(self.value)/parseInt(other.value))}else if(isinstance(other,_b_.int)){return _b_.float(parseInt(self.value)/other)}else if(isinstance(other,_b_.float)){return _b_.float(parseInt(self.value)/other)}else{throw TypeError("unsupported operand type(s) for /: 'int' and '"+
$B.get_class(other).__name__+"'")}}
$LongIntDict.__xor__=function(self,other){other=LongInt(other)
var v1=$LongIntDict.__index__(self)
var v2=$LongIntDict.__index__(other)
if(v1.length<v2.length){var temp=v2;v2=v1;v1=temp}
var start=v1.length-v2.length
var res=v1.substr(0,start)
for(var i=0;i<v2.length;i++){if(v1.charAt(start+i)=='1' && v2.charAt(i)=='0'){res +='1'}
else if(v1.charAt(start+i)=='0' && v2.charAt(i)=='1'){res +='1'}
else{res +='0'}}
return intOrLong(LongInt(res,2))}
$LongIntDict.to_base=function(self,base){
var res='',v=self.value
while(v>0){var dm=divmod_pos(v,base.toString())
res=parseInt(dm[1].value).toString(base)+res
v=dm[0].value
if(v==0){break}}
return res}
function digits(base){
var is_digits={}
for(var i=0;i<base;i++){if(i==10){break}
is_digits[i]=true}
if(base>10){
for(var i=0;i<base-10;i++){is_digits[String.fromCharCode(65+i)]=true
is_digits[String.fromCharCode(97+i)]=true}}
return is_digits}
var MAX_SAFE_INTEGER=Math.pow(2,53)-1;
var MIN_SAFE_INTEGER=-MAX_SAFE_INTEGER;
function isSafeInteger(n){return(typeof n==='number' &&
Math.round(n)===n &&
MIN_SAFE_INTEGER <=n &&
n <=MAX_SAFE_INTEGER);}
function intOrLong(long){
var v=parseInt(long.value)*(long.pos ? 1 : -1)
if(v>MIN_SAFE_INTEGER && v<MAX_SAFE_INTEGER){return v}
return long}
function LongInt(value,base){if(arguments.length>2){throw _b_.TypeError("LongInt takes at most 2 arguments ("+
arguments.length+" given)")}
if(base===undefined){base=10}
else if(!isinstance(base,int)){throw TypeError("'"+$B.get_class(base).__name__+"' object cannot be interpreted as an integer")}
if(base<0 ||base==1 ||base>36){throw ValueError("LongInt() base must be >= 2 and <= 36")}
if(isinstance(value,_b_.float)){if(value===Number.POSITIVE_INFINITY ||value===Number.NEGATIVE_INFINITY){return value}
if(value>=0){value=new Number(Math.round(value.value))}
else{value=new Number(Math.ceil(value.value))}}else if(isinstance(value,_b_.bool)){if(value.valueOf())return int(1)
return int(0)}
if(typeof value=='number'){if(isSafeInteger(value)){value=value.toString()}
else if(value.constructor==Number){console.log('big number',value);value=value.toString()}
else{console.log('wrong value',value);throw ValueError("argument of long_int is not a safe integer")}}else if(value.__class__===$LongIntDict){return value}
else if(isinstance(value,_b_.bool)){value=_b_.bool.$dict.__int__(value)+''}
else if(typeof value!='string'){throw ValueError("argument of long_int must be a string, not "+
$B.get_class(value).__name__)}
var has_prefix=false,pos=true,start=0
while(value.charAt(0)==' ' && value.length){value=value.substr(1)}
while(value.charAt(value.length-1)==' ' && value.length){value=value.substr(0,value.length-1)}
if(value.charAt(0)=='+'){has_prefix=true}
else if(value.charAt(0)=='-'){has_prefix=true;pos=false}
if(has_prefix){
if(value.length==1){
throw ValueError('LongInt argument is not a valid number: "'+value+'"')}else{value=value.substr(1)}}
while(start<value.length-1 && value.charAt(start)=='0'){start++}
value=value.substr(start)
var is_digits=digits(base),point=-1
for(var i=0;i<value.length;i++){if(value.charAt(i)=='.' && point==-1){point=i}
else if(!is_digits[value.charAt(i)]){throw ValueError('LongInt argument is not a valid number: "'+value+'"')}}
if(point!=-1){value=value.substr(0,point)}
if(base!=10){
var coef='1',v10=LongInt(0),pos=value.length,digit_base10
while(pos--){digit_base10=parseInt(value.charAt(pos),base).toString()
digit_by_coef=mul_pos(coef,digit_base10).value
v10=add_pos(v10.value,digit_by_coef)
coef=mul_pos(coef,base.toString()).value}
return v10}
return{__class__:$LongIntDict,value:value,pos:pos}}
LongInt.__class__=$B.$factory
LongInt.$dict=$LongIntDict
$LongIntDict.$factory=LongInt
$B.LongInt=LongInt})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $ObjectDict=_b_.object.$dict
function $UnsupportedOpType(op,class1,class2){throw _b_.TypeError("unsupported operand type(s) for "+op+": '"+class1+"' and '"+class2+"'")}
var $ComplexDict={__class__:$B.$type,__dir__:$ObjectDict.__dir__,__name__:'complex',$native:true,descriptors:{real:true,imag:true}}
$ComplexDict.__abs__=function(self,other){return complex(abs(self.real),abs(self.imag))}
$ComplexDict.__bool__=function(self){return new Boolean(self.real ||self.imag)}
$ComplexDict.__class__=$B.$type
$ComplexDict.__eq__=function(self,other){if(isinstance(other,complex))return self.real==other.real && self.imag==other.imag
if(isinstance(other,_b_.int)){if(self.imag !=0)return False
return self.real==other.valueOf()}
if(isinstance(other,_b_.float)){if(self.imag !=0)return False
return self.real==other.value}
$UnsupportedOpType("==","complex",$B.get_class(other))}
$ComplexDict.__floordiv__=function(self,other){$UnsupportedOpType("//","complex",$B.get_class(other))}
$ComplexDict.__hash__=function(self){
if(self===undefined){return $ComplexDict.__hashvalue__ ||$B.$py_next_hash--}
return self.imag*1000003+self.real}
$ComplexDict.__init__=function(self,real,imag){self.toString=function(){return '('+real+'+'+imag+'j)'}}
$ComplexDict.__invert__=function(self){return ~self}
$ComplexDict.__mod__=function(self,other){throw _b_.TypeError("TypeError: can't mod complex numbers.")}
$ComplexDict.__mro__=[$ComplexDict,$ObjectDict]
$ComplexDict.__mul__=function(self,other){if(isinstance(other,complex))
return complex(self.real*other.real-self.imag*other.imag,self.imag*other.real + self.real*other.imag)
if(isinstance(other,_b_.int))
return complex(self.real*other.valueOf(),self.imag*other.valueOf())
if(isinstance(other,_b_.float))
return complex(self.real*other.value,self.imag*other.value)
if(isinstance(other,_b_.bool)){if(other.valueOf())return self
return complex(0)}
$UnsupportedOpType("*",complex,other)}
$ComplexDict.__name__='complex'
$ComplexDict.__ne__=function(self,other){return !$ComplexDict.__eq__(self,other)}
$ComplexDict.__neg__=function(self){return complex(-self.real,-self.imag)}
$ComplexDict.__new__=function(cls){if(cls===undefined)throw _b_.TypeError('complex.__new__(): not enough arguments')
return{__class__:cls.$dict}}
$ComplexDict.__pos__=function(self){return self}
$ComplexDict.__pow__=function(self,other){
var norm=Math.sqrt((self.real*self.real)+(self.imag*self.imag)),sin=self.imag/norm,cos=self.real/norm,res=Math.pow(norm,other),angle
if(cos==0){angle=sin==1 ? Math.PI/2 : 3*Math.PI/2}
else if(sin==0){angle=cos==1 ? 0 : Math.PI}
else{angle=Math.atan(sin/cos)}
return complex(res*Math.cos(angle*other),res*Math.sin(angle*other))}
$ComplexDict.__str__=$ComplexDict.__repr__=function(self){if(self.real==0)return self.imag+'j'
if(self.imag>=0)return '('+self.real+'+'+self.imag+'j)'
return '('+self.real+'-'+(-self.imag)+'j)'}
$ComplexDict.__sqrt__=function(self){if(self.imag==0)return complex(Math.sqrt(self.real))
var r=self.real,i=self.imag
var _sqrt=Math.sqrt(r*r+i*i)
var _a=Math.sqrt((r + sqrt)/2)
var _b=Number.sign(i)* Math.sqrt((-r + sqrt)/2)
return complex(_a,_b)}
$ComplexDict.__truediv__=function(self,other){if(isinstance(other,complex)){if(other.real==0 && other.imag==0){throw ZeroDivisionError('division by zero')}
var _num=self.real*other.real + self.imag*other.imag
var _div=other.real*other.real + other.imag*other.imag
var _num2=self.imag*other.real - self.real*other.imag
return complex(_num/_div,_num2/_div)}
if(isinstance(other,_b_.int)){if(!other.valueOf())throw ZeroDivisionError('division by zero')
return $ComplexDict.__truediv__(self,complex(other.valueOf()))}
if(isinstance(other,_b_.float)){if(!other.value)throw ZeroDivisionError('division by zero')
return $ComplexDict.__truediv__(self,complex(other.value))}
$UnsupportedOpType("//","complex",other.__class__)}
var $op_func=function(self,other){throw _b_.TypeError("TypeError: unsupported operand type(s) for -: 'complex' and '" + 
$B.get_class(other).__name__+"'")}
$op_func +='' 
var $ops={'&':'and','|':'ior','<<':'lshift','>>':'rshift','^':'xor'}
for(var $op in $ops){eval('$ComplexDict.__'+$ops[$op]+'__ = '+$op_func.replace(/-/gm,$op))}
$ComplexDict.__ior__=$ComplexDict.__or__
var $op_func=function(self,other){if(isinstance(other,complex))return complex(self.real-other.real,self.imag-other.imag)
if(isinstance(other,_b_.int))return complex($B.sub(self.real,other.valueOf()),self.imag)
if(isinstance(other,_b_.float))return complex(self.real - other.value,self.imag)
if(isinstance(other,_b_.bool)){var bool_value=0;
if(other.valueOf())bool_value=1;
return complex(self.real - bool_value,self.imag)}
throw _b_.TypeError("unsupported operand type(s) for -: "+self.__repr__()+
" and '"+$B.get_class(other).__name__+"'")}
$ComplexDict.__sub__=$op_func
$op_func +='' 
$op_func=$op_func.replace(/-/gm,'+').replace(/sub/gm,'add')
eval('$ComplexDict.__add__ = '+$op_func)
var $comp_func=function(self,other){throw _b_.TypeError("TypeError: unorderable types: complex() > " + 
$B.get_class(other).__name__ + "()")}
$comp_func +='' 
for(var $op in $B.$comps){eval("$ComplexDict.__"+$B.$comps[$op]+'__ = '+$comp_func.replace(/>/gm,$op))}
$B.make_rmethods($ComplexDict)
$ComplexDict.real=function(self){return new Number(self.real)}
$ComplexDict.imag=function(self){return new Number(self.imag)}
var complex_re=/^(\d*\.?\d*)([\+\-]?)(\d*\.?\d*)(j?)$/
var complex=function(real,imag){if(typeof real=='string'){if(imag!==undefined){throw _b_.TypeError("complex() can't take second arg if first is a string")}
var parts=complex_re.exec(real)
if(parts===null){throw _b_.ValueError("complex() arg is a malformed string")}else if(parts[1]=='.' ||parts[3]=='.'){throw _b_.ValueError("complex() arg is a malformed string")}else if(parts[4]=='j'){if(parts[2]==''){real=0;imag=parseFloat(parts[1])}else{real=parseFloat(parts[1])
imag=parts[3]=='' ? 1 : parseFloat(parts[3])
imag=parts[2]=='-' ? -imag : imag}}else{real=parseFloat(parts[1])
imag=0}}
var res={__class__:$ComplexDict,real:real ||0,imag:imag ||0}
res.__repr__=res.__str__=function(){if(real==0)return imag + 'j'
return '('+real+'+'+imag+'j)'}
return res}
complex.$dict=$ComplexDict
complex.__class__=$B.$factory
$ComplexDict.$factory=complex
$B.set_func_names($ComplexDict)
_b_.complex=complex})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $ObjectDict=_b_.object.$dict,$N=_b_.None
function $list(){
var args=[],pos=0
for(var i=0,_len_i=arguments.length;i < _len_i;i++){args[pos++]=arguments[i]}
return new $ListDict(args)}
var $ListDict={__class__:$B.$type,__name__:'list',$native:true,__dir__:$ObjectDict.__dir__}
$ListDict.__add__=function(self,other){var res=self.valueOf().concat(other.valueOf())
if(isinstance(self,tuple))res=tuple(res)
return res}
$ListDict.__contains__=function(self,item){var $=$B.args('__contains__',2,{self:null,item:null},['self','item'],arguments,{},null,null),self=$.self,item=$.item
var _eq=getattr(item,'__eq__')
var i=self.length
while(i--){if(_eq(self[i]))return true}
return false}
$ListDict.__delitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg
if(arg<0)pos=self.length+pos
if(pos>=0 && pos<self.length){self.splice(pos,1)
return $N}
throw _b_.IndexError('list index out of range')}
if(isinstance(arg,_b_.slice)){var step=arg.step;if(step===None){step=1}
var start=arg.start
if(start===None){start=step>0 ? 0 : self.length}
var stop=arg.stop
if(stop===None){stop=step >0 ? self.length : 0}
if(start<0)start=self.length+start
if(stop<0)stop=self.length+stop
var res=[],i=null,pos=0
if(step>0){if(stop>start){for(var i=start;i<stop;i+=step){if(self[i]!==undefined){res[pos++]=i}}}}else{
if(stop<start){for(var i=start;i>stop;i+=step){if(self[i]!==undefined){res[pos++]=i}}
res.reverse()}}
var i=res.length
while(i--){
self.splice(res[i],1)}
return $N}
if(hasattr(arg,'__int__')||hasattr(arg,'__index__')){$ListDict.__delitem__(self,_b_.int(arg))
return $N}
throw _b_.TypeError('list indices must be integer, not '+_b_.str(arg.__class__))}
$ListDict.__eq__=function(self,other){if(isinstance(other,$B.get_class(self).$factory)){if(other.length==self.length){var i=self.length
while(i--){if(!getattr(self[i],'__eq__')(other[i]))return false}
return true}}
return false}
$ListDict.__getitem__=function(self,arg){var $=$B.args('__getitem__',2,{self:null,key:null},['self','key'],arguments,{},null,null),self=$.self,key=$.key
if(isinstance(key,_b_.int)){var items=self.valueOf()
var pos=key
if(key<0)pos=items.length+pos
if(pos>=0 && pos<items.length)return items[pos]
throw _b_.IndexError('list index out of range')}
if(isinstance(key,_b_.slice)){
var s=_b_.slice.$dict.$conv_for_seq(key,self.length)
var res=[],i=null,items=self.valueOf(),pos=0,start=s.start,stop=s.stop,step=s.step
if(step > 0){if(stop <=start)return res;
for(var i=start;i<stop;i+=step){res[pos++]=items[i]}
return res;}else{
if(stop > start)return res;
for(var i=start;i>stop;i+=step){res[pos++]=items[i]}
return res;}}
if(hasattr(key,'__int__')||hasattr(key,'__index__')){return $ListDict.__getitem__(self,_b_.int(key))}
throw _b_.TypeError('list indices must be integer, not '+
$B.get_class(key).__name__)}
$ListDict.__ge__=function(self,other){if(!isinstance(other,[list,_b_.tuple])){throw _b_.TypeError("unorderable types: list() >= "+
$B.get_class(other).__name__+'()')}
var i=0
while(i<self.length){if(i>=other.length)return true
if(getattr(self[i],'__eq__')(other[i])){i++}
else return(getattr(self[i],"__ge__")(other[i]))}
return other.length==self.length}
$ListDict.__gt__=function(self,other){if(!isinstance(other,[list,_b_.tuple])){throw _b_.TypeError("unorderable types: list() > "+
$B.get_class(other).__name__+'()')}
var i=0
while(i<self.length){if(i>=other.length)return true
if(getattr(self[i],'__eq__')(other[i])){i++}
else return(getattr(self[i],'__gt__')(other[i]))}
return false}
$ListDict.__iadd__=function(){var $=$B.args('__iadd__',2,{self:null,x:null},['self','x'],arguments,{},null,null)
var x=list(iter($.x))
for(var i=0;i < x.length;i++){$.self.push(x[i])}
return $.self}
$ListDict.__imul__=function(){var $=$B.args('__imul__',2,{self:null,x:null},['self','x'],arguments,{},null,null)
var x=$B.$GetInt($.x),len=$.self.length,pos=len
if(x==0){$ListDict.clear($.self);return $.self}
for(var i=1;i < x;i++){for(j=0;j<len;j++){$.self[pos++]=$.self[j]}}
return $.self}
$ListDict.__init__=function(self,arg){var len_func=getattr(self,'__len__'),pop_func=getattr(self,'pop')
while(len_func())pop_func()
if(arg===undefined)return $N
var arg=iter(arg)
var next_func=getattr(arg,'__next__')
var pos=self.length
while(1){try{self[pos++]=next_func()}
catch(err){if(err.__name__=='StopIteration'){break}
else{throw err}}}
return $N}
var $list_iterator=$B.$iterator_class('list_iterator')
$ListDict.__iter__=function(self){return $B.$iterator(self,$list_iterator)}
$ListDict.__le__=function(self,other){return !$ListDict.__gt__(self,other)}
$ListDict.__len__=function(self){return self.length}
$ListDict.__lt__=function(self,other){return !$ListDict.__ge__(self,other)}
$ListDict.__mro__=[$ListDict,$ObjectDict]
$ListDict.__mul__=function(self,other){if(isinstance(other,_b_.int)){
var res=[],$temp=self.slice(),len=$temp.length
for(var i=0;i<other;i++){for(var j=0;j<len;j++){res.push($temp[j])}}
res.__class__=self.__class__
return res}
if(hasattr(other,'__int__')||hasattr(other,'__index__')){return $ListDict.__mul__(self,_b_.int(other))}
throw _b_.TypeError("can't multiply sequence by non-int of type '"+
$B.get_class(other).__name__+"'")}
$ListDict.__ne__=function(self,other){return !$ListDict.__eq__(self,other)}
$ListDict.__repr__=function(self){if(self===undefined)return "<class 'list'>"
var _r=[]
for(var i=0;i<self.length;i++){if(self[i]===self){_r.push('[...]')}
else{_r.push(_b_.repr(self[i]))}}
if(self.__class__===$TupleDict){if(self.length==1){return '('+_r[0]+',)'}
return '('+_r.join(', ')+')'}
return '['+_r.join(', ')+']'}
$ListDict.__setitem__=function(){var $=$B.args('__setitem__',3,{self:null,key:null,value:null},['self','key','value'],arguments,{},null,null),self=$.self,arg=$.key,value=$.value
if(isinstance(arg,_b_.int)){var pos=arg
if(arg<0)pos=self.length+pos
if(pos>=0 && pos<self.length){self[pos]=value}
else{throw _b_.IndexError('list index out of range')}
return $N}
if(isinstance(arg,_b_.slice)){var s=_b_.slice.$dict.$conv_for_seq(arg,self.length)
if(arg.step===null){$B.set_list_slice(self,s.start,s.stop,value)}
else{$B.set_list_slice_step(self,s.start,s.stop,s.step,value)}
return $N}
if(hasattr(arg,'__int__')||hasattr(arg,'__index__')){$ListDict.__setitem__(self,_b_.int(arg),value)
return $N}
throw _b_.TypeError('list indices must be integer, not '+arg.__class__.__name__)}
$ListDict.__str__=$ListDict.__repr__
$B.make_rmethods($ListDict)
var _ops=['add','sub']
$ListDict.append=function(){var $=$B.args('append',2,{self:null,x:null},['self','x'],arguments,{},null,null)
$.self[$.self.length]=$.x
return $N}
$ListDict.clear=function(){var $=$B.args('clear',1,{self:null},['self'],arguments,{},null,null)
while($.self.length){$.self.pop()}
return $N}
$ListDict.copy=function(){var $=$B.args('copy',1,{self:null},['self'],arguments,{},null,null)
return $.self.slice()}
$ListDict.count=function(){var $=$B.args('count',2,{self:null,x:null},['self','x'],arguments,{},null,null)
var res=0
_eq=getattr($.x,'__eq__')
var i=$.self.length
while(i--)if(_eq($.self[i]))res++
return res}
$ListDict.extend=function(){var $=$B.args('extend',2,{self:null,t:null},['self','t'],arguments,{},null,null)
other=list(iter($.t))
for(var i=0;i<other.length;i++){$.self.push(other[i])}
return $N}
$ListDict.index=function(){var $=$B.args('index',4,{self:null,x:null,start:null,stop:null},['self','x','start','stop'],arguments,{start:null,stop:null},null,null),self=$.self,start=$.start,stop=$.stop
var _eq=getattr($.x,'__eq__')
if(start===null){start=0}
else{if(start.__class__===$B.LongInt.$dict){start=parseInt(start.value)*(start.pos ? 1 : -1)}
if(start<0){start=Math.max(0,start+self.length)}}
if(stop===null){stop=self.length}
else{if(stop.__class__===$B.LongInt.$dict){stop=parseInt(stop.value)*(stop.pos ? 1 : -1)}
if(stop<0){stop=Math.min(self.length,stop+self.length)}}
for(var i=start;i < stop;i++){if(_eq(self[i]))return i}
throw _b_.ValueError(_b_.str($.x)+" is not in list")}
$ListDict.insert=function(){var $=$B.args('insert',3,{self:null,i:null,item:null},['self','i','item'],arguments,{},null,null)
$.self.splice($.i,0,$.item)
return $N}
$ListDict.pop=function(){var $=$B.args('pop',2,{self:null,pos:null},['self','pos'],arguments,{pos:null},null,null),self=$.self,pos=$.pos
if(pos===null){pos=self.length-1}
pos=$B.$GetInt(pos)
if(pos<0){pos+=self.length}
var res=self[pos]
if(res===undefined){throw _b_.IndexError('pop index out of range')}
self.splice(pos,1)
return res}
$ListDict.remove=function(){var $=$B.args('remove',2,{self:null,x:null},['self','x'],arguments,{},null,null)
var _eq=getattr($.x,'__eq__')
for(var i=0,_len_i=$.self.length;i < _len_i;i++){if(getattr($.self[i],'__eq__')($.x)){$.self.splice(i,1)
return $N}}
throw _b_.ValueError(_b_.str($.x)+" is not in list")}
$ListDict.reverse=function(self){var $=$B.args('reverse',1,{self:null},['self'],arguments,{},null,null),_len=$.self.length-1,i=parseInt($.self.length/2)
while(i--){var buf=$.self[i]
$.self[i]=$.self[_len-i]
$.self[_len-i]=buf}
return $N}
function $partition(arg,array,begin,end,pivot)
{var piv=array[pivot];
array=swap(array,pivot,end-1);
var store=begin;
if(arg===null){if(array.$cl!==false){
var le_func=_b_.getattr(array.$cl,'__le__')
for(var ix=begin;ix<end-1;++ix){if(le_func(array[ix],piv)){array=swap(array,store,ix);
++store;}}}else{for(var ix=begin;ix<end-1;++ix){if(getattr(array[ix],'__le__')(piv)){array=swap(array,store,ix);
++store;}}}}else{var len=array.length
for(var ix=begin;ix<end-1;++ix){var x=arg(array[ix])
if(array.length!==len){throw ValueError('list modified during sort')}
if(getattr(x,'__le__')(arg(piv))){array=swap(array,store,ix);
++store;}}}
array=swap(array,end-1,store);
return store;}
function swap(_array,a,b){var tmp=_array[a];
_array[a]=_array[b];
_array[b]=tmp;
return _array}
function $qsort(arg,array,begin,end)
{if(end-1>begin){var pivot=begin+Math.floor(Math.random()*(end-begin)),len=array.length
pivot=$partition(arg,array,begin,end,pivot);
$qsort(arg,array,begin,pivot);
$qsort(arg,array,pivot+1,end);}}
function $elts_class(self){
if(self.length==0){return null}
var cl=$B.get_class(self[0]),i=self.length
while(i--){
if($B.get_class(self[i])!==cl)return false}
return cl}
$ListDict.sort=function(self){var $=$B.args('sort',1,{self:null},['self'],arguments,{},null,'kw')
var func=null
var reverse=false
var kw_args=$.kw,keys=_b_.list(_b_.dict.$dict.keys(kw_args))
for(var i=0;i<keys.length;i++){if(keys[i]=="key"){func=getattr(kw_args.$string_dict[keys[i]],'__call__')}
else if(keys[i]=='reverse'){reverse=kw_args.$string_dict[keys[i]]}
else{throw _b_.TypeError("'"+keys[i]+
"' is an invalid keyword argument for this function")}}
if(self.length==0)return
self.$cl=$elts_class(self)
if(func===null && self.$cl===_b_.str.$dict){self.sort()}
else if(func===null && self.$cl===_b_.int.$dict){self.sort(function(a,b){return a-b})}
else{$qsort(func,self,0,self.length)}
if(reverse)$ListDict.reverse(self)
return(self.__brython__ ? $N : self)}
$B.set_func_names($ListDict)
$B.$list=function(t){t.__brython__=true;
return t}
function list(){var $=$B.args('list',1,{obj:null},['obj'],arguments,{obj:null},null,null),obj=$.obj
if(obj===null)return[]
if(Array.isArray(obj)){
obj=obj.slice()
obj.__brython__=true;
if(obj.__class__==$TupleDict){var res=obj.slice()
res.__class__=$ListDict
return res}
return obj}
var res=[],pos=0,arg=iter(obj),next_func=getattr(arg,'__next__')
while(1){try{res[pos++]=next_func()}
catch(err){if(!isinstance(err,_b_.StopIteration)){throw err}
break}}
res.__brython__=true 
return res}
list.__class__=$B.$factory
list.$dict=$ListDict
$ListDict.$factory=list
list.$is_func=true
list.__module__='builtins'
list.__bases__=[]
var $ListSubclassDict={__class__:$B.$type,__name__:'list'}
for(var $attr in $ListDict){if(typeof $ListDict[$attr]=='function'){$ListSubclassDict[$attr]=(function(attr){return function(){var args=[]
if(arguments.length>0){var args=[arguments[0].valueOf()]
var pos=1
for(var i=1,_len_i=arguments.length;i < _len_i;i++){args[pos++]=arguments[i]}}
return $ListDict[attr].apply(null,args)}})($attr)}}
$ListSubclassDict.__init__=function(self){var res=[],args=[res],pos=1
for(var i=1;i<arguments.length;i++){args[pos++]=arguments[i]}
$ListDict.__init__.apply(null,args)
self.valueOf=function(){return res}
return $N}
$ListSubclassDict.__mro__=[$ListSubclassDict,$ObjectDict]
$B.$ListSubclassFactory={__class__:$B.$factory,$dict:$ListSubclassDict}
function $tuple(arg){return arg}
var $TupleDict={__class__:$B.$type,__name__:'tuple',$native:true}
$TupleDict.__iter__=function(self){return $B.$iterator(self,$tuple_iterator)}
var $tuple_iterator=$B.$iterator_class('tuple_iterator')
function tuple(){var obj=list.apply(null,arguments)
obj.__class__=$TupleDict
return obj}
tuple.__class__=$B.$factory
tuple.$dict=$TupleDict
tuple.$is_func=true
$TupleDict.$factory=tuple
$TupleDict.__new__=$B.$__new__(tuple)
tuple.__module__='builtins'
for(var attr in $ListDict){switch(attr){case '__delitem__':
case '__setitem__':
case 'append':
case 'extend':
case 'insert':
case 'remove':
case 'pop':
case 'reverse':
case 'sort':
break
default: 
if($TupleDict[attr]===undefined){if(typeof $ListDict[attr]=='function'){$TupleDict[attr]=(function(x){return function(){return $ListDict[x].apply(null,arguments)}})(attr)}else{$TupleDict[attr]=$ListDict[attr]}}}}
$TupleDict.__delitem__=function(){throw _b_.TypeError("'tuple' object doesn't support item deletion")}
$TupleDict.__setitem__=function(){throw _b_.TypeError("'tuple' object does not support item assignment")}
$TupleDict.__eq__=function(self,other){
if(other===undefined)return self===tuple
return $ListDict.__eq__(self,other)}
$TupleDict.__hash__=function(self){
var x=0x345678
for(var i=0,_len_i=self.length;i < _len_i;i++){var y=_b_.hash(self[i]);
x=(1000003 * x)^ y & 0xFFFFFFFF;}
return x}
$TupleDict.__mro__=[$TupleDict,$ObjectDict]
$TupleDict.__name__='tuple'
$B.set_func_names($TupleDict)
_b_.list=list
_b_.tuple=tuple
_b_.object.$dict.__bases__=tuple()})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $ObjectDict=object.$dict
var $StringDict={__class__:$B.$type,__dir__:$ObjectDict.__dir__,__name__:'str',$native:true}
function normalize_start_end($){if($.start===null||$.start===_b_.None){$.start=0}
else if($.start<0){$.start +=$.self.length;$.start=Math.max(0,$.start)}
if($.end===null||$.end===_b_.None){$.end=$.self.length}
else if($.end<0){$.end +=$.self.length;$.end=Math.max(0,$.end)}
if(!isinstance($.start,_b_.int)||!isinstance($.end,_b_.int)){throw _b_.TypeError(
"slice indices must be integers or None or have an __index__ method")}}
function reverse(s){
return s.split('').reverse().join('')}
function check_str(obj){if(!_b_.isinstance(obj,str)){throw _b_.TypeError("can't convert '"+
$B.get_class(obj).__name__+"' object to str implicitely")}}
$StringDict.__add__=function(self,other){if(!(typeof other==="string")){try{return getattr(other,'__radd__')(self)}
catch(err){throw _b_.TypeError(
"Can't convert "+$B.get_class(other).__name__+" to str implicitely")}}
return self+other}
$StringDict.__contains__=function(self,item){if(!(typeof item==="string")){throw _b_.TypeError(
"'in <string>' requires string as left operand, not "+item.__class__)}
var nbcar=item.length
if(nbcar==0)return true 
if(self.length==0)return nbcar==0
for(var i=0,_len_i=self.length;i < _len_i;i++){if(self.substr(i,nbcar)==item)return true}
return false}
$StringDict.__delitem__=function(){throw _b_.TypeError("'str' object doesn't support item deletion")}
$StringDict.__dir__=$ObjectDict.__dir__ 
$StringDict.__eq__=function(self,other){if(other===undefined){
return self===str}
if(_b_.isinstance(other,_b_.str)){return other.valueOf()==self.valueOf()}
return other===self.valueOf()}
function preformat(self,fmt){if(fmt.empty){return _b_.str(self)}
if(fmt.type && fmt.type!='s'){throw _b_.ValueError("Unknown format code '"+fmt.type+
"' for object of type 'str'")}
return self}
$StringDict.__format__=function(self,format_spec){var fmt=new $B.parse_format_spec(format_spec)
fmt.align=fmt.align ||'<'
return $B.format_width(preformat(self,fmt),fmt)}
$StringDict.__getitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg
if(arg<0)pos+=self.length
if(pos>=0 && pos<self.length)return self.charAt(pos)
throw _b_.IndexError('string index out of range')}
if(isinstance(arg,slice)){var s=_b_.slice.$dict.$conv_for_seq(arg,self.length),start=s.start,stop=s.stop,step=s.step
var res='',i=null
if(step>0){if(stop<=start)return ''
for(var i=start;i<stop;i+=step)res +=self.charAt(i)}else{
if(stop>=start)return ''
for(var i=start;i>stop;i+=step)res +=self.charAt(i)}
return res}
if(isinstance(arg,bool))return self.__getitem__(_b_.int(arg))
throw _b_.TypeError('string indices must be integers')}
$StringDict.__hash__=function(self){if(self===undefined){return $StringDict.__hashvalue__ ||$B.$py_next_hash-- }
var hash=1;
for(var i=0,_len_i=self.length;i < _len_i;i++){hash=(101*hash + self.charCodeAt(i))& 0xFFFFFFFF}
return hash}
$StringDict.__init__=function(self,arg){self.valueOf=function(){return arg}
self.toString=function(){return arg}
return _b_.None}
var $str_iterator=$B.$iterator_class('str_iterator')
$StringDict.__iter__=function(self){var items=self.split('')
return $B.$iterator(items,$str_iterator)}
$StringDict.__len__=function(self){return self.length}
var kwarg_key=new RegExp('([^\\)]*)\\)')
var NotANumber=function(){this.name='NotANumber'}
var number_check=function(s){if(!isinstance(s,[_b_.int,_b_.float])){throw new NotANumber()}}
var get_char_array=function(size,char){if(size <=0)
return ''
return new Array(size + 1).join(char)}
var format_padding=function(s,flags,minus_one){var padding=flags.padding
if(!padding){
return s}
s=s.toString()
padding=parseInt(padding,10)
if(minus_one){
padding -=1}
if(!flags.left){return get_char_array(padding - s.length,flags.pad_char)+ s}else{
return s + get_char_array(padding - s.length,flags.pad_char)}}
var format_int_precision=function(val,flags){var precision=flags.precision
if(!precision){return val.toString()}
precision=parseInt(precision,10)
var s
if(val.__class__===$B.LongInt.$dict){s=$B.LongInt.$dict.to_base(val,10)}else{
s=val.toString()}
var sign=s[0]
if(s[0]==='-'){return '-' + get_char_array(precision - s.length + 1,'0')+ s.slice(1)}
return get_char_array(precision - s.length,'0')+ s}
var format_float_precision=function(val,upper,flags,modifier){var precision=flags.precision
if(isFinite(val)){val=modifier(val,precision,flags,upper)
return val}
if(val===Infinity){val='inf'}else if(val===-Infinity){val='-inf'}else{
val='nan'}
if(upper){return val.toUpperCase()}
return val}
var format_sign=function(val,flags){if(flags.sign){if(val >=0){return "+"}}else if(flags.space){if(val >=0){return " "}}
return ""}
var str_format=function(val,flags){
flags.pad_char=" " 
return format_padding(str(val),flags)}
var num_format=function(val,flags){number_check(val)
if(val.__class__===$B.LongInt.$dict){val=$B.LongInt.$dict.to_base(val,10)}else{
val=parseInt(val)}
var s=format_int_precision(val,flags)
if(flags.pad_char==='0'){if(val < 0){s=s.substring(1)
return '-' + format_padding(s,flags,true)}
var sign=format_sign(val,flags)
if(sign !==''){return sign + format_padding(s,flags,true)}}
return format_padding(format_sign(val,flags)+ s,flags)}
var repr_format=function(val,flags){flags.pad_char=" " 
return format_padding(repr(val),flags)}
var ascii_format=function(val,flags){flags.pad_char=" " 
return format_padding(ascii(val),flags)}
var _float_helper=function(val,flags){number_check(val)
if(!flags.precision){if(!flags.decimal_point){flags.precision=6}else{
flags.precision=0}}else{
flags.precision=parseInt(flags.precision,10)
validate_precision(flags.precision)}
return parseFloat(val)}
var trailing_zeros=/(.*?)(0+)([eE].*)/
var leading_zeros=/\.(0*)/
var trailing_dot=/\.$/
var validate_precision=function(precision){
if(precision > 20){precision=20 }}
var floating_point_format=function(val,upper,flags){val=_float_helper(val,flags)
var v=val.toString()
var v_len=v.length
var dot_idx=v.indexOf('.')
if(dot_idx < 0){dot_idx=v_len}
if(val < 1 && val > -1){var zeros=leading_zeros.exec(v)
var numzeros
if(zeros){numzeros=zeros[1].length}else{
numzeros=0}
if(numzeros >=4){val=format_sign(val,flags)+ format_float_precision(val,upper,flags,_floating_g_exp_helper)
if(!flags.alternate){var trl=trailing_zeros.exec(val)
if(trl){val=trl[1].replace(trailing_dot,'')+ trl[3]}}else{
if(flags.precision <=1){val=val[0]+ '.' + val.substring(1)}}
return format_padding(val,flags)}
flags.precision +=numzeros
return format_padding(format_sign(val,flags)+ format_float_precision(val,upper,flags,function(val,precision){val=val.toFixed(min(precision,v_len - dot_idx)+ numzeros)}),flags)}
if(dot_idx > flags.precision){val=format_sign(val,flags)+ format_float_precision(val,upper,flags,_floating_g_exp_helper)
if(!flags.alternate){var trl=trailing_zeros.exec(val)
if(trl){val=trl[1].replace(trailing_dot,'')+ trl[3]}}else{
if(flags.precision <=1){val=val[0]+ '.' + val.substring(1)}}
return format_padding(val,flags)}
return format_padding(format_sign(val,flags)+ format_float_precision(val,upper,flags,function(val,precision){if(!flags.decimal_point){precision=min(v_len - 1,6)}else if(precision > v_len){if(!flags.alternate){precision=v_len}}
if(precision < dot_idx){precision=dot_idx}
return val.toFixed(precision - dot_idx)}),flags)}
var _floating_g_exp_helper=function(val,precision,flags,upper){if(precision){--precision}
val=val.toExponential(precision)
var e_idx=val.lastIndexOf('e')
if(e_idx > val.length - 4){val=val.substring(0,e_idx + 2)+ '0' + val.substring(e_idx + 2)}
if(upper){return val.toUpperCase()}
return val}
var floating_point_decimal_format=function(val,upper,flags){val=_float_helper(val,flags)
return format_padding(format_sign(val,flags)+ format_float_precision(val,upper,flags,function(val,precision,flags){val=val.toFixed(precision)
if(precision===0 && flags.alternate){val +='.'}
return val}),flags)}
var _floating_exp_helper=function(val,precision,flags,upper){val=val.toExponential(precision)
var e_idx=val.lastIndexOf('e')
if(e_idx > val.length - 4){val=val.substring(0,e_idx + 2)+ '0' + val.substring(e_idx + 2)}
if(upper){return val.toUpperCase()}
return val}
var floating_point_exponential_format=function(val,upper,flags){val=_float_helper(val,flags)
return format_padding(format_sign(val,flags)+ format_float_precision(val,upper,flags,_floating_exp_helper),flags)}
var signed_hex_format=function(val,upper,flags){var ret
number_check(val)
if(val.__class__===$B.LongInt.$dict){ret=$B.LongInt.$dict.to_base(val,16)}else{
ret=parseInt(val)
ret=ret.toString(16)}
ret=format_int_precision(ret,flags)
if(upper){ret=ret.toUpperCase()}
if(flags.pad_char==='0'){if(val < 0){ret=ret.substring(1)
ret='-' + format_padding(ret,flags,true)}
var sign=format_sign(val,flags)
if(sign !==''){ret=sign + format_padding(ret,flags,true)}}
if(flags.alternate){if(ret.charAt(0)==='-'){if(upper){ret="-0X" + ret.slice(1)}else{
ret="-0x" + ret.slice(1)}}else{
if(upper){ret="0X" + ret}else{
ret="0x" + ret}}}
return format_padding(format_sign(val,flags)+ ret,flags)}
var octal_format=function(val,flags){number_check(val)
var ret 
if(val.__class__===$B.LongInt.$dict){ret=$B.LongInt.$dict.to_base(8)}else{
ret=parseInt(val)
ret=ret.toString(8)}
ret=format_int_precision(ret,flags)
if(flags.pad_char==='0'){if(val < 0){ret=ret.substring(1)
ret='-' + format_padding(ret,flags,true)}
var sign=format_sign(val,flags)
if(sign !==''){ret=sign + format_padding(ret,flags,true)}}
if(flags.alternate){if(ret.charAt(0)==='-'){ret="-0o" + ret.slice(1)}else{
ret="0o" + ret}}
return format_padding(ret,flags)}
var single_char_format=function(val,flags){if(isinstance(val,str)&& val.length==1)return val
try{
val=_b_.int(val)}catch(err){throw _b_.TypeError('%c requires int or char')}
return format_padding(chr(val),flags)}
var num_flag=function(c,flags){if(c==='0' && !flags.padding && !flags.decimal_point && !flags.left){flags.pad_char='0'
return}
if(!flags.decimal_point){flags.padding=(flags.padding ||"")+ c}else{
flags.precision=(flags.precision ||"")+ c}}
var decimal_point_flag=function(val,flags){if(flags.decimal_point){
throw new UnsupportedChar()}
flags.decimal_point=true}
var neg_flag=function(val,flags){flags.pad_char=' ' 
flags.left=true}
var space_flag=function(val,flags){flags.space=true}
var sign_flag=function(val,flags){flags.sign=true}
var alternate_flag=function(val,flags){flags.alternate=true}
var char_mapping={'s': str_format,'d': num_format,'i': num_format,'u': num_format,'o': octal_format,'r': repr_format,'a': ascii_format,'g': function(val,flags){return floating_point_format(val,false,flags)},'G': function(val,flags){return floating_point_format(val,true,flags)},'f': function(val,flags){return floating_point_decimal_format(val,false,flags)},'F': function(val,flags){return floating_point_decimal_format(val,true,flags)},'e': function(val,flags){return floating_point_exponential_format(val,false,flags)},'E': function(val,flags){return floating_point_exponential_format(val,true,flags)},'x': function(val,flags){return signed_hex_format(val,false,flags)},'X': function(val,flags){return signed_hex_format(val,true,flags)},'c': single_char_format,'0': function(val,flags){return num_flag('0',flags)},'1': function(val,flags){return num_flag('1',flags)},'2': function(val,flags){return num_flag('2',flags)},'3': function(val,flags){return num_flag('3',flags)},'4': function(val,flags){return num_flag('4',flags)},'5': function(val,flags){return num_flag('5',flags)},'6': function(val,flags){return num_flag('6',flags)},'7': function(val,flags){return num_flag('7',flags)},'8': function(val,flags){return num_flag('8',flags)},'9': function(val,flags){return num_flag('9',flags)},'-': neg_flag,' ': space_flag,'+': sign_flag,'.': decimal_point_flag,'#': alternate_flag}
var UnsupportedChar=function(){this.name="UnsupportedChar"}
$StringDict.__mod__=function(self,args){var length=self.length
var pos=0 |0
var argpos=null
if(args && _b_.isinstance(args,_b_.tuple)){argpos=0 |0}
var ret=''
var $get_kwarg_string=function(s){
++pos
var rslt=kwarg_key.exec(s.substring(newpos))
if(!rslt){throw _b_.ValueError("incomplete format key")}
var key=rslt[1]
newpos +=rslt[0].length
try{
var self=_b_.getattr(args.__class__,'__getitem__')(args,key)}catch(err){if(err.name==="KeyError"){throw err}
throw _b_.TypeError("format requires a mapping")}
return get_string_value(s,self)}
var $get_arg_string=function(s){
var self
if(argpos===null){
self=args}else{
try{
self=args[argpos++]}
catch(err){if(err.name==="IndexError"){throw _b_.TypeError("not enough arguments for format string")}else{
throw err}}}
return get_string_value(s,self)}
var get_string_value=function(s,self){
var flags={'pad_char': ' '}
do{
var func=char_mapping[s[newpos]]
try{
if(func===undefined){throw new UnsupportedChar()}else{
var ret=func(self,flags)
if(ret !==undefined){return ret}
++newpos}}catch(err){if(err.name==="UnsupportedChar"){invalid_char=s[newpos]
if(invalid_char===undefined){throw _b_.ValueError("incomplete format")}
throw _b_.ValueError("unsupported format character '" + invalid_char + 
"' (0x" + invalid_char.charCodeAt(0).toString(16)+ ") at index " + newpos)}else if(err.name==="NotANumber"){var try_char=s[newpos]
var cls=self.__class__
if(!cls){if(typeof(self)==='string'){cls='str'}else{
cls=typeof(self)}}else{
cls=cls.__name__}
throw _b_.TypeError("%" + try_char + " format: a number is required, not " + cls)}else{
throw err}}}while(true)}
do{
var newpos=self.indexOf('%',pos)
if(newpos < 0){ret +=self.substring(pos)
break}
ret +=self.substring(pos,newpos)
++newpos
if(newpos < length){if(self[newpos]==='%'){ret +='%'}else{
var tmp
if(self[newpos]==='('){++newpos
ret +=$get_kwarg_string(self)}else{
ret +=$get_arg_string(self)}}}else{
throw _b_.ValueError("incomplete format")}
pos=newpos + 1}while(pos < length)
return ret}
$StringDict.__mro__=[$StringDict,$ObjectDict]
$StringDict.__mul__=function(self,other){var $=$B.args('__mul__',2,{self:null,other:null},['self','other'],arguments,{},null,null)
if(!isinstance(other,_b_.int)){throw _b_.TypeError(
"Can't multiply sequence by non-int of type '"+
$B.get_class(other).__name__+"'")}
$res=''
for(var i=0;i<other;i++){$res+=self.valueOf()}
return $res}
$StringDict.__ne__=function(self,other){return other!==self.valueOf()}
$StringDict.__repr__=function(self){var res=self.replace(/\n/g,'\\\\n')
res=res.replace(/\\/g,'\\\\')
if(res.search('"')==-1 && res.search("'")==-1){return "'"+res+"'"}else if(self.search('"')==-1){return '"'+res+'"'}
var qesc=new RegExp("'","g")
res="'"+res.replace(qesc,"\\'")+"'" 
return res}
$StringDict.__setattr__=function(self,attr,value){return setattr(self,attr,value)}
$StringDict.__setitem__=function(self,attr,value){throw _b_.TypeError("'str' object does not support item assignment")}
$StringDict.__str__=function(self){if(self===undefined)return "<class 'str'>"
return self.toString()}
$StringDict.toString=function(){return 'string!'}
var $comp_func=function(self,other){if(typeof other !=="string"){throw _b_.TypeError(
"unorderable types: 'str' > "+$B.get_class(other).__name__+"()")}
return self > other}
$comp_func +='' 
var $comps={'>':'gt','>=':'ge','<':'lt','<=':'le'}
for(var $op in $comps){eval("$StringDict.__"+$comps[$op]+'__ = '+$comp_func.replace(/>/gm,$op))}
$B.make_rmethods($StringDict)
var $notimplemented=function(self,other){throw NotImplementedError("OPERATOR not implemented for class str")}
$StringDict.capitalize=function(self){if(self.length==0)return ''
return self.charAt(0).toUpperCase()+self.substr(1).toLowerCase()}
$StringDict.casefold=function(self){throw _b_.NotImplementedError("function casefold not implemented yet");}
$StringDict.center=function(self,width,fillchar){var $=$B.args("center",3,{self:null,width:null,fillchar:null},['self','width','fillchar'],arguments,{fillchar:' '},null,null)
if($.width<=self.length)return self
var pad=parseInt(($.width-self.length)/2)
var res=$.fillchar.repeat(pad)
res +=self + res
if(res.length<$.width){res +=$.fillchar}
return res}
$StringDict.count=function(){var $=$B.args('count',4,{self:null,sub:null,start:null,stop:null},['self','sub','start','stop'],arguments,{start:null,stop:null},null,null)
if(!(typeof $.sub==="string")){throw _b_.TypeError(
"Can't convert '"+$B.get_class($.sub).__name__+"' object to str implicitly")}
var substr=$.self
if($.start!==null){var _slice
if($.stop!==null){_slice=_b_.slice($.start,$.stop)}
else{_slice=_b_.slice($.start,$.self.length)}
substr=$StringDict.__getitem__.apply(null,[$.self].concat(_slice))}else{if($.self.length+$.sub.length==0){return 1}}
if($.sub.length==0){if($.start==$.self.length){return 1}
else if(substr.length==0){return 0}
return substr.length+1}
var n=0,pos=0
while(pos<substr.length){pos=substr.indexOf($.sub,pos)
if(pos>=0){n++;pos+=$.sub.length}else break;}
return n}
$StringDict.encode=function(self,encoding){if(encoding===undefined)encoding='utf-8'
if(encoding=='rot13' ||encoding=='rot_13'){
var res=''
for(var i=0,_len=self.length;i<_len ;i++){var char=self.charAt(i)
if(('a'<=char && char<='m')||('A'<=char && char<='M')){res +=String.fromCharCode(String.charCodeAt(char)+13)}else if(('m'<char && char<='z')||('M'<char && char<='Z')){res +=String.fromCharCode(String.charCodeAt(char)-13)}else{res +=char}}
return res}
return _b_.bytes(self,encoding)}
$StringDict.endswith=function(){
var $=$B.args("endswith",4,{self:null,suffix:null,start:null,end:null},['self','suffix','start','end'],arguments,{start:0,end:null},null,null)
normalize_start_end($)
var suffixes=$.suffix
if(!isinstance(suffixes,_b_.tuple)){suffixes=[suffixes]}
var s=$.self.substring($.start,$.end)
for(var i=0,_len_i=suffixes.length;i < _len_i;i++){suffix=suffixes[i]
if(!_b_.isinstance(suffix,str)){throw _b_.TypeError(
"endswith first arg must be str or a tuple of str, not int")}
if(suffix.length<=s.length &&
s.substr(s.length-suffix.length)==suffix)return true}
return false}
$StringDict.expandtabs=function(self,tabsize){var $=$B.args('expandtabs',2,{self:null,tabsize:null},['self','tabsize'],arguments,{tabsize:8},null,null)
var s=$B.$GetInt($.tabsize),col=0,pos=0,res=''
if(s==1){return self.replace(/\t/g,' ')}
while(pos<self.length){var car=self.charAt(pos)
switch(car){case '\t':
while(col%s > 0){res +=' ';col++}
break
case '\r':
case '\n':
res +=car
col=0
break
default:
res +=car
col++
break}
pos++}
return res}
$StringDict.find=function(){
var $=$B.args("$StringDict.find",4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:null},null,null)
check_str($.sub)
normalize_start_end($)
if(!isinstance($.start,_b_.int)||!isinstance($.end,_b_.int)){throw _b_.TypeError(
"slice indices must be integers or None or have an __index__ method")}
var s=$.self.substring($.start,$.end)
if($.sub.length==0 && $.start==$.self.length){return $.self.length}
if(s.length+$.sub.length==0){return -1}
var last_search=s.length-$.sub.length
for(var i=0;i<=last_search;i++){if(s.substr(i,$.sub.length)==$.sub){return $.start+i}}
return -1}
function parse_format(fmt_string){
var elts=fmt_string.split(':'),name,conv,spec,name_ext=[]
if(elts.length==1){
name=fmt_string}else{
name=elts[0]
spec=elts.splice(1).join(':')}
var elts=name.split('!')
if(elts.length>1){name=elts[0]
conv=elts[1]
if(conv.length!==1 ||'ras'.search(conv)==-1){throw _b_.ValueError('wrong conversion flag '+conv)}}
if(name!==undefined){
function name_repl(match){name_ext.push(match)
return ''}
var name_ext_re=/\.[_a-zA-Z][_a-zA-Z0-9]*|\[[_a-zA-Z][_a-zA-Z0-9]*\]|\[[0-9]+\]/g
name=name.replace(name_ext_re,name_repl)}
return{name: name,name_ext: name_ext,conv: conv,spec: spec||''}}
$StringDict.format=function(self){var $=$B.args('format',1,{self:null},['self'],arguments,{},'args','kw')
var pos=0,_len=self.length,car,text='',parts=[],rank=0,defaults={}
while(pos<_len){car=self.charAt(pos)
if(car=='{' && self.charAt(pos+1)=='{'){
text +='{'
pos+=2}else if(car=='}' && self.charAt(pos+1)=='}'){
text +='}'
pos+=2}else if(car=='{'){
parts.push(text)
var end=pos+1,nb=1
while(end<_len){if(self.charAt(end)=='{'){nb++;end++}
else if(self.charAt(end)=='}'){nb--;end++
if(nb==0){
var fmt_string=self.substring(pos+1,end-1)
var fmt_obj=parse_format(fmt_string)
if(!fmt_obj.name){fmt_obj.name=rank+''
rank++}
if(fmt_obj.spec!==undefined){
function replace_nested(name,key){if(/\d+/.exec(key)){
return _b_.tuple.$dict.__getitem__($.args,parseInt(key))}else{
return _b_.dict.$dict.__getitem__($.kw,key)}}
fmt_obj.spec=fmt_obj.spec.replace(/\{(.+?)\}/g,replace_nested)}
parts.push(fmt_obj)
text=''
break}}else{end++}}
if(nb>0){throw ValueError("wrong format "+self)}
pos=end}else{text +=car;pos++}}
if(text){parts.push(text)}
var res='',fmt
for(var i=0;i<parts.length;i++){
if(typeof parts[i]=='string'){res +=parts[i];continue}
fmt=parts[i]
if(fmt.name.charAt(0).search(/\d/)>-1){
var pos=parseInt(fmt.name),value=_b_.tuple.$dict.__getitem__($.args,pos)}else{
var value=_b_.dict.$dict.__getitem__($.kw,fmt.name)}
for(var j=0;j<fmt.name_ext.length;j++){var ext=fmt.name_ext[j]
if(ext.charAt(0)=='.'){
value=_b_.getattr(value,ext.substr(1))}else{
var key=ext.substr(1,ext.length-2)
if(key.charAt(0).search(/\d/)>-1){key=parseInt(key)}
value=_b_.getattr(value,'__getitem__')(key)}}
if(fmt.conv=='a'){value=_b_.ascii(value)}
else if(fmt.conv=='r'){value=_b_.repr(value)}
else if(fmt.conv=='s'){value=_b_.str(value)}
res +=_b_.getattr(value,'__format__')(fmt.spec)}
return res}
$StringDict.format_map=function(self){throw NotImplementedError("function format_map not implemented yet");}
$StringDict.index=function(self){
var res=$StringDict.find.apply(null,arguments)
if(res===-1)throw _b_.ValueError("substring not found")
return res}
$StringDict.isalnum=function(){var $=$B.args('isalnum',1,{self:null},['self'],arguments,{},null,null)
return /^[a-z0-9]+$/i.test($.self)}
$StringDict.isalpha=function(self){var $=$B.args('isalpha',1,{self:null},['self'],arguments,{},null,null)
return /^[a-z]+$/i.test($.self)}
$StringDict.isdecimal=function(){var $=$B.args('isdecimal',1,{self:null},['self'],arguments,{},null,null)
return /^[0-9]+$/.test($.self)}
$StringDict.isdigit=function(){var $=$B.args('isdigit',1,{self:null},['self'],arguments,{},null,null)
return /^[0-9]+$/.test($.self)}
$StringDict.isidentifier=function(){var $=$B.args('isidentifier',1,{self:null},['self'],arguments,{},null,null)
if($.self.search(/\$/)>-1){return false}
var last=$.self.charAt($.self.length-1)
if(' \n;'.search(last)>-1){return false}
var dummy={}
try{eval("dummy."+$.self);return true}
catch(err){return false}}
$StringDict.islower=function(){var $=$B.args('islower',1,{self:null},['self'],arguments,{},null,null)
return $.self==$.self.toLowerCase()&& $.self.search(/^\s*$/)==-1}
$StringDict.isnumeric=function(){var $=$B.args('isnumeric',1,{self:null},['self'],arguments,{},null,null)
return /^[0-9]+$/.test($.self)}
$StringDict.isprintable=function(){var $=$B.args('isprintable',1,{self:null},['self'],arguments,{},null,null)
return !/[^ -~]/.test($.self)}
$StringDict.isspace=function(){var $=$B.args('isspace',1,{self:null},['self'],arguments,{},null,null)
return /^\s+$/i.test($.self)}
$StringDict.istitle=function(){var $=$B.args('istitle',1,{self:null},['self'],arguments,{},null,null)
if($.self.search(/^\s*$/)>-1){return false}
function get_case(char){if(char.toLowerCase()==char.toUpperCase()){return false}
else if(char==char.toLowerCase()){return 'lower'}
else{return 'upper'}}
var pos=0,char,previous=false
while(pos<$.self.length){char=$.self.charAt(pos)
if(previous===undefined){previous=get_case(char)}
else{_case=get_case(char)
if(_case=='upper' && previous){return false}
else if(_case=='lower' && !previous){return false}
previous=_case}
pos++}
return true}
$StringDict.isupper=function(){var $=$B.args('isupper',1,{self:null},['self'],arguments,{},null,null)
return $.self==$.self.toUpperCase()&& $.self.search(/^\s*$/)==-1}
$StringDict.join=function(){var $=$B.args('join',2,{self:null,iterable:null},['self','iterable'],arguments,{},null,null)
var iterable=_b_.iter($.iterable)
var res=[],count=0
while(1){try{var obj2=_b_.next(iterable)
if(!isinstance(obj2,str)){throw _b_.TypeError(
"sequence item "+count+": expected str instance, "+$B.get_class(obj2).__name__+" found")}
res.push(obj2)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break}
else{throw err}}}
return res.join($.self)}
$StringDict.ljust=function(self){var $=$B.args('ljust',3,{self:null,width:null,fillchar:null},['self','width','fillchar'],arguments,{fillchar:' '},null,null)
if($.width <=self.length)return self
return self + $.fillchar.repeat($.width - self.length)}
$StringDict.lower=function(){var $=$B.args('lower',1,{self:null},['self'],arguments,{},null,null)
return $.self.toLowerCase()}
$StringDict.lstrip=function(self,x){var $=$B.args('lstrip',2,{self:null,chars:null},['self','chars'],arguments,{chars:_b_.None},null,null)
if($.chars===_b_.None){return $.self.replace(/^\s+/,'')}
return $.self.replace(new RegExp("^["+$.chars+"]*"),"")}
$StringDict.maketrans=function(){var $=$B.args('maketrans',3,{x:null,y:null,z:null},['x','y','z'],arguments,{y:null,z:null},null,null)
var _t=_b_.dict()
for(var i=0;i < 256;i++)_t.$numeric_dict[i]=i
if($.y===null && $.z===null){
if(!_b_.isinstance($.x,_b_.dict)){throw _b_.TypeError('maketrans only argument must be a dict')}
var items=_b_.list(_b_.dict.$dict.items($.x))
for(var i=0,len=items.length;i<len;i++){var k=items[i][0],v=items[i][1]
if(!_b_.isinstance(k,_b_.int)){if(_b_.isinstance(k,_b_.str)&& k.length==1){k=_b_.ord(k)}
else{throw _b_.TypeError("dictionary key "+k+
" is not int or 1-char string")}}
if(v!==_b_.None && !_b_.isinstance(v,[_b_.int,_b_.str])){throw _b_.TypeError("dictionary value "+v+
" is not None, integer or string")}
_t.$numeric_dict[k]=v}
return _t}else{
if(!(_b_.isinstance($.x,_b_.str)&& _b_.isinstance($.y,_b_.str))){throw _b_.TypeError("maketrans arguments must be strings")}else if($.x.length!==$.y.length){throw _b_.TypeError("maketrans arguments must be strings or same length")}else{var toNone={}
if($.z!==null){
if(!_b_.isinstance($.z,_b_.str)){throw _b_.TypeError('maketrans third argument must be a string')}
for(var i=0,len=$.z.length;i<len;i++){toNone[_b_.ord($.z.charAt(i))]=true}}
for(var i=0,len=$.x.length;i<len;i++){_t.$numeric_dict[_b_.ord($.x.charAt(i))]=_b_.ord($.y.charAt(i))}
for(var k in toNone){_t.$numeric_dict[k]=_b_.None}
return _t}}}
$StringDict.partition=function(){var $=$B.args('partition',2,{self:null,sep:null},['self','sep'],arguments,{},null,null)
if($.sep==''){throw _b_.ValueError('empty separator')}
check_str($.sep)
var i=$.self.indexOf($.sep)
if(i==-1)return _b_.tuple([$.self,'',''])
return _b_.tuple([$.self.substring(0,i),$.sep,$.self.substring(i+$.sep.length)])}
function $re_escape(str)
{var specials="[.*+?|()$^"
for(var i=0,_len_i=specials.length;i < _len_i;i++){var re=new RegExp('\\'+specials.charAt(i),'g')
str=str.replace(re,"\\"+specials.charAt(i))}
return str}
$StringDict.replace=function(self,old,_new,count){
var $=$B.args('replace',4,{self:null,old:null,$$new:null,count:null},['self','old','$$new','count'],arguments,{count:-1},null,null),count=$.count,self=$.self,old=$.old,_new=$.$$new
check_str(old)
check_str(_new)
if(!isinstance(count,[_b_.int,_b_.float])){throw _b_.TypeError("'" + $B.get_class(count).__name__ + 
"' object cannot be interpreted as an integer");}else if(isinstance(count,_b_.float)){throw _b_.TypeError("integer argument expected, got float");}
if(count==0){return self}
if(count.__class__==$B.LongInt.$dict){count=parseInt(count.value)}
if(old==''){if(_new==''){return self}
if(self==''){return _new}
var elts=self.split('')
if(count>-1 && elts.length>=count){var rest=elts.slice(count).join('')
return _new+elts.slice(0,count).join(_new)+rest}else{return _new+elts.join(_new)+_new}}else{var elts=$StringDict.split(self,old,count)}
var res=self,pos=-1
if(old.length==0){var res=_new
for(var i=0;i<elts.length;i++){res +=elts[i]+_new}
return res+rest}
if(count < 0)count=res.length;
while(count > 0){pos=res.indexOf(old,pos);
if(pos < 0)
break;
res=res.substr(0,pos)+ _new + res.substr(pos + old.length);
pos=pos + _new.length;
count--;}
return res;}
$StringDict.rfind=function(self){
var $=$B.args("rfind",4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:null},null,null)
normalize_start_end($)
check_str($.sub)
if($.sub.length==0){if($.start>$.self.length){return -1}
else{return $.self.length}}
var sublen=$.sub.length
for(var i=$.end-sublen;i>=$.start;i--){if($.self.substr(i,sublen)==$.sub){return i}}
return -1}
$StringDict.rindex=function(){
var res=$StringDict.rfind.apply(null,arguments)
if(res==-1){throw _b_.ValueError("substring not found")}
return res}
$StringDict.rjust=function(self){var $=$B.args("rjust",3,{self:null,width:null,fillchar:null},['self','width','fillchar'],arguments,{fillchar:' '},null,null)
if($.width <=self.length)return self
return $.fillchar.repeat($.width - self.length)+ self}
$StringDict.rpartition=function(self,sep){var $=$B.args('rpartition',2,{self:null,sep:null},['self','sep'],arguments,{},null,null)
check_str($.sep)
var self=reverse($.self),sep=reverse($.sep)
var items=$StringDict.partition(self,sep).reverse()
for(var i=0;i<items.length;i++){items[i]=items[i].split('').reverse().join('')}
return items}
$StringDict.rsplit=function(self){var $=$B.args("rsplit",3,{self:null,sep:null,maxsplit:null},['self','sep','maxsplit'],arguments,{sep:_b_.None,maxsplit:-1},null,null),sep=$.sep,maxsplit=$.maxsplit,self=$.self
var rev_str=reverse($.self),rev_sep=sep===_b_.None ? sep : reverse($.sep),rev_res=$StringDict.split(rev_str,rev_sep,$.maxsplit)
rev_res.reverse()
for(var i=0;i<rev_res.length;i++){rev_res[i]=reverse(rev_res[i])}
return rev_res}
$StringDict.rstrip=function(self,x){var $=$B.args('rstrip',2,{self:null,chars:null},['self','chars'],arguments,{chars:_b_.None},null,null)
if($.chars===_b_.None){return $.self.replace(/\s+$/,'')}
return $.self.replace(new RegExp("["+$.chars+"]*$"),"")}
$StringDict.split=function(){var args=[],pos=0
var $=$B.args("split",3,{self:null,sep:null,maxsplit:null},['self','sep','maxsplit'],arguments,{sep:_b_.None,maxsplit:-1},null,null)
var sep=$.sep,maxsplit=$.maxsplit,self=$.self
if(maxsplit.__class__===$B.LongInt.$dict){maxsplit=parseInt(maxsplit.value)}
if(sep=='')throw _b_.ValueError('empty separator')
if(sep===_b_.None){var res=[]
var pos=0
while(pos<self.length&&self.charAt(pos).search(/\s/)>-1){pos++}
if(pos===self.length-1){return[self]}
var name=''
while(1){if(self.charAt(pos).search(/\s/)===-1){if(name===''){name=self.charAt(pos)}
else{name+=self.charAt(pos)}}else{if(name!==''){res.push(name)
if(maxsplit!==-1&&res.length===maxsplit+1){res.pop()
res.push(name+self.substr(pos))
return res}
name=''}}
pos++
if(pos>self.length-1){if(name){res.push(name)}
break}}
return res}else{var res=[],s='',pos=0,seplen=sep.length
if(maxsplit==0){return[self]}
while(pos<self.length){if(self.substr(pos,seplen)==sep){res.push(s)
pos +=seplen
if(maxsplit>-1 && res.length>=maxsplit){res.push(self.substr(pos))
return res}
s=''}else{s +=self.charAt(pos)
pos++}}
res.push(s)
return res}}
$StringDict.splitlines=function(self){var $=$B.args('splitlines',2,{self:null,keepends:null},['self','keepends'],arguments,{keepends:false},null,null)
if(!_b_.isinstance($.keepends,[_b_.bool,_b_.int])){throw _b_.TypeError('integer argument expected, got '+
$B.get_class($.keepends).__name)}
var keepends=_b_.int($.keepends)
if(keepends){var res=[],start=pos,pos=0,x,self=$.self
while(pos<self.length){if(self.substr(pos,2)=='\r\n'){res.push(self.substring(start,pos+2))
start=pos+2
pos=start}else if(self.charAt(pos)=='\r' ||self.charAt(pos)=='\n'){res.push(self.substring(start,pos+1))
start=pos+1
pos=start}else{pos++}}
var rest=self.substr(start)
if(rest){res.push(rest)}
return res}else{var self=$.self.replace(/[\r\n]$/,'')
return self.split(/\n|\r\n|\r/)}}
$StringDict.startswith=function(){
var $=$B.args("startswith",4,{self:null,prefix:null,start:null,end:null},['self','prefix','start','end'],arguments,{start:0,end:null},null,null)
normalize_start_end($)
var prefixes=$.prefix
if(!isinstance(prefixes,_b_.tuple)){prefixes=[prefixes]}
var s=$.self.substring($.start,$.end)
for(var i=0,_len_i=prefixes.length;i < _len_i;i++){prefix=prefixes[i]
if(!_b_.isinstance(prefix,str)){throw _b_.TypeError(
"endswith first arg must be str or a tuple of str, not int")}
if(s.substr(0,prefix.length)==prefix)return true}
return false}
$StringDict.strip=function(){var $=$B.args('strip',2,{self:null,chars:null},['self','chars'],arguments,{chars:_b_.None},null,null)
return $StringDict.rstrip($StringDict.lstrip($.self,$.chars),$.chars)}
$StringDict.swapcase=function(self){var $=$B.args('swapcase',1,{self:null},['self'],arguments,{},null,null)
return $.self.replace(/([a-z])|([A-Z])/g,function($0,$1,$2)
{return($1)? $0.toUpperCase(): $0.toLowerCase()})}
$StringDict.title=function(self){var $=$B.args('title',1,{self:null},['self'],arguments,{},null,null)
var res='',previous=false
function is_cased(c){return c.toLowerCase()!=c.toUpperCase()}
for(var i=0;i<$.self.length;i++){var char=$.self.charAt(i),cased=is_cased(char)
if(!previous && cased){res +=char.toUpperCase()}else if(previous){res+=char.toLowerCase()}
else{res+=char}
previous=cased}
return res}
$StringDict.translate=function(self,table){var res=[],pos=0
if(isinstance(table,_b_.dict)){for(var i=0,_len_i=self.length;i < _len_i;i++){var repl=_b_.dict.$dict.get(table,self.charCodeAt(i),-1)
if(repl==-1){res[pos++]=self.charAt(i)}
else if(repl!==None){res[pos++]=_b_.chr(repl)}}}
return res.join('')}
$StringDict.upper=function(){var $=$B.args('lower',1,{self:null},['self'],arguments,{},null,null)
return $.self.toUpperCase()}
$StringDict.zfill=function(self,width){var $=$B.args('zfill',2,{self:null,width:null},['self','width'],arguments,{},null,null)
if($.width <=self.length){return self}
switch(self.charAt(0)){case '+':
case '-':
return self.charAt(0)+'0'.repeat($.width-self.length)+self.substr(1)
default:
return '0'.repeat(width - self.length)+self}}
function str(arg){if(arg===undefined)return ''
switch(typeof arg){case 'string': return arg
case 'number': return arg.toString()}
try{if(arg.__class__===$B.$factory){
var func=$B.$type.__getattribute__(arg.$dict.__class__,'__str__')
if(func.__func__===_b_.object.$dict.__str__){return func(arg)}
return func()}
var f=getattr(arg,'__str__')
return f()}
catch(err){
try{
var f=getattr(arg,'__repr__')
return getattr(f,'__call__')()}catch(err){if($B.debug>1){console.log(err)}
console.log('Warning - no method __str__ or __repr__, default to toString',arg)
return arg.toString()}}}
str.__class__=$B.$factory
str.$dict=$StringDict
$StringDict.$factory=str
$StringDict.__new__=function(cls){if(cls===undefined){throw _b_.TypeError('str.__new__(): not enough arguments')}
return{__class__:cls.$dict}}
$B.set_func_names($StringDict)
var $StringSubclassDict={__class__:$B.$type,__name__:'str'}
for(var $attr in $StringDict){if(typeof $StringDict[$attr]=='function'){$StringSubclassDict[$attr]=(function(attr){return function(){var args=[],pos=0
if(arguments.length>0){var args=[arguments[0].valueOf()],pos=1
for(var i=1,_len_i=arguments.length;i < _len_i;i++){args[pos++]=arguments[i]}}
return $StringDict[attr].apply(null,args)}})($attr)}}
$StringSubclassDict.__mro__=[$StringSubclassDict,$ObjectDict]
$B.$StringSubclassFactory={__class__:$B.$factory,$dict:$StringSubclassDict}
_b_.str=str
$B.parse_format_spec=function(spec){if(spec==''){this.empty=true}
else{var pos=0,aligns='<>=^',digits='0123456789',types='bcdeEfFgGnosxX%',align_pos=aligns.indexOf(spec.charAt(0))
if(align_pos!=-1){if(spec.charAt(1)&& aligns.indexOf(spec.charAt(1))!=-1){
this.fill=spec.charAt(0)
this.align=spec.charAt(1)
pos=2}else{
this.align=aligns[align_pos];
this.fill=' ';
pos++}}else{align_pos=aligns.indexOf(spec.charAt(1))
if(spec.charAt(1)&& align_pos!=-1){
this.align=aligns[align_pos]
this.fill=spec.charAt(0)
pos=2}}
var car=spec.charAt(pos)
if(car=='+'||car=='-'||car==' '){this.sign=car;
pos++;
car=spec.charAt(pos);}
if(car=='#'){this.alternate=true;pos++;car=spec.charAt(pos)}
if(car=='0'){
this.fill='0'
this.align='='
pos++;car=spec.charAt(pos)}
while(car && digits.indexOf(car)>-1){if(this.width===undefined){this.width=car}
else{this.width+=car}
pos++;car=spec.charAt(pos)}
if(this.width!==undefined){this.width=parseInt(this.width)}
if(car==','){this.comma=true;pos++;car=spec.charAt(pos)}
if(car=='.'){if(digits.indexOf(spec.charAt(pos+1))==-1){throw _b_.ValueError("Missing precision in format spec")}
this.precision=spec.charAt(pos+1)
pos+=2;car=spec.charAt(pos)
while(car && digits.indexOf(car)>-1){this.precision+=car;pos++;car=spec.charAt(pos)}
this.precision=parseInt(this.precision)}
if(car && types.indexOf(car)>-1){this.type=car;pos++;car=spec.charAt(pos)}
if(pos!==spec.length){
throw _b_.ValueError("Invalid format specifier")}}
this.toString=function(){return(this.fill===undefined ? '' : _b_.str(this.fill))+
(this.align||'')+
(this.sign||'')+
(this.alternate ? '#' : '')+
(this.sign_aware ? '0' : '')+
(this.width ||'')+
(this.comma ? ',' : '')+
(this.precision ? '.'+this.precision : '')+
(this.type ||'')}}
$B.format_width=function(s,fmt){if(fmt.width && s.length<fmt.width){var fill=fmt.fill ||' ',align=fmt.align ||'<',missing=fmt.width-s.length
switch(align){case '<':
return s+fill.repeat(missing)
case '>':
return fill.repeat(missing)+s
case '=':
if('+-'.indexOf(s.charAt(0))>-1){return s.charAt(0)+fill.repeat(missing)+s.substr(1)}else{return fill.repeat(missing)+s }
case '^':
left=parseInt(missing/2)
return fill.repeat(left)+s+fill.repeat(missing-left)}}
return s}})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $ObjectDict=_b_.object.$dict,str_hash=_b_.str.$dict.__hash__,$N=_b_.None
function $DictClass($keys,$values){this.iter=null
this.__class__=$DictDict
$DictDict.clear(this)
var setitem=$DictDict.__setitem__
var i=$keys.length
while(i--)setitem($keys[i],$values[i])}
var $DictDict={__class__:$B.$type,__name__ : 'dict',$native:true,__dir__:$ObjectDict.__dir__}
var $key_iterator=function(d){this.d=d
this.current=0
this.iter=new $item_generator(d)}
$key_iterator.prototype.length=function(){return this.iter.length }
$key_iterator.prototype.next=function(){return this.iter.next()[0]}
var $value_iterator=function(d){this.d=d
this.current=0
this.iter=new $item_generator(d)}
$value_iterator.prototype.length=function(){return this.iter.length }
$value_iterator.prototype.next=function(){return this.iter.next()[1]}
var $item_generator=function(d){this.i=0
if(d.$jsobj){this.items=[]
for(var attr in d.$jsobj){if(attr.charAt(0)!='$'){this.items.push([attr,d.$jsobj[attr]])}}
this.length=this.items.length;
return}
var items=[]
var pos=0
for(var k in d.$numeric_dict){items[pos++]=[parseFloat(k),d.$numeric_dict[k]]}
for(var k in d.$string_dict){items[pos++]=[k,d.$string_dict[k]]}
for(var k in d.$object_dict){items[pos++]=d.$object_dict[k]}
this.items=items
this.length=items.length}
$item_generator.prototype.next=function(){if(this.i < this.items.length){return this.items[this.i++]}
throw _b_.StopIteration("StopIteration")}
$item_generator.prototype.as_list=function(){return this.items}
var $item_iterator=function(d){this.d=d
this.current=0
this.iter=new $item_generator(d)}
$item_iterator.prototype.length=function(){return this.iter.items.length }
$item_iterator.prototype.next=function(){return _b_.tuple(this.iter.next())}
var $copy_dict=function(left,right){var _l=new $item_generator(right).as_list()
var si=$DictDict.__setitem__
var i=_l.length
while(i--)si(left,_l[i][0],_l[i][1])}
$iterator_wrapper=function(items,klass){var res={__class__:klass,__iter__:function(){items.iter.i=0;return res},__len__:function(){return items.length()},__next__:function(){return items.next()},__repr__:function(){return klass.__name__+'('+ new $item_generator(items).as_list().join(',')+ ')'},}
res.__str__=res.toString=res.__repr__
return res}
$DictDict.__bool__=function(self){var $=$B.args('__bool__',1,{self:null},['self'],arguments,{},null,null)
return $DictDict.__len__(self)> 0}
$DictDict.__contains__=function(){var $=$B.args('__contains__',2,{self:null,item:null},['self','item'],arguments,{},null,null),self=$.self,item=$.item
if(self.$jsobj)return self.$jsobj[item]!==undefined
switch(typeof item){case 'string':
return self.$string_dict[item]!==undefined
case 'number':
return self.$numeric_dict[item]!==undefined}
var _key=hash(item)
if(self.$str_hash[_key]!==undefined &&
_b_.getattr(item,'__eq__')(self.$str_hash[_key])){return true}
if(self.$numeric_dict[_key]!==undefined &&
_b_.getattr(item,'__eq__')(_key)){return true}
if(self.$object_dict[_key]!==undefined){
var _eq=getattr(item,'__eq__')
if(_eq(self.$object_dict[_key][0])){return true}}
return false}
$DictDict.__delitem__=function(){var $=$B.args('__eq__',2,{self:null,arg:null},['self','arg'],arguments,{},null,null),self=$.self,arg=$.arg
if(self.$jsobj){if(self.$jsobj[arg]===undefined){throw KeyError(arg)}
delete self.$jsobj[arg]
return $N}
switch(typeof arg){case 'string':
if(self.$string_dict[arg]===undefined)throw KeyError(_b_.str(arg))
delete self.$string_dict[arg]
delete self.$str_hash[str_hash(arg)]
return $N
case 'number':
if(self.$numeric_dict[arg]===undefined)throw KeyError(_b_.str(arg))
delete self.$numeric_dict[arg]
return $N}
var _key=hash(arg)
if(self.$object_dict[_key]!==undefined){delete self.$object_dict[_key]}
if(self.$jsobj)delete self.$jsobj[arg]
return $N}
$DictDict.__eq__=function(){var $=$B.args('__eq__',2,{self:null,other:null},['self','other'],arguments,{},null,null),self=$.self,other=$.other
if(!isinstance(other,dict))return false
if($DictDict.__len__(self)!=$DictDict.__len__(other)){return false}
if((self.$numeric_dict.length!=other.$numeric_dict.length)||
(self.$string_dict.length!=other.$string_dict.length)||
(self.$object_dict.length!=other.$object_dict.length)){return false}
for(var k in self.$numeric_dict){if(!_b_.getattr(other.$numeric_dict[k],'__eq__')(self.$numeric_dict[k])){return false}}
for(var k in self.$string_dict){if(!_b_.getattr(other.$string_dict[k],'__eq__')(self.$string_dict[k])){return false}}
for(var k in self.$object_dict){if(!_b_.getattr(other.$object_dict[k][1],'__eq__')(self.$object_dict[k][1])){return false}}
return true}
$DictDict.__getitem__=function(){var $=$B.args('__getitem__',2,{self:null,arg:null},['self','arg'],arguments,{},null,null),self=$.self,arg=$.arg
if(self.$jsobj){if(self.$jsobj[arg]===undefined){return None}
return self.$jsobj[arg]}
switch(typeof arg){case 'string':
if(self.$string_dict[arg]!==undefined)return self.$string_dict[arg]
break
case 'number':
if(self.$numeric_dict[arg]!==undefined)return self.$numeric_dict[arg]}
var _key=hash(arg)
var sk=self.$str_hash[_key]
if(sk!==undefined && _b_.getattr(arg,'__eq__')(sk)){return self.$string_dict[sk]}
if(self.$numeric_dict[_key]!==undefined &&
_b_.getattr(arg,'__eq__')(_key)){return self.$numeric_dict[_key]}
if(self.$object_dict[_key]!==undefined){return self.$object_dict[_key][1]}
if(hasattr(self,'__missing__'))return getattr(self,'__missing__')(arg)
throw KeyError(_b_.str(arg))}
$DictDict.__hash__=function(self){if(self===undefined){return $DictDict.__hashvalue__ ||$B.$py_next_hash-- }
throw _b_.TypeError("unhashable type: 'dict'");}
$DictDict.__init__=function(self){var args=[],pos=0
for(var i=1;i<arguments.length;i++){args[pos++]=arguments[i]}
$DictDict.clear(self)
switch(args.length){case 0:
return
case 1:
var obj=args[0]
if(Array.isArray(obj)){var i=obj.length
var si=$DictDict.__setitem__
while(i-->0)si(self,obj[i-1][0],obj[i-1][1])
return $N}else if(isinstance(obj,dict)){$copy_dict(self,obj)
return $N}
if(obj.__class__===$B.JSObject.$dict){
var si=$DictDict.__setitem__
for(var attr in obj.js)si(self,attr,obj.js[attr])
self.$jsobj=obj.js
return $N}}
var $ns=$B.args('dict',0,{},[],args,{},'args','kw')
var args=$ns['args']
var kw=$ns['kw']
if(args.length>0){if(isinstance(args[0],dict)){$B.$copy_dict(self,args[0])
return $N}
if(Array.isArray(args[0])){var src=args[0]
var i=src.length -1
var si=$DictDict.__setitem__
while(i-->0)si(self,src[i-1][0],src[i-1][1])}else{var iterable=iter(args[0])
while(1){try{var elt=next(iterable)
var key=getattr(elt,'__getitem__')(0)
var value=getattr(elt,'__getitem__')(1)
$DictDict.__setitem__(self,key,value)}catch(err){if(err.__name__==='StopIteration'){break}
throw err}}}}
if($DictDict.__len__(kw)> 0)$copy_dict(self,kw)
return $N}
var $dict_iterator=$B.$iterator_class('dict iterator')
$DictDict.__iter__=function(self){return $DictDict.keys(self)}
$DictDict.__len__=function(self){var _count=0
if(self.$jsobj){for(var attr in self.$jsobj){if(attr.charAt(0)!='$'){_count++}}
return _count}
for(var k in self.$numeric_dict)_count++
for(var k in self.$string_dict)_count++
for(var k in self.$object_dict)_count+=self.$object_dict[k].length
return _count}
$DictDict.__mro__=[$DictDict,$ObjectDict]
$DictDict.__ne__=function(self,other){return !$DictDict.__eq__(self,other)}
$DictDict.__next__=function(self){if(self.$iter==null){self.$iter=new $item_generator(self)}
try{
return self.$iter.next()}catch(err){if(err.__name__ !=="StopIteration"){throw err }}}
$DictDict.__repr__=function(self){if(self===undefined)return "<class 'dict'>"
if(self.$jsobj){
var res=[]
for(var attr in self.$jsobj){if(attr.charAt(0)=='$' ||attr=='__class__'){continue}
else{try{res.push("'"+attr+"': "+_b_.repr(self.$jsobj[attr]))}catch(err){}}}
return '{'+res.join(', ')+'}'}
var _objs=[self]
var res=[],pos=0
var items=new $item_generator(self).as_list()
for(var i=0;i < items.length;i++){var itm=items[i]
if(itm[1]===self){res[pos++]=repr(itm[0])+': {...}'}
else{res[pos++]=repr(itm[0])+': '+repr(itm[1])}}
return '{'+ res.join(', ')+'}'}
$DictDict.__setitem__=function(self,key,value){var $=$B.args('__setitem__',3,{self:null,key:null,value:null},['self','key','value'],arguments,{},null,null),self=$.self,key=$.key,value=$.value
if(self.$jsobj){self.$jsobj[key]=value;return}
switch(typeof key){case 'string':
self.$string_dict[key]=value
self.$str_hash[str_hash(key)]=key
return $N
case 'number':
self.$numeric_dict[key]=value
return $N}
var _key=hash(key)
var _eq=getattr(key,'__eq__')
if(self.$numeric_dict[_key]!==undefined && _eq(_key)){self.$numeric_dict[_key]=value
return $N}
var sk=self.$str_hash[_key]
if(sk!==undefined && _eq(sk)){self.$string_dict[sk]=value
return $N}
self.$object_dict[_key]=[key,value]
return $N}
$DictDict.__str__=$DictDict.__repr__
$B.make_rmethods($DictDict)
$DictDict.clear=function(){
var $=$B.args('clear',1,{self:null},['self'],arguments,{},null,null),self=$.self
self.$numeric_dict={}
self.$string_dict={}
self.$str_hash={}
self.$object_dict={}
if(self.$jsobj)self.$jsobj={}
return $N}
$DictDict.copy=function(self){
var $=$B.args('copy',1,{self:null},['self'],arguments,{},null,null),self=$.self,res=_b_.dict()
$copy_dict(res,self)
return res}
$DictDict.fromkeys=function(){var $=$B.args('fromkeys',3,{cls:null,keys:null,value:null},['cls','keys','value'],arguments,{value:_b_.None},null,null),keys=$.keys,value=$.value
var res=dict()
var keys_iter=_b_.iter(keys)
while(1){try{var key=_b_.next(keys_iter)
$DictDict.__setitem__(res,key,value)}catch(err){if($B.is_exc(err,[_b_.StopIteration])){return res}
throw err}}}
$DictDict.fromkeys.$type='classmethod'
$DictDict.get=function(){var $=$B.args('get',3,{self:null,key:null,_default:null},['self','key','_default'],arguments,{_default:$N},null,null)
try{return $DictDict.__getitem__($.self,$.key)}
catch(err){if(_b_.isinstance(err,_b_.KeyError)){return $._default}
else{throw err}}}
var $dict_itemsDict=$B.$iterator_class('dict_items')
$DictDict.items=function(self){if(arguments.length > 1){var _len=arguments.length - 1
var _msg="items() takes no arguments ("+_len+" given)"
throw _b_.TypeError(_msg)}
return $iterator_wrapper(new $item_iterator(self),$dict_itemsDict)}
var $dict_keysDict=$B.$iterator_class('dict_keys')
$DictDict.keys=function(self){if(arguments.length > 1){var _len=arguments.length - 1
var _msg="keys() takes no arguments ("+_len+" given)"
throw _b_.TypeError(_msg)}
return $iterator_wrapper(new $key_iterator(self),$dict_keysDict)}
$DictDict.pop=function(){var $=$B.args('pop',3,{self:null,key: null,_default:null},['self','key','_default'],arguments,{_default:$N},null,null),self=$.self,key=$.key,_default=$._default
try{var res=$DictDict.__getitem__(self,key)
$DictDict.__delitem__(self,key)
return res}catch(err){if(err.__name__==='KeyError'){if(_default!==undefined)return _default
throw err}
throw err}}
$DictDict.popitem=function(self){try{var itm=new $item_iterator(self).next()
$DictDict.__delitem__(self,itm[0])
return _b_.tuple(itm)}catch(err){if(err.__name__=="StopIteration"){throw KeyError("'popitem(): dictionary is empty'")}}}
$DictDict.setdefault=function(){var $=$B.args('setdefault',3,{self:null,key: null,_default:null},['self','key','_default'],arguments,{},null,null),self=$.self,key=$.key,_default=$._default
try{return $DictDict.__getitem__(self,key)}
catch(err){if(_default===undefined)_default=None
$DictDict.__setitem__(self,key,_default)
return _default}}
$DictDict.update=function(self){var $=$B.args('update',1,{'self':null},['self'],arguments,{},'args','kw'),self=$.self,args=$.args,kw=$.kw
if(args.length>0){var o=args[0]
if(isinstance(o,dict)){$copy_dict(self,o)}else if(hasattr(o,'__getitem__')&& hasattr(o,'keys')){var _keys=_b_.list(getattr(o,'keys')())
var si=$DictDict.__setitem__
var i=_keys.length
while(i--){
var _value=getattr(o,'__getitem__')(_keys[i])
si(self,_keys[i],_value)}}}
$copy_dict(self,kw)
return $N}
var $dict_valuesDict=$B.$iterator_class('dict_values')
$DictDict.values=function(self){if(arguments.length > 1){var _len=arguments.length - 1
var _msg="values() takes no arguments ("+_len+" given)"
throw _b_.TypeError(_msg)}
return $iterator_wrapper(new $value_iterator(self),$dict_valuesDict)}
function dict(args,second){if(second===undefined && Array.isArray(args)){
var res={__class__:$DictDict,$numeric_dict :{},$object_dict :{},$string_dict :{},$str_hash:{},length: 0}
var i=-1,stop=args.length-1
var si=$DictDict.__setitem__
while(i++<stop){var item=args[i]
switch(typeof item[0]){case 'string':
res.$string_dict[item[0]]=item[1]
res.$str_hash[str_hash(item[0])]=item[0]
break;
case 'number':
res.$numeric_dict[item[0]]=item[1]
break
default:
si(res,item[0],item[1])
break}}
return res}
var res={__class__:$DictDict}
$DictDict.clear(res)
var _args=[res],pos=1
for(var i=0,_len_i=arguments.length;i < _len_i;i++){_args[pos++]=arguments[i]}
$DictDict.__init__.apply(null,_args)
return res}
dict.__class__=$B.$factory
dict.$dict=$DictDict
$DictDict.$factory=dict
$DictDict.__new__=$B.$__new__(dict)
_b_.dict=dict
$B.$dict_iterator=function(d){return new $item_generator(d)}
$B.$dict_length=$DictDict.__len__
$B.$dict_getitem=$DictDict.__getitem__
$B.$dict_get=$DictDict.get
$B.$dict_set=$DictDict.__setitem__
$B.$dict_contains=$DictDict.__contains__
$B.$dict_items=function(d){return new $item_generator(d).as_list()}
$B.$copy_dict=$copy_dict 
$B.$dict_get_copy=$DictDict.copy 
var mappingproxyDict={__class__ : $B.$type,__name__ : "mappingproxy"}
mappingproxyDict.__mro__=[mappingproxyDict,_b_.object.$dict]
mappingproxyDict.__setitem__=function(){throw _b_.TypeError("'mappingproxy' object does not support item assignment")}
function mappingproxy(obj){var res=obj_dict(obj)
res.__class__=mappingproxyDict
return res}
mappingproxy.__class__=$B.$factory
mappingproxy.$dict=mappingproxyDict
mappingproxyDict.$factory=mappingproxy
$B.mappingproxy=mappingproxy
$B.obj_dict=function(obj){var res=dict()
res.$jsobj=obj
return res}})(__BRYTHON__)
;(function($B){var _=$B.builtins,$N=_.None
function create_type(obj){return $B.get_class(obj).$factory()}
function clone(obj){var res=create_type(obj)
res.$items=obj.$items.slice()
return res }
var $SetDict={__class__:$B.$type,__dir__:_.object.$dict.__dir__,__name__:'set',$native:true}
$SetDict.__add__=function(self,other){throw _.TypeError("unsupported operand type(s) for +: 'set' and " + 
typeof other )}
$SetDict.__and__=function(self,other,accept_iter){$test(accept_iter,other)
var res=create_type(self)
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(_.getattr(other,'__contains__')(self.$items[i])){$SetDict.add(res,self.$items[i])}}
return res}
$SetDict.__contains__=function(self,item){if(self.$num &&(typeof item=='number')){if(isNaN(item)){
for(var i=self.$items.length-1;i>=0;i--){if(isNaN(self.$items[i])){return true}}
return false}else{return self.$items.indexOf(item)>-1}}
if(self.$str &&(typeof item=='string')){return self.$items.indexOf(item)>-1}
if(! _b_.isinstance(item,set)){_b_.hash(item)}
var eq_func=_b_.getattr(item,'__eq__')
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(_.getattr(self.$items[i],'__eq__')(item))return true}
return false}
$SetDict.__eq__=function(self,other){
if(other===undefined)return self===set
if(_.isinstance(other,_.set)){if(other.$items.length==self.$items.length){for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if($SetDict.__contains__(self,other.$items[i])===false)return false}
return true}
return false}
if(_.isinstance(other,[_.list])){if(_.len(other)!=self.$items.length)return false
for(var i=0,_len_i=_.len(other);i < _len_i;i++){var _value=getattr(other,'__getitem__')(i)
if($SetDict.__contains__(self,_value)===false)return false}
return true}
if(_.hasattr(other,'__iter__')){
if(_.len(other)!=self.$items.length)return false
var _it=_.iter(other)
while(1){try{
var e=_.next(_it)
if(!$SetDict.__contains__(self,e))return false}catch(err){if(err.__name__=="StopIteration"){break}
throw err}}
return true}
return false}
$SetDict.__format__=function(self,format_string){return $SetDict.__str__(self)}
$SetDict.__ge__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return !$SetDict.__lt__(self,other)}else{return _b_.object.$dict.__ge__(self,other)}}
$SetDict.__gt__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return !$SetDict.__le__(self,other)}else{return _b_.object.$dict.__gt__(self,other)}}
$SetDict.__init__=function(self){var $=$B.args('__init__',2,{self:null,iterable:null},['self','iterable'],arguments,{iterable:[]},null,null),self=$.self,iterable=$.iterable
if(_.isinstance(iterable,[set,frozenset])){self.$items=iterable.$items
return $N}
var it=_b_.iter(iterable),obj={$items:[],$str:true,$num:true}
while(1){try{var item=_.next(it)
$SetDict.add(obj,item)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break}
throw err}}
self.$items=obj.$items
return $N}
var $set_iterator=$B.$iterator_class('set iterator')
$SetDict.__iter__=function(self){var it=$B.$iterator(self.$items,$set_iterator),len=self.$items.length,nxt=it.__next__
it.__next__=function(){if(it.__len__()!=len){throw _b_.RuntimeError("size changed during iteration")}
return nxt()}
return it}
$SetDict.__le__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){var cfunc=_.getattr(other,'__contains__')
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(!cfunc(self.$items[i]))return false}
return true}else{return _b_.object.$dict.__le__(self,other)}}
$SetDict.__len__=function(self){return self.$items.length}
$SetDict.__lt__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return($SetDict.__le__(self,other)&&
$SetDict.__len__(self)<_.getattr(other,'__len__')())}else{return _b_.object.$dict['__lt__'](self,other)}}
$SetDict.__mro__=[$SetDict,_.object.$dict]
$SetDict.__ne__=function(self,other){return !$SetDict.__eq__(self,other)}
$SetDict.__or__=function(self,other,accept_iter){
var res=clone(self)
var func=_.getattr(_.iter(other),'__next__')
while(1){try{$SetDict.add(res,func())}
catch(err){if(_.isinstance(err,_.StopIteration)){break}
throw err}}
res.__class__=self.__class__
return res}
$SetDict.__str__=$SetDict.toString=$SetDict.__repr__=function(self){frozen=self.$real==='frozen'
self.$cycle=self.$cycle===undefined ? 0 : self.$cycle+1
if(self.$items.length===0){if(frozen)return 'frozenset()'
return 'set()'}
var klass_name=$B.get_class(self).__name__,head=klass_name+'({',tail='})'
if(head=='set('){head='{';tail='}'}
var res=[]
if(self.$cycle){self.$cycle--
return klass_name+'(...)'}
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){var r=_.repr(self.$items[i])
if(r===self||r===self.$items[i]){res.push('{...}')}
else{res.push(r)}}
res=res.join(', ')
self.$cycle--
return head+res+tail}
$SetDict.__sub__=function(self,other,accept_iter){
$test(accept_iter,other,'-')
var res=create_type(self)
var cfunc=_.getattr(other,'__contains__')
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(!cfunc(self.$items[i])){res.$items.push(self.$items[i])}}
return res}
$SetDict.__xor__=function(self,other,accept_iter){
$test(accept_iter,other,'^')
var res=create_type(self)
var cfunc=_.getattr(other,'__contains__')
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(!cfunc(self.$items[i])){$SetDict.add(res,self.$items[i])}}
for(var i=0,_len_i=other.$items.length;i < _len_i;i++){if(!$SetDict.__contains__(self,other.$items[i])){$SetDict.add(res,other.$items[i])}}
return res}
function $test(accept_iter,other,op){if(accept_iter===undefined && !_.isinstance(other,[set,frozenset])){throw _b_.TypeError("unsupported operand type(s) for "+op+
": 'set' and '"+$B.get_class(other).__name__+"'")}}
$B.make_rmethods($SetDict)
$SetDict.add=function(){var $=$B.args('add',2,{self:null,item:null},['self','item'],arguments,{},null,null),self=$.self,item=$.item
_b_.hash(item)
if(self.$str && !(typeof item=='string')){self.$str=false}
if(self.$num && !(typeof item=='number')){self.$num=false}
if(self.$num||self.$str){if(self.$items.indexOf(item)==-1){self.$items.push(item)}
return $N}
var cfunc=_.getattr(item,'__eq__')
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(cfunc(self.$items[i]))return}
self.$items.push(item)
return $N}
$SetDict.clear=function(){var $=$B.args('clear',1,{self:null},['self'],arguments,{},null,null)
$.self.$items=[];
return $N}
$SetDict.copy=function(){var $=$B.args('copy',1,{self:null},['self'],arguments,{},null,null)
if(_b_.isinstance($.self,frozenset)){return $.self}
var res=set()
for(var i=0,_len_i=$.self.$items.length;i < _len_i;i++){res.$items[i]=$.self.$items[i]}
return res}
$SetDict.difference_update=function(self){var $=$B.args('difference_update',1,{self:null},['self'],arguments,{},'args',null)
for(var i=0;i<$.args.length;i++){var s=set($.args[i]),_next=_b_.getattr(_b_.iter(s),'__next__'),item
while(true){try{item=_next()
var _type=typeof item
if(_type=='string' ||_type=="number"){var _index=self.$items.indexOf(item)
if(_index > -1){self.$items.splice(_index,1)}}else{
for(var j=0;j < self.$items.length;j++){if(getattr(self.$items[j],'__eq__')(item)){self.$items.splice(j,1)}}}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break}
throw err}}}
return $N}
$SetDict.discard=function(){var $=$B.args('discard',2,{self:null,item:null},['self','item'],arguments,{},null,null)
try{$SetDict.remove($.self,$.item)}
catch(err){if(!_b_.isinstance(err,[_b_.KeyError,_b_.LookupError])){throw err}}
return $N}
$SetDict.intersection_update=function(){
var $=$B.args('intersection_update',1,{self:null},['self'],arguments,{},'args',null),self=$.self
for(var i=0;i<$.args.length;i++){var remove=[],s=set($.args[i])
for(var j=0;j<self.$items.length;j++){var _item=self.$items[j],_type=typeof _item
if(_type=='string' ||_type=="number"){if(s.$items.indexOf(_item)==-1){remove.push(j)}}else{var found=false
for(var k=0;!found && k < s.$items.length;k++){if(_b_.getattr(s.$items[k],'__eq__')(_item)){found=true}}
if(!found){remove.push(j)}}}
remove.sort().reverse()
for(var j=0;j<remove.length;j++){self.$items.splice(remove[j],1)}}
return $N}
$SetDict.isdisjoint=function(){var $=$B.args('is_disjoint',2,{self:null,other:null},['self','other'],arguments,{},null,null)
for(var i=0,_len_i=$.self.$items.length;i < _len_i;i++){if(_.getattr($.other,'__contains__')($.self.$items[i]))return false}
return true}
$SetDict.pop=function(self){if(self.$items.length===0)throw _.KeyError('pop from an empty set')
return self.$items.pop()}
$SetDict.remove=function(self,item){
var $=$B.args('remove',2,{self:null,item:null},['self','item'],arguments,{},null,null),self=$.self,item=$.item
if(!_b_.isinstance(item,set)){_b_.hash(item)}
if(typeof item=='string' ||typeof item=='number'){var _i=self.$items.indexOf(item)
if(_i==-1)throw _.KeyError(item)
self.$items.splice(_i,1)
return $N}
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(_.getattr(self.$items[i],'__eq__')(item)){self.$items.splice(i,1)
return $N}}
throw _.KeyError(item)}
$SetDict.symmetric_difference_update=function(self,s){
var $=$B.args('symmetric_difference_update',2,{self:null,s:null},['self','s'],arguments,{},null,null),self=$.self,s=$.s
var _next=_b_.getattr(_b_.iter(s),'__next__'),item,remove=[],add=[]
while(true){try{item=_next()
var _type=typeof item
if(_type=='string' ||_type=="number"){var _index=self.$items.indexOf(item)
if(_index > -1){remove.push(_index)}else{add.push(item)}}else{
var found=false
for(var j=0;!found && j < self.$items.length;j++){if(_b_.getattr(self.$items[j],'__eq__')(item)){remove.push(j)
found=true}}
if(!found){add.push(item)}}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break}
throw err}}
remove.sort().reverse()
for(var i=0;i<remove.length;i++){if(remove[i]!=remove[i-1]){self.$items.splice(remove[i],1)}}
for(var i=0;i<add.length;i++){$SetDict.add(self,add[i])}
return $N}
$SetDict.update=function(self){
var $=$B.args('update',1,{self:null},['self'],arguments,{},'args',null)
for(var i=0;i<$.args.length;i++){var other=set($.args[i])
for(var j=0,_len=other.$items.length;j < _len;j++){$SetDict.add(self,other.$items[j])}}
return $N}
$SetDict.difference=function(){var $=$B.args('difference',1,{self:null},['self'],arguments,{},'args',null)
if($.args.length==0){return $SetDict.copy($.self)}
var res=clone($.self)
for(var i=0;i<$.args.length;i++){res=$SetDict.__sub__(res,set($.args[i]))}
return res}
var fc=$SetDict.difference+'' 
eval('$SetDict.intersection = '+
fc.replace(/difference/g,'intersection').replace('__sub__','__and__'))
eval('$SetDict.symmetric_difference = '+
fc.replace(/difference/g,'symmetric_difference').replace('__sub__','__xor__'))
eval('$SetDict.issubset = '+
fc.replace(/difference/g,'issubset').replace('__sub__','__le__'))
eval('$SetDict.issuperset = '+
fc.replace(/difference/g,'issuperset').replace('__sub__','__ge__'))
eval('$SetDict.union = '+
fc.replace(/difference/g,'union').replace('__sub__','__or__'))
function set(){
var res={__class__:$SetDict,$str:true,$num:true,$items:[]}
var args=[res].concat(Array.prototype.slice.call(arguments))
$SetDict.__init__.apply(null,args)
return res}
set.__class__=$B.$factory
set.$dict=$SetDict
$SetDict.$factory=set
$SetDict.__new__=$B.$__new__(set)
$B.set_func_names($SetDict)
var $FrozensetDict={__class__:$B.$type,__name__:'frozenset'}
$FrozensetDict.__mro__=[$FrozensetDict,_.object.$dict]
for(var attr in $SetDict){switch(attr){case 'add':
case 'clear':
case 'discard':
case 'pop':
case 'remove':
case 'update':
break
default:
if($FrozensetDict[attr]==undefined){if(typeof $SetDict[attr]=='function'){$FrozensetDict[attr]=(function(x){return function(){return $SetDict[x].apply(null,arguments)}})(attr)}else{$FrozensetDict[attr]=$SetDict[attr]}}}}
$FrozensetDict.__hash__=function(self){if(self===undefined){return $FrozensetDict.__hashvalue__ ||$B.$py_next_hash-- }
if(self.__hashvalue__ !==undefined)return self.__hashvalue__
var _hash=1927868237
_hash *=self.$items.length 
for(var i=0,_len_i=self.$items.length;i < _len_i;i++){var _h=_.hash(self.$items[i])
_hash ^=((_h ^ 89869747)^(_h << 16))* 3644798167}
_hash=_hash * 69069 + 907133923
if(_hash==-1)_hash=590923713
return self.__hashvalue__=_hash}
$FrozensetDict.__init__=function(){
var $=$B.args('__init__',1,{self:null},['self'],arguments,{},'args','kw')
return $N}
var singleton_id=Math.floor(Math.random()*Math.pow(2,40))
function empty_frozenset(){return{__class__:$FrozensetDict,$items:[],$id:singleton_id}}
function frozenset(){var $=$B.args('frozenset',1,{iterable:null},['iterable'],arguments,{iterable:null},null,null)
if($.iterable===null){return empty_frozenset()}
else if($.iterable.__class__==$FrozensetDict){return $.iterable}
var res=set($.iterable)
if(res.$items.length==0){return empty_frozenset()}
res.__class__=$FrozensetDict
return res}
frozenset.__class__=$B.$factory
frozenset.$dict=$FrozensetDict
$FrozensetDict.__new__=$B.$__new__(frozenset)
$FrozensetDict.$factory=frozenset
$B.set_func_names($FrozensetDict)
_.set=set
_.frozenset=frozenset})(__BRYTHON__)
;(function($B){eval($B.InjectBuiltins())
var $ObjectDict=_b_.object.$dict
var JSObject=$B.JSObject
$B.events=_b_.dict()
function $getMouseOffset(target,ev){ev=ev ||window.event;
var docPos=$getPosition(target);
var mousePos=$mouseCoords(ev);
return{x:mousePos.x - docPos.x,y:mousePos.y - docPos.y};}
function $getPosition(e){var left=0;
var top=0;
var width=e.width ||e.offsetWidth;
var height=e.height ||e.offsetHeight;
while(e.offsetParent){left +=e.offsetLeft;
top +=e.offsetTop;
e=e.offsetParent;}
left +=e.offsetLeft;
top +=e.offsetTop;
return{left:left,top:top,width:width,height:height};}
function $mouseCoords(ev){var posx=0;
var posy=0;
if(!ev)var ev=window.event;
if(ev.pageX ||ev.pageY){posx=ev.pageX;
posy=ev.pageY;}else if(ev.clientX ||ev.clientY){posx=ev.clientX + document.body.scrollLeft
+ document.documentElement.scrollLeft;
posy=ev.clientY + document.body.scrollTop
+ document.documentElement.scrollTop;}
var res={}
res.x=_b_.int(posx)
res.y=_b_.int(posy)
res.__getattr__=function(attr){return this[attr]}
res.__class__="MouseCoords"
return res}
var $DOMNodeAttrs=['nodeName','nodeValue','nodeType','parentNode','childNodes','firstChild','lastChild','previousSibling','nextSibling','attributes','ownerDocument']
$B.$isNode=function(obj){if(obj===document){return true}
for(var i=0;i<$DOMNodeAttrs.length;i++){if(obj[$DOMNodeAttrs[i]]===undefined)return false}
return true}
$B.$isNodeList=function(nodes){
try{var result=Object.prototype.toString.call(nodes);
var re=new RegExp("^\\[object (HTMLCollection|NodeList)\\]$")
return(typeof nodes==='object'
&& re.exec(result)!==null
&& nodes.hasOwnProperty('length')
&&(nodes.length==0 ||(typeof nodes[0]==="object" && nodes[0].nodeType > 0))
)}catch(err){return false}}
var $DOMEventAttrs_W3C=['NONE','CAPTURING_PHASE','AT_TARGET','BUBBLING_PHASE','type','target','currentTarget','eventPhase','bubbles','cancelable','timeStamp','stopPropagation','preventDefault','initEvent']
var $DOMEventAttrs_IE=['altKey','altLeft','button','cancelBubble','clientX','clientY','contentOverflow','ctrlKey','ctrlLeft','data','dataFld','dataTransfer','fromElement','keyCode','nextPage','offsetX','offsetY','origin','propertyName','reason','recordset','repeat','screenX','screenY','shiftKey','shiftLeft','source','srcElement','srcFilter','srcUrn','toElement','type','url','wheelDelta','x','y']
$B.$isEvent=function(obj){var flag=true
for(var i=0;i<$DOMEventAttrs_W3C.length;i++){if(obj[$DOMEventAttrs_W3C[i]]===undefined){flag=false;break}}
if(flag)return true
for(var i=0;i<$DOMEventAttrs_IE.length;i++){if(obj[$DOMEventAttrs_IE[i]]===undefined)return false}
return true}
var $NodeTypes={1:"ELEMENT",2:"ATTRIBUTE",3:"TEXT",4:"CDATA_SECTION",5:"ENTITY_REFERENCE",6:"ENTITY",7:"PROCESSING_INSTRUCTION",8:"COMMENT",9:"DOCUMENT",10:"DOCUMENT_TYPE",11:"DOCUMENT_FRAGMENT",12:"NOTATION"}
var $DOMEventDict={__class__:$B.$type,__name__:'DOMEvent'}
$DOMEventDict.__mro__=[$DOMEventDict,$ObjectDict]
$DOMEventDict.__getattribute__=function(self,attr){switch(attr){case 'x':
return $mouseCoords(self).x
case 'y':
return $mouseCoords(self).y
case 'data':
if(self.dataTransfer!==undefined)return $Clipboard(self.dataTransfer)
return self['data']
case 'target':
if(self.target===undefined)return DOMNode(self.target)
return DOMNode(self.target)
case 'char':
return String.fromCharCode(self.which)}
var res=self[attr]
if(res!==undefined){if(typeof res=='function'){var func=function(){return res.apply(self,arguments)}
func.$infos={__name__:res.toString().substr(9,res.toString().search('{'))}
return func}
return $B.$JS2Py(res)}
throw _b_.AttributeError("object DOMEvent has no attribute '"+attr+"'")}
function $DOMEvent(ev){ev.__class__=$DOMEventDict
if(ev.preventDefault===undefined){ev.preventDefault=function(){ev.returnValue=false}}
if(ev.stopPropagation===undefined){ev.stopPropagation=function(){ev.cancelBubble=true}}
ev.__repr__=function(){return '<DOMEvent object>'}
ev.toString=ev.__str__=ev.__repr__
return ev}
$B.DOMEvent=function(evt_name){
return $DOMEvent(new Event(evt_name))}
$B.DOMEvent.__class__=$B.$factory
$B.DOMEvent.$dict=$DOMEventDict
$DOMEventDict.$factory=$B.DOMEvent
var $ClipboardDict={__class__:$B.$type,__name__:'Clipboard'}
$ClipboardDict.__getitem__=function(self,name){return self.data.getData(name)}
$ClipboardDict.__mro__=[$ClipboardDict,$ObjectDict]
$ClipboardDict.__setitem__=function(self,name,value){self.data.setData(name,value)}
function $Clipboard(data){
return{
data : data,__class__ : $ClipboardDict,}}
function $EventsList(elt,evt,arg){
this.elt=elt
this.evt=evt
if(isintance(arg,list)){this.callbacks=arg}
else{this.callbacks=[arg]}
this.remove=function(callback){var found=false
for(var i=0;i<this.callbacks.length;i++){if(this.callbacks[i]===callback){found=true
this.callback.splice(i,1)
this.elt.removeEventListener(this.evt,callback,false)
break}}
if(!found){throw KeyError("not found")}}}
function $OpenFile(file,mode,encoding){this.reader=new FileReader()
if(mode==='r'){this.reader.readAsText(file,encoding)}
else if(mode==='rb'){this.reader.readAsBinaryString(file)}
this.file=file
this.__class__=dom.FileReader
this.__getattr__=function(attr){if(this['get_'+attr]!==undefined)return this['get_'+attr]
return this.reader[attr]}
this.__setattr__=(function(obj){return function(attr,value){if(attr.substr(0,2)=='on'){
if(window.addEventListener){var callback=function(ev){return value($DOMEvent(ev))}
obj.addEventListener(attr.substr(2),callback)}else if(window.attachEvent){var callback=function(ev){return value($DOMEvent(window.event))}
obj.attachEvent(attr,callback)}}else if('set_'+attr in obj){return obj['set_'+attr](value)}
else if(attr in obj){obj[attr]=value}
else{setattr(obj,attr,value)}}})(this.reader)}
var dom={File : function(){},FileReader : function(){}}
dom.File.__class__=$B.$type
dom.File.__str__=function(){return "<class 'File'>"}
dom.FileReader.__class__=$B.$type
dom.FileReader.__str__=function(){return "<class 'FileReader'>"}
function $Options(parent){return{
__class__:$OptionsDict,parent:parent}}
var $OptionsDict={__class__:$B.$type,__name__:'Options'}
$OptionsDict.__delitem__=function(self,arg){self.parent.options.remove(arg.elt)}
$OptionsDict.__getitem__=function(self,key){return DOMNode(self.parent.options[key])}
$OptionsDict.__len__=function(self){return self.parent.options.length}
$OptionsDict.__mro__=[$OptionsDict,$ObjectDict]
$OptionsDict.__setattr__=function(self,attr,value){self.parent.options[attr]=value}
$OptionsDict.__setitem__=function(self,attr,value){self.parent.options[attr]=$B.$JS2Py(value)}
$OptionsDict.__str__=function(self){return "<object Options wraps "+self.parent.options+">"}
$OptionsDict.append=function(self,element){self.parent.options.add(element.elt)}
$OptionsDict.insert=function(self,index,element){if(index===undefined){self.parent.options.add(element.elt)}
else{self.parent.options.add(element.elt,index)}}
$OptionsDict.item=function(self,index){return self.parent.options.item(index)}
$OptionsDict.namedItem=function(self,name){return self.parent.options.namedItem(name)}
$OptionsDict.remove=function(self,arg){self.parent.options.remove(arg.elt)}
var $StyleDict={__class__:$B.$type,__name__:'CSSProperty'}
$StyleDict.__mro__=[$StyleDict,$ObjectDict]
$StyleDict.__getattr__=function(self,attr){return $ObjectDict.__getattribute__(self.js,attr)}
$StyleDict.__setattr__=function(self,attr,value){if(attr.toLowerCase()==='float'){self.js.cssFloat=value
self.js.styleFloat=value}else{switch(attr){case 'top':
case 'left':
case 'height':
case 'width':
case 'borderWidth':
if(isinstance(value,_b_.int))value=value+'px'}
self.js[attr]=value}}
function $Style(style){
return{__class__:$StyleDict,js:style}}
$Style.__class__=$B.$factory
$Style.$dict=$StyleDict
$StyleDict.$factory=$Style
var DOMNode=$B.DOMNode=function(elt){
var res={}
res.$dict={}
res.elt=elt 
if(elt['$brython_id']===undefined||elt.nodeType===9){
elt.$brython_id='DOM-'+$B.UUID()
res.__repr__=res.__str__=res.toString=function(){var res="<DOMNode object type '"
return res+$NodeTypes[elt.nodeType]+"' name '"+elt.nodeName+"'>"}}
res.__class__=DOMNodeDict
return res}
DOMNodeDict={__class__ : $B.$type,__name__ : 'DOMNode'}
DOMNode.__class__=$B.$factory
DOMNode.$dict=DOMNodeDict 
DOMNodeDict.$factory=DOMNode
DOMNodeDict.__mro__=[DOMNodeDict,_b_.object.$dict]
DOMNodeDict.__add__=function(self,other){
var res=$TagSum()
res.children=[self],pos=1
if(isinstance(other,$TagSum)){res.children=res.children.concat(other.children)}else if(isinstance(other,[_b_.str,_b_.int,_b_.float,_b_.list,_b_.dict,_b_.set,_b_.tuple])){res.children[pos++]=DOMNode(document.createTextNode(_b_.str(other)))}else if(isinstance(other,DOMNode)){res.children[pos++]=other}else{
try{res.children=res.children.concat(_b_.list(other))}
catch(err){throw _b_.TypeError("can't add '"+
$B.get_class(other).__name__+"' object to DOMNode instance")}}
return res}
DOMNodeDict.__bool__=function(self){return true}
DOMNodeDict.__class__=$B.$type
DOMNodeDict.__contains__=function(self,key){try{DOMNodeDict.__getitem__(self,key);return True}
catch(err){return False}}
DOMNodeDict.__del__=function(self){
if(!self.elt.parentNode){throw _b_.ValueError("can't delete "+str(elt))}
self.elt.parentNode.removeChild(self.elt)}
DOMNodeDict.__delitem__=function(self,key){if(self.elt.nodeType===9){
var res=self.elt.getElementById(key)
if(res){res.parentNode.removeChild(res)}
else{throw KeyError(key)}}else{
console.log('delitem')
self.elt.parentNode.removeChild(self.elt)}}
DOMNodeDict.__eq__=function(self,other){return self.elt==other.elt}
DOMNodeDict.__getattribute__=function(self,attr){switch(attr){case 'class_name':
case 'children':
case 'html':
case 'id':
case 'parent':
case 'query':
case 'text':
case 'value':
return DOMNodeDict[attr](self)
case 'height':
case 'left':
case 'top':
case 'width':
if(self.elt instanceof SVGElement){return self.elt.getAttributeNS(null,attr)}
return DOMNodeDict[attr].__get__(self)
break
case 'clear':
case 'remove':
return function(){DOMNodeDict[attr](self,arguments[0])}
case 'headers':
if(self.elt.nodeType==9){
var req=new XMLHttpRequest();
req.open('GET',document.location,false);
req.send(null);
var headers=req.getAllResponseHeaders();
headers=headers.split('\r\n')
var res=_b_.dict()
for(var i=0;i<headers.length;i++){var header=headers[i]
if(header.strip().length==0){continue}
var pos=header.search(':')
res.__setitem__(header.substr(0,pos),header.substr(pos+1).lstrip())}
return res;}
break
case '$$location':
attr='location'
break}
if(self.elt.getAttribute!==undefined){res=self.elt.getAttribute(attr)
if(res!==undefined&&res!==null&&self.elt[attr]===undefined){
return res}}
if(self.elt.getAttributeNS!==undefined){res=self.elt.getAttributeNS(null,attr)
if(res!==undefined && res!==null && res!="" &&
self.elt[attr]===undefined){
return res}}
if(self.elt[attr]!==undefined){res=self.elt[attr]
if(typeof res==="function"){var func=(function(f,elt){return function(){var args=[],pos=0
for(var i=0;i<arguments.length;i++){var arg=arguments[i]
if(isinstance(arg,JSObject)){args[pos++]=arg.js}else if(isinstance(arg,DOMNode)){args[pos++]=arg.elt}else if(arg===_b_.None){args[pos++]=null}else{args[pos++]=arg}}
var result=f.apply(elt,args)
return $B.$JS2Py(result)}})(res,self.elt)
func.__name__=attr
return func}
if(attr=='options')return $Options(self.elt)
if(attr=='style')return $Style(self.elt[attr])
return $B.$JS2Py(self.elt[attr])}
return $ObjectDict.__getattribute__(self,attr)}
DOMNodeDict.__getitem__=function(self,key){if(self.elt.nodeType===9){
if(typeof key==="string"){var res=self.elt.getElementById(key)
if(res)return DOMNode(res)
throw KeyError(key)}else{try{var elts=self.elt.getElementsByTagName(key.$dict.__name__),res=[],pos=0
for(var $i=0;$i<elts.length;$i++)res[pos++]=DOMNode(elts[$i])
return res}catch(err){throw KeyError(str(key))}}}else{throw _b_.TypeError('DOMNode object is not subscriptable')}}
DOMNodeDict.__iter__=function(self){
self.$counter=-1
return self}
DOMNodeDict.__le__=function(self,other){
var elt=self.elt
if(self.elt.nodeType===9){elt=self.elt.body}
if(isinstance(other,$TagSum)){var $i=0
for($i=0;$i<other.children.length;$i++){elt.appendChild(other.children[$i].elt)}}else if(typeof other==="string" ||typeof other==="number"){var $txt=document.createTextNode(other.toString())
elt.appendChild($txt)}else if(isinstance(other,DOMNode)){
elt.appendChild(other.elt)}else{try{
var items=_b_.list(other)
for(var i=0;i<items.length;i++){DOMNodeDict.__le__(self,items[i])}}catch(err){throw _b_.TypeError("can't add '"+
$B.get_class(other).__name__+
"' object to DOMNode instance")}}}
DOMNodeDict.__len__=function(self){return self.elt.childNodes.length}
DOMNodeDict.__mul__=function(self,other){if(isinstance(other,_b_.int)&& other.valueOf()>0){var res=$TagSum()
var pos=res.children.length
for(var i=0;i<other.valueOf();i++){res.children[pos++]=DOMNodeDict.clone(self)()}
return res}
throw _b_.ValueError("can't multiply "+self.__class__+"by "+other)}
DOMNodeDict.__ne__=function(self,other){return !DOMNodeDict.__eq__(self,other)}
DOMNodeDict.__next__=function(self){self.$counter++
if(self.$counter<self.elt.childNodes.length){return DOMNode(self.elt.childNodes[self.$counter])}
throw _b_.StopIteration('StopIteration')}
DOMNodeDict.__radd__=function(self,other){
var res=$TagSum()
var txt=DOMNode(document.createTextNode(other))
res.children=[txt,self]
return res}
DOMNodeDict.__str__=DOMNodeDict.__repr__=function(self){if(self===undefined)return "<class 'DOMNode'>"
var res="<DOMNode object type '"
return res+$NodeTypes[self.elt.nodeType]+"' name '"+self.elt.nodeName+"'>"}
DOMNodeDict.__setattr__=function(self,attr,value){if(attr.substr(0,2)=='on'){
if(!_b_.bool(value)){
DOMNodeDict.unbind(self,attr.substr(2))}else{
DOMNodeDict.bind(self,attr.substr(2),value)}}else{if(DOMNodeDict['set_'+attr]!==undefined){return DOMNodeDict['set_'+attr](self,value)}
var attr1=attr.replace('_','-').toLowerCase()
if(self.elt instanceof SVGElement){self.elt.setAttributeNS(null,attr1,value)
return}
if(self.elt[attr1]!==undefined){self.elt[attr1]=value;return}
if(typeof self.elt.getAttribute=='function' && 
typeof self.elt.setAttribute=='function'){var res=self.elt.getAttribute(attr1)
if(res!==undefined&&res!==null){self.elt.setAttribute(attr1,value)
return}}
self.elt[attr]=value}}
DOMNodeDict.__setitem__=function(self,key,value){self.elt.childNodes[key]=value}
DOMNodeDict.abs_left={__get__: function(self){return $getPosition(self.elt).left},__set__: function(){throw _b_.AttributeError("'DOMNode' objectattribute 'abs_left' is read-only")}}
DOMNodeDict.abs_top={__get__: function(self){return $getPosition(self.elt).top},__set__: function(){throw _b_.AttributeError("'DOMNode' objectattribute 'abs_top' is read-only")}}
DOMNodeDict.bind=function(self,event){
var _id
if(self.elt.nodeType===9){_id=0}
else{_id=self.elt.$brython_id}
var _d=_b_.dict.$dict
if(!_d.__contains__($B.events,_id)){_d.__setitem__($B.events,_id,dict())}
var item=_d.__getitem__($B.events,_id)
if(!_d.__contains__(item,event)){_d.__setitem__(item,event,[])}
var evlist=_d.__getitem__(item,event)
var pos=evlist.length
for(var i=2;i<arguments.length;i++){var func=arguments[i]
var callback=(function(f){return function(ev){try{return f($DOMEvent(ev))}catch(err){if(err.__class__!==undefined){var msg=_b_.getattr(err,'info')+
'\n'+err.__class__.__name__
if(err.args){msg +=': '+err.args[0]}
try{getattr($B.stderr,"write")(msg)}
catch(err){console.log(msg)}}else{try{getattr($B.stderr,"write")(err)}
catch(err1){console.log(err)}}}}}
)(func)
if(window.addEventListener){self.elt.addEventListener(event,callback,false)}else if(window.attachEvent){self.elt.attachEvent("on"+event,callback)}
evlist[pos++]=[func,callback]}
return self}
DOMNodeDict.children=function(self){var res=[],pos=0
for(var i=0;i<self.elt.childNodes.length;i++){res[pos++]=DOMNode(self.elt.childNodes[i])}
return res}
DOMNodeDict.clear=function(self){
var elt=self.elt
if(elt.nodeType==9){elt=elt.body}
for(var i=elt.childNodes.length-1;i>=0;i--){elt.removeChild(elt.childNodes[i])}}
DOMNodeDict.Class=function(self){if(self.elt.className !==undefined)return self.elt.className
return None}
DOMNodeDict.class_name=function(self){return DOMNodeDict.Class(self)}
DOMNodeDict.clone=function(self){res=DOMNode(self.elt.cloneNode(true))
res.elt.$brython_id='DOM-' + $B.UUID()
var _d=_b_.dict.$dict
if(_d.__contains__($B.events,self.elt.$brython_id)){var events=_d.__getitem__($B.events,self.elt.$brython_id)
var items=_b_.list(_d.items(events))
for(var i=0;i<items.length;i++){var event=items[i][0]
for(var j=0;j<items[i][1].length;j++){DOMNodeDict.bind(res,event,items[i][1][j][0])}}}
return res}
DOMNodeDict.events=function(self,event){var _id
if(self.elt.nodeType===9){_id=0}
else{_id=self.elt.$brython_id}
var _d=_b_.dict.$dict
if(!_d.__contains__($B.events,_id)){return[]}
var item=_d.__getitem__($B.events,_id)
if(!_d.__contains__(item,event)){return[]}
var evt_list=_d.__getitem__(item,event),callbacks=[]
for(var i=0;i<evt_list.length;i++){callbacks.push(evt_list[i][1])}
return callbacks}
DOMNodeDict.focus=function(self){return(function(obj){return function(){
setTimeout(function(){obj.focus();},10)}})(self.elt)}
DOMNodeDict.get=function(self){
var obj=self.elt
var args=[],pos=0
for(var i=1;i<arguments.length;i++){args[pos++]=arguments[i]}
var $ns=$B.args('get',0,{},[],args,{},null,'kw')
var $dict={}
var items=_b_.list(_b_.dict.$dict.items($ns['kw']))
for(var i=0;i<items.length;i++){$dict[items[i][0]]=items[i][1]}
if($dict['name']!==undefined){if(obj.getElementsByName===undefined){throw _b_.TypeError("DOMNode object doesn't support selection by name")}
var res=[],pos=0
var node_list=document.getElementsByName($dict['name'])
if(node_list.length===0)return[]
for(var i=0;i<node_list.length;i++)res[pos++]=DOMNode(node_list[i])}
if($dict['tag']!==undefined){if(obj.getElementsByTagName===undefined){throw _b_.TypeError("DOMNode object doesn't support selection by tag name")}
var res=[],pos=0
var node_list=document.getElementsByTagName($dict['tag'])
if(node_list.length===0)return[]
for(var i=0;i<node_list.length;i++)res[pos++]=DOMNode(node_list[i])}
if($dict['classname']!==undefined){if(obj.getElementsByClassName===undefined){throw _b_.TypeError("DOMNode object doesn't support selection by class name")}
var res=[],pos=0
var node_list=document.getElementsByClassName($dict['classname'])
if(node_list.length===0)return[]
for(var i=0;i<node_list.length;i++)res[pos++]=DOMNode(node_list[i])}
if($dict['id']!==undefined){if(obj.getElementById===undefined){throw _b_.TypeError("DOMNode object doesn't support selection by id")}
var id_res=obj.getElementById($dict['id'])
if(!id_res)return[]
return[DOMNode(id_res)]}
if($dict['selector']!==undefined){if(obj.querySelectorAll===undefined){throw _b_.TypeError("DOMNode object doesn't support selection by selector")}
var node_list=obj.querySelectorAll($dict['selector'])
var sel_res=[],pos=0
if(node_list.length===0)return[]
for(var i=0;i<node_list.length;i++)sel_res[pos++]=DOMNode(node_list[i])
if(res===undefined)return sel_res
var to_delete=[],pos=0
for(var i=0;i<res.length;i++){var elt=res[i],
flag=false
for(var j=0;j<sel_res.length;j++){if(elt.__eq__(sel_res[j])){flag=true;break}}
if(!flag){to_delete[pos++]=i}}
for(var i=to_delete.length-1;i>=0;i--)res.splice(to_delete[i],1)}
return res}
DOMNodeDict.getContext=function(self){
if(!('getContext' in self.elt)){throw _b_.AttributeError("object has no attribute 'getContext'")}
var obj=self.elt
return function(ctx){return JSObject(obj.getContext(ctx))}}
DOMNodeDict.getSelectionRange=function(self){
if(self.elt['getSelectionRange']!==undefined){return self.elt.getSelectionRange.apply(null,arguments)}}
DOMNodeDict.height={'__get__': function(self){
if(self.elt.tagName=='CANVAS'){return self.elt.height}
var res=parseInt(self.elt.style.height)
if(isNaN(res)){throw _b_.AttributeError("node has no attribute 'height'")}
return res},'__set__': function(obj,self,value){if(self.elt.tagName=='CANVAS'){self.elt.height=value}
else{self.elt.style.height=value+'px'}}}
DOMNodeDict.html=function(self){return self.elt.innerHTML}
DOMNodeDict.id=function(self){if(self.elt.id !==undefined)return self.elt.id
return None}
DOMNodeDict.inside=function(self,other){
other=other.elt
var elt=self.elt
while(true){if(other===elt){return true}
elt=elt.parentElement
if(!elt){return false}}}
DOMNodeDict.options=function(self){
return new $OptionsClass(self.elt)}
DOMNodeDict.parent=function(self){if(self.elt.parentElement)return DOMNode(self.elt.parentElement)
return None}
DOMNodeDict.left={'__get__': function(self){var res=parseInt(self.elt.style.left)
if(isNaN(res)){throw _b_.AttributeError("node has no attribute 'left'")}
return res},'__set__': function(obj,self,value){self.elt.style.left=value+'px'}}
DOMNodeDict.remove=function(self,child){
var elt=self.elt,flag=false,ch_elt=child.elt
if(self.elt.nodeType==9){elt=self.elt.body}
while(ch_elt.parentElement){if(ch_elt.parentElement===elt){elt.removeChild(ch_elt)
flag=true
break}else{ch_elt=ch_elt.parentElement}}
if(!flag){throw _b_.ValueError('element '+child+' is not inside '+self)}}
DOMNodeDict.reset=function(self){
return function(){self.elt.reset()}}
DOMNodeDict.style=function(self){
self.elt.style.float=self.elt.style.cssFloat ||self.style.styleFloat
return $B.JSObject(self.elt.style)}
DOMNodeDict.top={'__get__': function(self){var res=parseInt(self.elt.style.top)
if(isNaN(res)){throw _b_.AttributeError("node has no attribute 'top'")}
return res},'__set__': function(obj,self,value){self.elt.style.top=value+'px'}}
DOMNodeDict.setSelectionRange=function(self){
if(this['setSelectionRange']!==undefined){return(function(obj){return function(){return obj.setSelectionRange.apply(obj,arguments)}})(this)}else if(this['createTextRange']!==undefined){return(function(obj){return function(start_pos,end_pos){if(end_pos==undefined){end_pos=start_pos}
var range=obj.createTextRange();
range.collapse(true);
range.moveEnd('character',start_pos);
range.moveStart('character',end_pos);
range.select();}})(this)}}
DOMNodeDict.set_class_name=function(self,arg){self.elt.setAttribute('class',arg)}
DOMNodeDict.set_html=function(self,value){self.elt.innerHTML=str(value)}
DOMNodeDict.set_style=function(self,style){
if(!_b_.isinstance(style,_b_.dict)){throw TypeError('style must be dict, not '+$B.get_class(style).__name__)}
var items=_b_.list(_b_.dict.$dict.items(style))
for(var i=0;i<items.length;i++){var key=items[i][0],value=items[i][1]
if(key.toLowerCase()==='float'){self.elt.style.cssFloat=value
self.elt.style.styleFloat=value}else{switch(key){case 'top':
case 'left':
case 'width':
case 'borderWidth':
if(isinstance(value,_b_.int)){value=value+'px'}}
self.elt.style[key]=value}}}
DOMNodeDict.set_text=function(self,value){self.elt.innerText=str(value)
self.elt.textContent=str(value)}
DOMNodeDict.set_value=function(self,value){self.elt.value=str(value)}
DOMNodeDict.submit=function(self){
return function(){self.elt.submit()}}
DOMNodeDict.text=function(self){return self.elt.innerText ||self.elt.textContent}
DOMNodeDict.toString=function(self){if(self===undefined)return 'DOMNode'
return self.elt.nodeName}
DOMNodeDict.trigger=function(self,etype){
if(self.elt.fireEvent){self.elt.fireEvent('on' + etype);}else{
var evObj=document.createEvent('Events');
evObj.initEvent(etype,true,false);
self.elt.dispatchEvent(evObj);}}
DOMNodeDict.unbind=function(self,event){
var _id
if(self.elt.nodeType==9){_id=0}else{_id=self.elt.$brython_id}
if(!_b_.dict.$dict.__contains__($B.events,_id))return
var item=_b_.dict.$dict.__getitem__($B.events,_id)
if(event===undefined){var events=_b_.list(_b_.dict.$dict.keys(item))
for(var i=0;i<events.length;i++){DOMNodeDict.unbind(self,events[i])}
return}
if(!_b_.dict.$dict.__contains__(item,event))return
var events=_b_.dict.$dict.__getitem__(item,event)
if(arguments.length===2){for(var i=0;i<events.length;i++){var callback=events[i][1]
if(window.removeEventListener){self.elt.removeEventListener(event,callback,false)}else if(window.detachEvent){self.elt.detachEvent(event,callback,false)}}
events=[]
return}
for(var i=2;i<arguments.length;i++){var func=arguments[i],flag=false
for(var j=0;j<events.length;j++){if(getattr(func,'__eq__')(events[j][0])){var callback=events[j][1]
if(window.removeEventListener){self.elt.removeEventListener(event,callback,false)}else if(window.detachEvent){self.elt.detachEvent(event,callback,false)}
events.splice(j,1)
flag=true
break}}
if(!flag){throw KeyError('missing callback for event '+event)}}}
DOMNodeDict.value=function(self){return self.elt.value}
DOMNodeDict.width={'__get__': function(self){
if(self.elt.tagName=='CANVAS'){return self.elt.width}
var res=parseInt(self.elt.style.width)
if(isNaN(res)){throw _b_.AttributeError("node has no attribute 'width'")}
return res},'__set__': function(obj,self,value){if(self.elt.tagName=='CANVAS'){self.elt.width=value}
else{self.elt.style.width=value+'px'}}}
var $QueryDict={__class__:$B.$type,__name__:'query'}
$QueryDict.__contains__=function(self,key){return self._keys.indexOf(key)>-1}
$QueryDict.__getitem__=function(self,key){
var result=self._values[key]
if(result===undefined)throw KeyError(key)
if(result.length==1)return result[0]
return result}
var $QueryDict_iterator=$B.$iterator_class('query string iterator')
$QueryDict.__iter__=function(self){return $B.$iterator(self._keys,$QueryDict_iterator)}
$QueryDict.__mro__=[$QueryDict,$ObjectDict]
$QueryDict.getfirst=function(self,key,_default){
var result=self._values[key]
if(result===undefined){if(_default===undefined)return None
return _default}
return result[0]}
$QueryDict.getlist=function(self,key){
var result=self._values[key]
if(result===undefined)return[]
return result}
$QueryDict.getvalue=function(self,key,_default){try{return $QueryDict.__getitem__(self,key)}
catch(err){if(_default===undefined)return None
return _default}}
$QueryDict.keys=function(self){return self._keys}
DOMNodeDict.query=function(self){var res={__class__:$QueryDict,_keys :[],_values :{}}
var qs=location.search.substr(1).split('&')
for(var i=0;i<qs.length;i++){var pos=qs[i].search('=')
var elts=[qs[i].substr(0,pos),qs[i].substr(pos+1)]
var key=decodeURIComponent(elts[0])
var value=decodeURIComponent(elts[1])
if(res._keys.indexOf(key)>-1){res._values[key].push(value)}
else{res._keys.push(key)
res._values[key]=[value]}}
return res}
var $TagSumDict={__class__ : $B.$type,__name__:'TagSum'}
$TagSumDict.appendChild=function(self,child){self.children.push(child)}
$TagSumDict.__add__=function(self,other){if($B.get_class(other)===$TagSumDict){self.children=self.children.concat(other.children)}else if(isinstance(other,[_b_.str,_b_.int,_b_.float,_b_.dict,_b_.set,_b_.list])){self.children=self.children.concat(DOMNode(document.createTextNode(other)))}else{self.children.push(other)}
return self}
$TagSumDict.__mro__=[$TagSumDict,$ObjectDict]
$TagSumDict.__radd__=function(self,other){var res=$TagSum()
res.children=self.children.concat(DOMNode(document.createTextNode(other)))
return res}
$TagSumDict.__repr__=function(self){var res='<object TagSum> '
for(var i=0;i<self.children.length;i++){res+=self.children[i]
if(self.children[i].toString()=='[object Text]'){res +=' ['+self.children[i].textContent+']\n'}}
return res}
$TagSumDict.__str__=$TagSumDict.toString=$TagSumDict.__repr__
$TagSumDict.clone=function(self){var res=$TagSum(),$i=0
for($i=0;$i<self.children.length;$i++){res.children.push(self.children[$i].cloneNode(true))}
return res}
function $TagSum(){return{__class__:$TagSumDict,children:[],toString:function(){return '(TagSum)'}}}
$TagSum.__class__=$B.$factory
$TagSum.$dict=$TagSumDict
$B.$TagSum=$TagSum 
var win=JSObject(window)
win.get_postMessage=function(msg,targetOrigin){if(isinstance(msg,dict)){var temp={__class__:'dict'}
var items=_b_.list(_b_.dict.$dict.items(msg))
for(var i=0;i<items.length;i++)temp[items[i][0]]=items[i][1]
msg=temp}
return window.postMessage(msg,targetOrigin)}
$B.DOMNodeDict=DOMNodeDict
$B.win=win})(__BRYTHON__)
;(function($B){
var _b_=$B.builtins
eval($B.InjectBuiltins())
$B.make_node=function(top_node,node){
var ctx_js=node.C.to_js()
var is_cond=false,is_except=false,is_else=false
if(node.locals_def){
var iter_name=top_node.iter_id
ctx_js='var $locals_'+iter_name+' = $B.vars["'+iter_name+'"] || {}'
ctx_js +=', $local_name = "'+iter_name
ctx_js +='", $locals = $locals_'+iter_name+';'
ctx_js +='$B.vars["'+iter_name+'"] = $locals;'}
if(node.is_catch){is_except=true;is_cond=true}
if(node.is_except){is_except=true}
if(node.C.type=='node'){var ctx=node.C.tree[0]
var ctype=ctx.type
switch(ctx.type){case 'except':
is_except=true
is_cond=true
break
case 'single_kw':
is_cond=true
if(ctx.token=='else')is_else=true
if(ctx.token=='finally')is_except=true
break
case 'condition':
if(ctx.token=='elif'){is_else=true;is_cond=true}
if(ctx.token=='if')is_cond=true}}
if(ctx_js){
var new_node=new $B.genNode(ctx_js)
if(ctype=='yield'){
var yield_node_id=top_node.yields.length
while(ctx_js.charAt(ctx_js.length-1)==';'){ctx_js=ctx_js.substr(0,ctx_js.length-1)}
var res='return ['+ctx_js+', '+yield_node_id+']'
new_node.data=res
top_node.yields.push(new_node)}else if(node.is_set_yield_value){
var js='$sent'+ctx_js+'=$B.modules["'
js +=top_node.iter_id+'"].sent_value || None;'
js +='if($sent'+ctx_js+'.__class__===$B.$GeneratorSendError)'
js +='{throw $sent'+ctx_js+'.err};'
js +='$yield_value'+ctx_js+'=$sent'+ctx_js+';'
js +='$B.modules["'+top_node.iter_id+'"].sent_value=None'
new_node.data=js}else if(ctype=='break'){
new_node.is_break=true
new_node.loop_num=node.C.tree[0].loop_ctx.loop_num}
new_node.is_yield=(ctype=='yield'||ctype=='return')
new_node.is_cond=is_cond
new_node.is_except=is_except
new_node.is_if=ctype=='condition' && ctx.token=="if"
new_node.is_try=node.is_try
new_node.is_else=is_else
new_node.loop_start=node.loop_start
new_node.is_set_yield_value=node.is_set_yield_value
for(var i=0,_len_i=node.children.length;i < _len_i;i++){new_node.addChild($B.make_node(top_node,node.children[i]))}}
return new_node}
$B.genNode=function(data,parent){_indent=4
this.data=data
this.parent=parent
this.children=[]
this.has_child=false
if(parent===undefined){this.nodes={}
this.num=0}
this.addChild=function(child){if(child===undefined){console.log('child of '+this+' undefined')}
this.children[this.children.length]=child
this.has_child=true
child.parent=this
child.rank=this.children.length-1}
this.clone=function(){var res=new $B.genNode(this.data)
res.has_child=this.has_child
res.is_cond=this.is_cond
res.is_except=this.is_except
res.is_if=this.is_if
res.is_try=this.is_try
res.is_else=this.is_else
res.loop_num=this.loop_num
res.loop_start=this.loop_start
res.is_yield=this.is_yield
return res}
this.clone_tree=function(exit_node,head){
var res=new $B.genNode(this.data)
if(this.replaced && !in_loop(this)){
res.data='void(0)'}
if(this===exit_node &&(this.parent.is_cond ||!in_loop(this))){
if(!exit_node.replaced){
res=new $B.genNode('void(0)')}else{res=new $B.genNode(exit_node.data)}
exit_node.replaced=true}
if(head && this.is_break){res.data='$locals["$no_break'+this.loop_num+'"]=false;'
res.data +='var err = new Error("break");'
res.data +='err.__class__=$B.GeneratorBreak;throw err;'
res.is_break=true}
res.has_child=this.has_child
res.is_cond=this.is_cond
res.is_except=this.is_except
res.is_try=this.is_try
res.is_else=this.is_else
res.loop_num=this.loop_num
res.loop_start=this.loop_start
res.no_break=true
res.is_yield=this.is_yield
for(var i=0,_len_i=this.children.length;i < _len_i;i++){res.addChild(this.children[i].clone_tree(exit_node,head))
if(this.children[i].is_break){res.no_break=false}}
return res}
this.has_break=function(){if(this.is_break){return true}
else{for(var i=0,_len_i=this.children.length;i < _len_i;i++){if(this.children[i].has_break()){return true}}}
return false}
this.indent_src=function(indent){return ' '.repeat(indent*indent)}
this.src=function(indent){
indent=indent ||0
var res=[this.indent_src(indent)+this.data],pos=1
if(this.has_child)res[pos++]='{'
res[pos++]='\n'
for(var i=0,_len_i=this.children.length;i < _len_i;i++){res[pos++]=this.children[i].src(indent+1)
if(this.children[i].is_yield){break}}
if(this.has_child)res[pos++]='\n'+this.indent_src(indent)+'}\n'
return res.join('')}
this.toString=function(){return '<Node '+this.data+'>'}}
$B.GeneratorBreak={}
$B.$GeneratorSendError={}
var $GeneratorReturn={}
$B.generator_return=function(){return{__class__:$GeneratorReturn}}
function in_loop(node){
while(node){if(node.loop_start!==undefined)return node
node=node.parent}
return false}
function in_try(node){
var tries=[],pnode=node.parent,pos=0
while(pnode){if(pnode.is_try){tries[pos++]=pnode}
pnode=pnode.parent}
return tries}
var $BRGeneratorDict={__class__:$B.$type,__name__:'generator'}
$BRGeneratorDict.__iter__=function(self){return self}
$BRGeneratorDict.__enter__=function(self){console.log("generator.__enter__ called")}
$BRGeneratorDict.__exit__=function(self){console.log("generator.__exit__ called")}
function clear_ns(iter_id){delete $B.vars[iter_id]
delete $B.modules[iter_id]
delete $B.bound[iter_id]
delete $B.generators[iter_id]
delete $B.$generators[iter_id]}
$BRGeneratorDict.__next__=function(self){
var scope_id=self.func_root.scope.id
if(self._next===undefined){
var src=self.func_root.src()+'\n)()'
try{eval(src)}
catch(err){console.log("cant eval\n"+src+'\n'+err)
clear_ns(self.iter_id)
throw err}
self._next=$B.$generators[self.iter_id]}
if(self.gi_running){throw _b_.ValueError("ValueError: generator already executing")}
self.gi_running=true
for(var i=0;i<self.env.length;i++){eval('var $locals_'+self.env[i][0]+'=self.env[i][1]')}
try{var res=self._next.apply(null,self.args)}catch(err){var last_frame=$B.last($B.frames_stack)
self._next=function(){var $locals=$B.vars[self.iter_id]
$B.enter_frame([self.iter_id,$locals,self.env[0],{}])
throw StopIteration('after exception')}
clear_ns(self.iter_id)
throw err}finally{self.gi_running=false
$B.leave_frame(self.iter_id)}
if(res===undefined){throw StopIteration("")}
if(res[0].__class__==$GeneratorReturn){
self._next=function(){throw StopIteration("after generator return")}
clear_ns(self.iter_id)
throw StopIteration('')}
var yielded_value=res[0],yield_node_id=res[1]
if(yield_node_id==self.yield_node_id){return yielded_value}
self.yield_node_id=yield_node_id
var exit_node=self.func_root.yields[yield_node_id]
exit_node.replaced=false
var root=new $B.genNode(self.def_ctx.to_js('__BRYTHON__.generators["'+self.iter_id+'"]'))
root.addChild(self.func_root.children[0].clone())
var fnode=self.func_root.children[1].clone()
root.addChild(fnode)
func_node=self.func_root.children[1]
var js='var $locals = $B.vars["'+self.iter_id+
'"], $local_name="'+self.iter_id+'";'
fnode.addChild(new $B.genNode(js))
var env=$B.last(self.env)
fnode.addChild(new $B.genNode('$B.enter_frame(["'+self.iter_id+
'",$locals,"'+env[0]+'",$locals_'+env[0]+']);'))
while(1){
var exit_parent=exit_node.parent
var rest=[],pos=0
var has_break=false
var start=exit_node.rank+1
if(exit_node.loop_start!==undefined){
start=exit_node.rank}else if(exit_node.is_cond){
while(start<exit_parent.children.length &&
(exit_parent.children[start].is_except ||
exit_parent.children[start].is_else)){start++}}else if(exit_node.is_try ||exit_node.is_except){
while(start<exit_parent.children.length &&
(exit_parent.children[start].is_except ||
exit_parent.children[start].is_else)){start++}}
for(var i=start,_len_i=exit_parent.children.length;i < _len_i;i++){var clone=exit_parent.children[i].clone_tree(null,true)
rest[pos++]=clone
if(clone.has_break()){has_break=true}}
if(has_break){
var rest_try=new $B.genNode('try')
for(var i=0,_len_i=rest.length;i < _len_i;i++){rest_try.addChild(rest[i])}
var catch_test='catch(err)'
catch_test +='{if(err.__class__!==$B.GeneratorBreak)'
catch_test +='{throw err}}'
catch_test=new $B.genNode(catch_test)
rest=[rest_try,catch_test]}
var tries=in_try(exit_node)
if(tries.length==0){
for(var i=0;i<rest.length;i++){fnode.addChild(rest[i])}}else{
var tree=[],pos=0
for(var i=0;i<tries.length;i++){var try_node=tries[i],try_clone=try_node.clone()
if(i==0){for(var j=0;j<rest.length;j++){try_clone.addChild(rest[j])}}
var children=[try_clone],cpos=1
for(var j=try_node.rank+1;j<try_node.parent.children.length;j++){if(try_node.parent.children[j].is_except){children[cpos++]=try_node.parent.children[j].clone_tree(null,true)}else{break}}
tree[pos++]=children}
var parent=fnode
while(tree.length){children=tree.pop()
for(var i=0;i<children.length;i++){parent.addChild(children[i])}
parent=children[0]}}
exit_node=exit_parent
if(exit_node===self.func_root){break}}
self.next_root=root
var next_src=root.src()+'\n)()'
try{eval(next_src)}
catch(err){console.log('error '+err+'\n'+next_src);throw err}
self._next=$B.generators[self.iter_id]
return yielded_value}
$BRGeneratorDict.__mro__=[$BRGeneratorDict,_b_.object.$dict]
$BRGeneratorDict.$factory={__class__:$B.$factory,$dict: $BRGeneratorDict}
$BRGeneratorDict.__repr__=$BRGeneratorDict.__str__=function(self){return '<generator '+self.func_name+' '+self.iter_id+'>'}
$BRGeneratorDict.close=function(self,value){self.sent_value=_b_.GeneratorExit()
try{var res=$BRGeneratorDict.__next__(self)
if(res!==_b_.None){throw _b_.RuntimeError("closed generator returned a value")}}catch(err){if($B.is_exc(err,[_b_.StopIteration,_b_.GeneratorExit])){return _b_.None}
throw err}}
$BRGeneratorDict.send=function(self,value){self.sent_value=value
return $BRGeneratorDict.__next__(self)}
$BRGeneratorDict.$$throw=function(self,value){if(_b_.isinstance(value,_b_.type))value=value()
self.sent_value={__class__:$B.$GeneratorSendError,err:value}
return $BRGeneratorDict.__next__(self)}
$B.$BRgenerator=function(env,func_name,def_id){
var def_node=$B.modules[def_id]
var def_ctx=def_node.C.tree[0]
var counter=0 
var func=env[0][1][func_name]
$B.generators=$B.generators ||{}
$B.$generators=$B.$generators ||{}
var module=def_node.module 
var res=function(){var args=[],pos=0
for(var i=0,_len_i=arguments.length;i<_len_i;i++){args[pos++]=arguments[i]}
var iter_id=def_id+'_'+counter++
$B.bound[iter_id]={}
for(var attr in $B.bound[def_id]){$B.bound[iter_id][attr]=true}
var func_root=new $B.genNode(def_ctx.to_js('$B.$generators["'+iter_id+'"]'))
func_root.scope=env[0][1]
func_root.module=module
func_root.yields=[]
func_root.loop_ends={}
func_root.def_id=def_id
func_root.iter_id=iter_id
for(var i=0,_len_i=def_node.children.length;i < _len_i;i++){func_root.addChild($B.make_node(func_root,def_node.children[i]))}
var func_node=func_root.children[1].children[0]
var obj={__class__ : $BRGeneratorDict,args:args,def_id:def_id,def_ctx:def_ctx,def_node:def_node,env:env,func:func,func_name:func_name,func_root:func_root,module:module,func_node:func_node,next_root:func_root,gi_running:false,iter_id:iter_id,id:iter_id,num:0}
$B.modules[iter_id]=obj
obj.parent_block=def_node.parent_block
return obj}
res.__call__=function(){console.log('call generator');return res.apply(null,arguments)}
res.__repr__=function(){return "<function "+func.__name__+">"}
return res}
$B.$BRgenerator.__repr__=function(){return "<class 'generator'>"}
$B.$BRgenerator.__str__=function(){return "<class 'generator'>"}
$B.$BRgenerator.__class__=$B.$type})(__BRYTHON__)
;(function($B){var modules={}
modules['browser']={$package: true,$is_package: true,__package__:'browser',__file__:$B.brython_path.replace(/\/*$/g,'')+
'/Lib/browser/__init__.py',alert:function(message){window.alert($B.builtins.str(message))},confirm: $B.JSObject(window.confirm),console:$B.JSObject(window.console),document:$B.DOMNode(document),doc: $B.DOMNode(document),
DOMEvent:$B.DOMEvent,DOMNode:$B.DOMNode,mouseCoords: function(ev){return $B.JSObject($mouseCoords(ev))},prompt: function(message,default_value){return $B.JSObject(window.prompt(message,default_value||''))},reload: function(){
var scripts=document.getElementsByTagName('script'),js_scripts=[]
for(var i=0;i<scripts.length;i++){if(scripts[i].type===undefined ||
scripts[i].type=='text/javascript'){js_scripts.push(scripts[i])
if(scripts[i].src){var new_script=document.createElement('SCRIPT')
console.log(scripts[i].src)}}}
console.log(js_scripts)
for(var i=0;i<$B.scripts.length;i++){var name=$B.scripts[i]
console.log('script:',name)}
for(var mod in $B.imported){if($B.imported[mod].$last_modified){console.log('check',mod,$B.imported[mod].__file__,$B.imported[mod].$last_modified)}else{console.log('no date for mod',mod)}}},win: $B.win,window: $B.win,URLParameter:function(name){name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
var regex=new RegExp("[\\?&]" + name + "=([^&#]*)"),results=regex.exec(location.search);
results=results===null ? "" : decodeURIComponent(results[1].replace(/\+/g," "));
return $B.builtins.str(results);}}
modules['browser'].__path__=modules['browser'].__file__
modules['browser.html']=(function($B){var _b_=$B.builtins
var $TagSumDict=$B.$TagSum.$dict
function makeTagDict(tagName){
var dict={__class__:$B.$type,__name__:tagName}
dict.__init__=function(){var $ns=$B.args('pow',1,{self:null},['self'],arguments,{},'args','kw')
var self=$ns['self']
var args=$ns['args']
if(args.length==1){var first=args[0]
if(_b_.isinstance(first,[_b_.str,_b_.int,_b_.float])){
var span=document.createElement('SPAN')
span.innerHTML=_b_.str(first)
self.elt.appendChild(span)}else if(first.__class__===$TagSumDict){for(var i=0,_len_i=first.children.length;i < _len_i;i++){self.elt.appendChild(first.children[i].elt)}}else{
if(_b_.isinstance(first,$B.DOMNode)){self.elt.appendChild(first.elt)}else{try{
var items=_b_.list(first)
for(var i=0;i<items.length;i++){$B.DOMNode.$dict.__le__(self,items[i])}}catch(err){throw _b_.ValueError('wrong element '+first)}}}}
var items=_b_.list(_b_.dict.$dict.items($ns['kw']))
for(var i=0,_len_i=items.length;i < _len_i;i++){
var arg=items[i][0]
var value=items[i][1]
if(arg.toLowerCase().substr(0,2)==="on"){
var js='$B.DOMNodeDict.bind(self,"'
js +=arg.toLowerCase().substr(2)
eval(js+'",function(){'+value+'})')}else if(arg.toLowerCase()=="style"){$B.DOMNodeDict.set_style(self,value)}else{
if(value!==false){
try{arg=arg.toLowerCase().replace('_','-')
self.elt.setAttribute(arg,value)}catch(err){throw _b_.ValueError("can't set attribute "+arg)}}}}}
dict.__mro__=[dict,$B.DOMNodeDict,$B.builtins.object.$dict]
dict.__new__=function(cls){
var res=$B.DOMNode(document.createElement(tagName))
res.__class__=cls.$dict
return res}
return dict}
function makeFactory(tagName){var factory=function(){var res=$B.DOMNode(document.createElement(tagName))
res.__class__=dicts[tagName]
var args=[res].concat(Array.prototype.slice.call(arguments))
dicts[tagName].__init__.apply(null,args)
return res}
factory.__class__=$B.$factory
factory.$dict=dicts[tagName]
return factory}
var $tags=['A','ABBR','ACRONYM','ADDRESS','APPLET','AREA','B','BASE','BASEFONT','BDO','BIG','BLOCKQUOTE','BODY','BR','BUTTON','CAPTION','CENTER','CITE','CODE','COL','COLGROUP','DD','DEL','DFN','DIR','DIV','DL','DT','EM','FIELDSET','FONT','FORM','FRAME','FRAMESET','H1','H2','H3','H4','H5','H6','HEAD','HR','HTML','I','IFRAME','IMG','INPUT','INS','ISINDEX','KBD','LABEL','LEGEND','LI','LINK','MAP','MENU','META','NOFRAMES','NOSCRIPT','OBJECT','OL','OPTGROUP','OPTION','P','PARAM','PRE','Q','S','SAMP','SCRIPT','SELECT','SMALL','SPAN','STRIKE','STRONG','STYLE','SUB','SUP','TABLE','TBODY','TD','TEXTAREA','TFOOT','TH','THEAD','TITLE','TR','TT','U','UL','VAR',
'ARTICLE','ASIDE','AUDIO','BDI','CANVAS','COMMAND','DATA','DATALIST','EMBED','FIGCAPTION','FIGURE','FOOTER','HEADER','KEYGEN','MAIN','MARK','MATH','METER','NAV','OUTPUT','PROGRESS','RB','RP','RT','RTC','RUBY','SECTION','SOURCE','TEMPLATE','TIME','TRACK','VIDEO','WBR',
'DETAILS','DIALOG','MENUITEM','PICTURE','SUMMARY']
var obj=new Object()
var dicts={}
for(var i=0,_len_i=$tags.length;i < _len_i;i++){var tag=$tags[i]
dicts[tag]=makeTagDict(tag)
obj[tag]=makeFactory(tag)
dicts[tag].$factory=obj[tag]}
$B.tag_classes=dicts
return obj})(__BRYTHON__)
modules['javascript']={__file__:$B.brython_path+'/libs/javascript.js',JSObject: $B.JSObject,JSConstructor: $B.JSConstructor,console: $B.JSObject(window.console),load:function(script_url,names){
var file_obj=$B.builtins.open(script_url)
var content=$B.builtins.getattr(file_obj,'read')()
eval(content)
if(names!==undefined){if(!Array.isArray(names)){throw $B.builtins.TypeError("argument 'names' should be a list, not '"+$B.get_class(names).__name__)}else{for(var i=0;i<names.length;i++){try{window[names[i]]=eval(names[i])}
catch(err){throw $B.builtins.NameError("name '"+names[i]+"' not found in script "+script_url)}}}}},py2js: function(src,module_name){if(is_none(module_name)){module_name='__main__'+$B.UUID()}
return $B.py2js(src,module_name,module_name,'__builtins__').to_js()},pyobj2jsobj:function(obj){return $B.pyobj2jsobj(obj)},jsobj2pyobj:function(obj){return $B.jsobj2pyobj(obj)}}
var _b_=$B.builtins
modules['_sys']={__file__:$B.brython_path+'/libs/_sys.js',
Getframe : function(depth){return $B._frame($B.frames_stack,depth)},modules :
{'__get__':function(){return _b_.dict($B.JSObject($B.imported))},'__set__':function(self,obj,value){throw _b_.TypeError("Read only property 'sys.modules'")}},path: 
{'__get__':function(){return $B.path},'__set__':function(self,obj,value){$B.path=value }},meta_path: 
{'__get__':function(){return $B.meta_path},'__set__':function(self,obj,value){$B.meta_path=value }},path_hooks: 
{'__get__':function(){return $B.path_hooks},'__set__':function(self,obj,value){$B.path_hooks=value }},path_importer_cache: 
{'__get__':function(){return _b_.dict($B.JSObject($B.path_importer_cache))},'__set__':function(self,obj,value){throw _b_.TypeError("Read only property 'sys.path_importer_cache'")}},stderr :{
__get__:function(){return $B.stderr},__set__:function(self,obj,value){$B.stderr=value},write:function(data){_b_.getattr($B.stderr,"write")(data)}},stdout :{
__get__:function(){return $B.stdout},__set__:function(self,obj,value){$B.stdout=value},write:function(data){console.log('stdout write');_b_.getattr($B.stdout,"write")(data)}},stdin : $B.stdin}
function load(name,module_obj){
module_obj.__class__=$B.$ModuleDict
module_obj.__name__=name
module_obj.__repr__=module_obj.__str__=function(){return "<module '"+name+"' (built-in)>"}
$B.imported[name]=$B.modules[name]=module_obj}
for(var attr in modules){load(attr,modules[attr])}
modules['browser'].html=modules['browser.html']})(__BRYTHON__)
;(function($B){var _b_=$B.builtins,
$sys=$B.imported['_sys'];
function import_hooks(mod_name,_path,module,blocking){
var is_none=$B.is_none
if(is_none(module)){module=undefined;}
var _meta_path=_b_.getattr($sys,'meta_path');
var spec=undefined;
for(var i=0,_len_i=_meta_path.length;i < _len_i && is_none(spec);i++){var _finder=_meta_path[i],find_spec=_b_.getattr(_finder,'find_spec',null)
if(find_spec !==null){spec=_b_.getattr(find_spec,'__call__')(mod_name,_path,undefined);
spec.blocking=blocking}}
if(is_none(spec)){
throw _b_.ImportError('No module named '+mod_name);}
var _loader=_b_.getattr(spec,'loader',_b_.None),_sys_modules=$B.imported,_spec_name=_b_.getattr(spec,'name');
if(is_none(module)){
if(!is_none(_loader)){var create_module=_b_.getattr(_loader,'create_module',_b_.None);
if(!is_none(create_module)){module=_b_.getattr(create_module,'__call__')(spec);}}
if(module===undefined){throw _b_.ImportError(mod_name)}
if(is_none(module)){
module=$B.$ModuleDict.$factory(mod_name);
var mod_desc=_b_.getattr(spec,'origin');
if(_b_.getattr(spec,'has_location')){mod_desc="from '" + mod_desc + "'";}
else{
mod_desc='(' + mod_desc + ')';}
module.toString=module.__repr__=module.__str__=
function(){return "<module '" + mod_name + "' " + mod_desc + ">"}}}
module.__name__=_spec_name;
module.__loader__=_loader;
module.__package__=_b_.getattr(spec,'parent','');
module.__spec__=spec;
var locs=_b_.getattr(spec,'submodule_search_locations');
if(module.$is_package=!is_none(locs)){module.__path__=locs;}
if(_b_.getattr(spec,'has_location')){module.__file__=_b_.getattr(spec,'origin')
$B.$py_module_path[module.__name__]=module.__file__;}
var cached=_b_.getattr(spec,'cached');
if(!is_none(cached)){module.__cached__=cached;}
if(is_none(_loader)){if(!is_none(locs)){$B.modules[_spec_name]=_sys_modules[_spec_name]=module;}
else{
throw _b_.ImportError(mod_name);}}
else{
var exec_module=_b_.getattr(_loader,'exec_module',_b_.None);
if(is_none(exec_module)){
module=_b_.getattr(_b_.getattr(_loader,'load_module'),'__call__')(_spec_name);}
else{
$B.modules[_spec_name]=_sys_modules[_spec_name]=module;
try{_b_.getattr(exec_module,'__call__')(module,blocking)}
catch(e){delete $B.modules[_spec_name];
delete _sys_modules[_spec_name];
throw e;}}}
return _sys_modules[_spec_name];}
$B.import_hooks=import_hooks})(__BRYTHON__)
;(function($B){_b_=$B.builtins
$B.execution_object={}
$B.execution_object.queue=[]
$B.execution_object.start_flag=true
$B.execution_object.$execute_next_segment=function(){if($B.execution_object.queue.length==0){return}
$B.execution_object.start_flag=false
var element=$B.execution_object.queue.shift()
var code=element[0]
var delay=10
if(element.length==2)delay=element[1]
setTimeout(function(){
console.log(code)
try{eval(code)}catch(e){console.log(e)}
$B.execution_object.start_flag=$B.execution_object.queue.length==0;},delay);}
$B.execution_object.$append=function(code,delay){$B.execution_object.queue.push([code,delay]);
if($B.execution_object.start_flag)$B.execution_object.$execute_next_segment()}
$B.execution_object.source_conversion=function(js){js=js.replace("\n","",'g')
js=js.replace("'","\\'",'g')
js=js.replace('"','\\"','g')
js=js.replace("@@","\'",'g')
js+="';$B.execution_object.$append($jscode, 10); "
js+="$B.execution_object.$execute_next_segment(); "
return "var $jscode='" + js}
_b_['brython_block']=function(f,sec){if(sec===undefined ||sec==_b_.None)sec=1
return f}
$B.builtin_funcs['brython_block']=true
$B.bound['__builtins__']['brython_block']=true
_b_['brython_async']=function(f){return f}
$B.builtin_funcs['brython_async']=true
$B.bound['__builtins__']['brython_async']=true})(__BRYTHON__)
__BRYTHON__.use_VFS = true;
__BRYTHON__.VFS={"encodings.mac_croatian": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-croatian',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\u0160'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\u017d'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\u2206'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u0161'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\u017e'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u0106'\n'\\xab'\n'\\u010c'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u0110'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\uf8ff'\n'\\xa9'\n'\\u2044'\n'\\u20ac'\n'\\u2039'\n'\\u203a'\n'\\xc6'\n'\\xbb'\n'\\u2013'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\u0107'\n'\\xc1'\n'\\u010d'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\u0111'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u03c0'\n'\\xcb'\n'\\u02da'\n'\\xb8'\n'\\xca'\n'\\xe6'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "subprocess": [".py", "\n\n\n\n\n\n\n\n\nr\"\"\"subprocess - Subprocesses with accessible I/O streams\n\nThis module allows you to spawn processes, connect to their\ninput/output/error pipes, and obtain their return codes.  This module\nintends to replace several other, older modules and functions, like:\n\nos.system\nos.spawn*\n\nInformation about how the subprocess module can be used to replace these\nmodules and functions can be found below.\n\n\n\nUsing the subprocess module\n===========================\nThis module defines one class called Popen:\n\nclass Popen(args, bufsize=-1, executable=None,\n            stdin=None, stdout=None, stderr=None,\n            preexec_fn=None, close_fds=True, shell=False,\n            cwd=None, env=None, universal_newlines=False,\n            startupinfo=None, creationflags=0,\n            restore_signals=True, start_new_session=False, pass_fds=()):\n\n\nArguments are:\n\nargs should be a string, or a sequence of program arguments.  The\nprogram to execute is normally the first item in the args sequence or\nstring, but can be explicitly set by using the executable argument.\n\nOn POSIX, with shell=False (default): In this case, the Popen class\nuses os.execvp() to execute the child program.  args should normally\nbe a sequence.  A string will be treated as a sequence with the string\nas the only item (the program to execute).\n\nOn POSIX, with shell=True: If args is a string, it specifies the\ncommand string to execute through the shell.  If args is a sequence,\nthe first item specifies the command string, and any additional items\nwill be treated as additional shell arguments.\n\nOn Windows: the Popen class uses CreateProcess() to execute the child\nprogram, which operates on strings.  If args is a sequence, it will be\nconverted to a string using the list2cmdline method.  Please note that\nnot all MS Windows applications interpret the command line the same\nway: The list2cmdline is designed for applications using the same\nrules as the MS C runtime.\n\nbufsize will be supplied as the corresponding argument to the io.open()\nfunction when creating the stdin/stdout/stderr pipe file objects:\n0 means unbuffered (read & write are one system call and can return short),\n1 means line buffered, any other positive value means use a buffer of\napproximately that size.  A negative bufsize, the default, means the system\ndefault of io.DEFAULT_BUFFER_SIZE will be used.\n\nstdin, stdout and stderr specify the executed programs' standard\ninput, standard output and standard error file handles, respectively.\nValid values are PIPE, an existing file descriptor (a positive\ninteger), an existing file object, and None.  PIPE indicates that a\nnew pipe to the child should be created.  With None, no redirection\nwill occur; the child's file handles will be inherited from the\nparent.  Additionally, stderr can be STDOUT, which indicates that the\nstderr data from the applications should be captured into the same\nfile handle as for stdout.\n\nOn POSIX, if preexec_fn is set to a callable object, this object will be\ncalled in the child process just before the child is executed.  The use\nof preexec_fn is not thread safe, using it in the presence of threads\ncould lead to a deadlock in the child process before the new executable\nis executed.\n\nIf close_fds is true, all file descriptors except 0, 1 and 2 will be\nclosed before the child process is executed.  The default for close_fds\nvaries by platform:  Always true on POSIX.  True when stdin/stdout/stderr\nare None on Windows, false otherwise.\n\npass_fds is an optional sequence of file descriptors to keep open between the\nparent and child.  Providing any pass_fds implicitly sets close_fds to true.\n\nif shell is true, the specified command will be executed through the\nshell.\n\nIf cwd is not None, the current directory will be changed to cwd\nbefore the child is executed.\n\nOn POSIX, if restore_signals is True all signals that Python sets to\nSIG_IGN are restored to SIG_DFL in the child process before the exec.\nCurrently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals.  This\nparameter does nothing on Windows.\n\nOn POSIX, if start_new_session is True, the setsid() system call will be made\nin the child process prior to executing the command.\n\nIf env is not None, it defines the environment variables for the new\nprocess.\n\nIf universal_newlines is false, the file objects stdin, stdout and stderr\nare opened as binary files, and no line ending conversion is done.\n\nIf universal_newlines is true, the file objects stdout and stderr are\nopened as a text files, but lines may be terminated by any of '\\n',\nthe Unix end-of-line convention, '\\r', the old Macintosh convention or\n'\\r\\n', the Windows convention.  All of these external representations\nare seen as '\\n' by the Python program.  Also, the newlines attribute\nof the file objects stdout, stdin and stderr are not updated by the\ncommunicate() method.\n\nThe startupinfo and creationflags, if given, will be passed to the\nunderlying CreateProcess() function.  They can specify things such as\nappearance of the main window and priority for the new process.\n(Windows only)\n\n\nThis module also defines some shortcut functions:\n\ncall(*popenargs, **kwargs):\n    Run command with arguments.  Wait for command to complete, then\n    return the returncode attribute.\n\n    The arguments are the same as for the Popen constructor.  Example:\n\n    >>> retcode = subprocess.call([\"ls\", \"-l\"])\n\ncheck_call(*popenargs, **kwargs):\n    Run command with arguments.  Wait for command to complete.  If the\n    exit code was zero then return, otherwise raise\n    CalledProcessError.  The CalledProcessError object will have the\n    return code in the returncode attribute.\n\n    The arguments are the same as for the Popen constructor.  Example:\n\n    >>> subprocess.check_call([\"ls\", \"-l\"])\n    0\n\ngetstatusoutput(cmd):\n    Return (status, output) of executing cmd in a shell.\n\n    Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple\n    (status, output).  cmd is actually run as '{ cmd ; } 2>&1', so that the\n    returned output will contain output or error messages. A trailing newline\n    is stripped from the output. The exit status for the command can be\n    interpreted according to the rules for the C function wait().  Example:\n\n    >>> subprocess.getstatusoutput('ls /bin/ls')\n    (0, '/bin/ls')\n    >>> subprocess.getstatusoutput('cat /bin/junk')\n    (256, 'cat: /bin/junk: No such file or directory')\n    >>> subprocess.getstatusoutput('/bin/junk')\n    (256, 'sh: /bin/junk: not found')\n\ngetoutput(cmd):\n    Return output (stdout or stderr) of executing cmd in a shell.\n\n    Like getstatusoutput(), except the exit status is ignored and the return\n    value is a string containing the command's output.  Example:\n\n    >>> subprocess.getoutput('ls /bin/ls')\n    '/bin/ls'\n\ncheck_output(*popenargs, **kwargs):\n    Run command with arguments and return its output.\n\n    If the exit code was non-zero it raises a CalledProcessError.  The\n    CalledProcessError object will have the return code in the returncode\n    attribute and output in the output attribute.\n\n    The arguments are the same as for the Popen constructor.  Example:\n\n    >>> output = subprocess.check_output([\"ls\", \"-l\", \"/dev/null\"])\n\n\nExceptions\n----------\nExceptions raised in the child process, before the new program has\nstarted to execute, will be re-raised in the parent.  Additionally,\nthe exception object will have one extra attribute called\n'child_traceback', which is a string containing traceback information\nfrom the child's point of view.\n\nThe most common exception raised is OSError.  This occurs, for\nexample, when trying to execute a non-existent file.  Applications\nshould prepare for OSErrors.\n\nA ValueError will be raised if Popen is called with invalid arguments.\n\nExceptions defined within this module inherit from SubprocessError.\ncheck_call() and check_output() will raise CalledProcessError if the\ncalled process returns a non-zero return code.  TimeoutExpired\nbe raised if a timeout was specified and expired.\n\n\nSecurity\n--------\nUnlike some other popen functions, this implementation will never call\n/bin/sh implicitly.  This means that all characters, including shell\nmetacharacters, can safely be passed to child processes.\n\n\nPopen objects\n=============\nInstances of the Popen class have the following methods:\n\npoll()\n    Check if child process has terminated.  Returns returncode\n    attribute.\n\nwait()\n    Wait for child process to terminate.  Returns returncode attribute.\n\ncommunicate(input=None)\n    Interact with process: Send data to stdin.  Read data from stdout\n    and stderr, until end-of-file is reached.  Wait for process to\n    terminate.  The optional input argument should be a string to be\n    sent to the child process, or None, if no data should be sent to\n    the child.\n\n    communicate() returns a tuple (stdout, stderr).\n\n    Note: The data read is buffered in memory, so do not use this\n    method if the data size is large or unlimited.\n\nThe following attributes are also available:\n\nstdin\n    If the stdin argument is PIPE, this attribute is a file object\n    that provides input to the child process.  Otherwise, it is None.\n\nstdout\n    If the stdout argument is PIPE, this attribute is a file object\n    that provides output from the child process.  Otherwise, it is\n    None.\n\nstderr\n    If the stderr argument is PIPE, this attribute is file object that\n    provides error output from the child process.  Otherwise, it is\n    None.\n\npid\n    The process ID of the child process.\n\nreturncode\n    The child return code.  A None value indicates that the process\n    hasn't terminated yet.  A negative value -N indicates that the\n    child was terminated by signal N (POSIX only).\n\n\nReplacing older functions with the subprocess module\n====================================================\nIn this section, \"a ==> b\" means that b can be used as a replacement\nfor a.\n\nNote: All functions in this section fail (more or less) silently if\nthe executed program cannot be found; this module raises an OSError\nexception.\n\nIn the following examples, we assume that the subprocess module is\nimported with \"from subprocess import *\".\n\n\nReplacing /bin/sh shell backquote\n---------------------------------\noutput=`mycmd myarg`\n==>\noutput = Popen([\"mycmd\", \"myarg\"], stdout=PIPE).communicate()[0]\n\n\nReplacing shell pipe line\n-------------------------\noutput=`dmesg | grep hda`\n==>\np1 = Popen([\"dmesg\"], stdout=PIPE)\np2 = Popen([\"grep\", \"hda\"], stdin=p1.stdout, stdout=PIPE)\noutput = p2.communicate()[0]\n\n\nReplacing os.system()\n---------------------\nsts = os.system(\"mycmd\" + \" myarg\")\n==>\np = Popen(\"mycmd\" + \" myarg\", shell=True)\npid, sts = os.waitpid(p.pid, 0)\n\nNote:\n\n* Calling the program through the shell is usually not required.\n\n* It's easier to look at the returncode attribute than the\n  exitstatus.\n\nA more real-world example would look like this:\n\ntry:\n    retcode = call(\"mycmd\" + \" myarg\", shell=True)\n    if retcode < 0:\n        print(\"Child was terminated by signal\", -retcode, file=sys.stderr)\n    else:\n        print(\"Child returned\", retcode, file=sys.stderr)\nexcept OSError as e:\n    print(\"Execution failed:\", e, file=sys.stderr)\n\n\nReplacing os.spawn*\n-------------------\nP_NOWAIT example:\n\npid = os.spawnlp(os.P_NOWAIT, \"/bin/mycmd\", \"mycmd\", \"myarg\")\n==>\npid = Popen([\"/bin/mycmd\", \"myarg\"]).pid\n\n\nP_WAIT example:\n\nretcode = os.spawnlp(os.P_WAIT, \"/bin/mycmd\", \"mycmd\", \"myarg\")\n==>\nretcode = call([\"/bin/mycmd\", \"myarg\"])\n\n\nVector example:\n\nos.spawnvp(os.P_NOWAIT, path, args)\n==>\nPopen([path] + args[1:])\n\n\nEnvironment example:\n\nos.spawnlpe(os.P_NOWAIT, \"/bin/mycmd\", \"mycmd\", \"myarg\", env)\n==>\nPopen([\"/bin/mycmd\", \"myarg\"], env={\"PATH\": \"/usr/bin\"})\n\"\"\"\n\nimport sys\nmswindows=(sys.platform ==\"win32\")\n\nimport io\nimport os\nimport time\nimport traceback\nimport gc\nimport signal\nimport builtins\nimport warnings\nimport errno\ntry :\n from time import monotonic as _time\nexcept ImportError:\n from time import time as _time\n \n \nclass SubprocessError(Exception):pass\n\n\nclass CalledProcessError(SubprocessError):\n ''\n\n\n\n \n def __init__(self,returncode,cmd,output=None ):\n  self.returncode=returncode\n  self.cmd=cmd\n  self.output=output\n def __str__(self):\n  return\"Command '%s' returned non-zero exit status %d\"%(self.cmd,self.returncode)\n  \n  \nclass TimeoutExpired(SubprocessError):\n ''\n\n \n def __init__(self,cmd,timeout,output=None ):\n  self.cmd=cmd\n  self.timeout=timeout\n  self.output=output\n  \n def __str__(self):\n  return (\"Command '%s' timed out after %s seconds\"%\n  (self.cmd,self.timeout))\n  \n  \nif mswindows:\n import threading\n import msvcrt\n import _winapi\n class STARTUPINFO:\n  dwFlags=0\n  hStdInput=None\n  hStdOutput=None\n  hStdError=None\n  wShowWindow=0\n class pywintypes:\n  error=IOError\nelse :\n import select\n _has_poll=hasattr(select,'poll')\n import _posixsubprocess\n _create_pipe=_posixsubprocess.cloexec_pipe\n \n \n \n \n _PIPE_BUF=getattr(select,'PIPE_BUF',512)\n \n \n__all__=[\"Popen\",\"PIPE\",\"STDOUT\",\"call\",\"check_call\",\"getstatusoutput\",\n\"getoutput\",\"check_output\",\"CalledProcessError\",\"DEVNULL\"]\n\nif mswindows:\n from _winapi import (CREATE_NEW_CONSOLE,CREATE_NEW_PROCESS_GROUP,\n STD_INPUT_HANDLE,STD_OUTPUT_HANDLE,\n STD_ERROR_HANDLE,SW_HIDE,\n STARTF_USESTDHANDLES,STARTF_USESHOWWINDOW)\n \n __all__.extend([\"CREATE_NEW_CONSOLE\",\"CREATE_NEW_PROCESS_GROUP\",\n \"STD_INPUT_HANDLE\",\"STD_OUTPUT_HANDLE\",\n \"STD_ERROR_HANDLE\",\"SW_HIDE\",\n \"STARTF_USESTDHANDLES\",\"STARTF_USESHOWWINDOW\"])\n \n class Handle(int):\n  closed=False\n  \n  def Close(self,CloseHandle=_winapi.CloseHandle):\n   if not self.closed:\n    self.closed=True\n    CloseHandle(self)\n    \n  def Detach(self):\n   if not self.closed:\n    self.closed=True\n    return int(self)\n   raise ValueError(\"already closed\")\n   \n  def __repr__(self):\n   return\"Handle(%d)\"%int(self)\n   \n  __del__=Close\n  __str__=__repr__\n  \ntry :\n MAXFD=os.sysconf(\"SC_OPEN_MAX\")\nexcept :\n MAXFD=256\n \n \n \n \n \n_active=[]\n\ndef _cleanup():\n for inst in _active[:]:\n  res=inst._internal_poll(_deadstate=sys.maxsize)\n  if res is not None :\n   try :\n    _active.remove(inst)\n   except ValueError:\n   \n   \n    pass\n    \nPIPE=-1\nSTDOUT=-2\nDEVNULL=-3\n\n\ndef _eintr_retry_call(func,*args):\n while True :\n  try :\n   return func(*args)\n  except InterruptedError:\n   continue\n   \n   \n   \n   \n   \n   \ndef _args_from_interpreter_flags():\n ''\n \n flag_opt_map={\n 'debug':'d',\n \n \n 'optimize':'O',\n 'dont_write_bytecode':'B',\n 'no_user_site':'s',\n 'no_site':'S',\n 'ignore_environment':'E',\n 'verbose':'v',\n 'bytes_warning':'b',\n 'quiet':'q',\n 'hash_randomization':'R',\n }\n args=[]\n for flag,opt in flag_opt_map.items():\n  v=getattr(sys.flags,flag)\n  if v >0:\n   args.append('-'+opt *v)\n for opt in sys.warnoptions:\n  args.append('-W'+opt)\n return args\n \n \ndef call(*popenargs,timeout=None ,**kwargs):\n ''\n\n\n\n\n\n \n with Popen(*popenargs,**kwargs)as p:\n  try :\n   return p.wait(timeout=timeout)\n  except :\n   p.kill()\n   p.wait()\n   raise\n   \n   \ndef check_call(*popenargs,**kwargs):\n ''\n\n\n\n\n\n\n\n \n retcode=call(*popenargs,**kwargs)\n if retcode:\n  cmd=kwargs.get(\"args\")\n  if cmd is None :\n   cmd=popenargs[0]\n  raise CalledProcessError(retcode,cmd)\n return 0\n \n \ndef check_output(*popenargs,timeout=None ,**kwargs):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if'stdout'in kwargs:\n  raise ValueError('stdout argument not allowed, it will be overridden.')\n with Popen(*popenargs,stdout=PIPE,**kwargs)as process:\n  try :\n   output,unused_err=process.communicate(timeout=timeout)\n  except TimeoutExpired:\n   process.kill()\n   output,unused_err=process.communicate()\n   raise TimeoutExpired(process.args,timeout,output=output)\n  except :\n   process.kill()\n   process.wait()\n   raise\n  retcode=process.poll()\n  if retcode:\n   raise CalledProcessError(retcode,process.args,output=output)\n return output\n \n \ndef list2cmdline(seq):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n result=[]\n needquote=False\n for arg in seq:\n  bs_buf=[]\n  \n  \n  if result:\n   result.append(' ')\n   \n  needquote=(\" \"in arg)or (\"\\t\"in arg)or not arg\n  if needquote:\n   result.append('\"')\n   \n  for c in arg:\n   if c =='\\\\':\n   \n    bs_buf.append(c)\n   elif c =='\"':\n   \n    result.append('\\\\'*len(bs_buf)*2)\n    bs_buf=[]\n    result.append('\\\\\"')\n   else :\n   \n    if bs_buf:\n     result.extend(bs_buf)\n     bs_buf=[]\n    result.append(c)\n    \n    \n  if bs_buf:\n   result.extend(bs_buf)\n   \n  if needquote:\n   result.extend(bs_buf)\n   result.append('\"')\n   \n return''.join(result)\n \n \n \n \n \n \ndef getstatusoutput(cmd):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n with os.popen('{ '+cmd+'; } 2>&1','r')as pipe:\n  try :\n   text=pipe.read()\n   sts=pipe.close()\n  except :\n   process=pipe._proc\n   process.kill()\n   process.wait()\n   raise\n if sts is None :\n  sts=0\n if text[-1:]=='\\n':\n  text=text[:-1]\n return sts,text\n \n \ndef getoutput(cmd):\n ''\n\n\n\n\n\n\n\n \n return getstatusoutput(cmd)[1]\n \n \n_PLATFORM_DEFAULT_CLOSE_FDS=object()\n\n\nclass Popen(object):\n def __init__(self,args,bufsize=-1,executable=None ,\n stdin=None ,stdout=None ,stderr=None ,\n preexec_fn=None ,close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,\n shell=False ,cwd=None ,env=None ,universal_newlines=False ,\n startupinfo=None ,creationflags=0,\n restore_signals=True ,start_new_session=False ,\n pass_fds=()):\n  ''\n  _cleanup()\n  \n  self._child_created=False\n  self._input=None\n  self._communication_started=False\n  if bufsize is None :\n   bufsize=-1\n  if not isinstance(bufsize,int):\n   raise TypeError(\"bufsize must be an integer\")\n   \n  if mswindows:\n   if preexec_fn is not None :\n    raise ValueError(\"preexec_fn is not supported on Windows \"\n    \"platforms\")\n   any_stdio_set=(stdin is not None or stdout is not None or\n   stderr is not None )\n   if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:\n    if any_stdio_set:\n     close_fds=False\n    else :\n     close_fds=True\n   elif close_fds and any_stdio_set:\n    raise ValueError(\n    \"close_fds is not supported on Windows platforms\"\n    \" if you redirect stdin/stdout/stderr\")\n  else :\n  \n   if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:\n    close_fds=True\n   if pass_fds and not close_fds:\n    warnings.warn(\"pass_fds overriding close_fds.\",RuntimeWarning)\n    close_fds=True\n   if startupinfo is not None :\n    raise ValueError(\"startupinfo is only supported on Windows \"\n    \"platforms\")\n   if creationflags !=0:\n    raise ValueError(\"creationflags is only supported on Windows \"\n    \"platforms\")\n    \n  self.args=args\n  self.stdin=None\n  self.stdout=None\n  self.stderr=None\n  self.pid=None\n  self.returncode=None\n  self.universal_newlines=universal_newlines\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  (p2cread,p2cwrite,\n  c2pread,c2pwrite,\n  errread,errwrite)=self._get_handles(stdin,stdout,stderr)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  if p2cwrite !=-1:\n   self.stdin=io.open(p2cwrite,'wb',bufsize)\n   if universal_newlines:\n    self.stdin=io.TextIOWrapper(self.stdin,write_through=True )\n  if c2pread !=-1:\n   self.stdout=io.open(c2pread,'rb',bufsize)\n   if universal_newlines:\n    self.stdout=io.TextIOWrapper(self.stdout)\n  if errread !=-1:\n   self.stderr=io.open(errread,'rb',bufsize)\n   if universal_newlines:\n    self.stderr=io.TextIOWrapper(self.stderr)\n    \n  self._closed_child_pipe_fds=False\n  try :\n   self._execute_child(args,executable,preexec_fn,close_fds,\n   pass_fds,cwd,env,\n   startupinfo,creationflags,shell,\n   p2cread,p2cwrite,\n   c2pread,c2pwrite,\n   errread,errwrite,\n   restore_signals,start_new_session)\n  except :\n  \n   for f in filter(None ,(self.stdin,self.stdout,self.stderr)):\n    try :\n     f.close()\n    except EnvironmentError:\n     pass\n     \n   if not self._closed_child_pipe_fds:\n    to_close=[]\n    if stdin ==PIPE:\n     to_close.append(p2cread)\n    if stdout ==PIPE:\n     to_close.append(c2pwrite)\n    if stderr ==PIPE:\n     to_close.append(errwrite)\n    if hasattr(self,'_devnull'):\n     to_close.append(self._devnull)\n    for fd in to_close:\n     try :\n      os.close(fd)\n     except EnvironmentError:\n      pass\n      \n   raise\n   \n   \n def _translate_newlines(self,data,encoding):\n  data=data.decode(encoding)\n  return data.replace(\"\\r\\n\",\"\\n\").replace(\"\\r\",\"\\n\")\n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,type,value,traceback):\n  if self.stdout:\n   self.stdout.close()\n  if self.stderr:\n   self.stderr.close()\n  if self.stdin:\n   self.stdin.close()\n   \n  self.wait()\n  \n def __del__(self,_maxsize=sys.maxsize,_active=_active):\n \n \n \n  if not getattr(self,'_child_created',False ):\n  \n   return\n   \n  self._internal_poll(_deadstate=_maxsize)\n  if self.returncode is None and _active is not None :\n  \n   _active.append(self)\n   \n def _get_devnull(self):\n  if not hasattr(self,'_devnull'):\n   self._devnull=os.open(os.devnull,os.O_RDWR)\n  return self._devnull\n  \n def communicate(self,input=None ,timeout=None ):\n  ''\n\n\n\n\n\n  \n  \n  if self._communication_started and input:\n   raise ValueError(\"Cannot send input after starting communication\")\n   \n   \n   \n   \n  if (timeout is None and not self._communication_started and\n  [self.stdin,self.stdout,self.stderr].count(None )>=2):\n   stdout=None\n   stderr=None\n   if self.stdin:\n    if input:\n     try :\n      self.stdin.write(input)\n     except IOError as e:\n      if e.errno !=errno.EPIPE and e.errno !=errno.EINVAL:\n       raise\n    self.stdin.close()\n   elif self.stdout:\n    stdout=_eintr_retry_call(self.stdout.read)\n    self.stdout.close()\n   elif self.stderr:\n    stderr=_eintr_retry_call(self.stderr.read)\n    self.stderr.close()\n   self.wait()\n  else :\n   if timeout is not None :\n    endtime=_time()+timeout\n   else :\n    endtime=None\n    \n   try :\n    stdout,stderr=self._communicate(input,endtime,timeout)\n   finally :\n    self._communication_started=True\n    \n   sts=self.wait(timeout=self._remaining_time(endtime))\n   \n  return (stdout,stderr)\n  \n  \n def poll(self):\n  return self._internal_poll()\n  \n  \n def _remaining_time(self,endtime):\n  ''\n  if endtime is None :\n   return None\n  else :\n   return endtime -_time()\n   \n   \n def _check_timeout(self,endtime,orig_timeout):\n  ''\n  if endtime is None :\n   return\n  if _time()>endtime:\n   raise TimeoutExpired(self.args,orig_timeout)\n   \n   \n if mswindows:\n \n \n \n  def _get_handles(self,stdin,stdout,stderr):\n   ''\n\n   \n   if stdin is None and stdout is None and stderr is None :\n    return (-1,-1,-1,-1,-1,-1)\n    \n   p2cread,p2cwrite=-1,-1\n   c2pread,c2pwrite=-1,-1\n   errread,errwrite=-1,-1\n   \n   if stdin is None :\n    p2cread=_winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)\n    if p2cread is None :\n     p2cread,_=_winapi.CreatePipe(None ,0)\n     p2cread=Handle(p2cread)\n     _winapi.CloseHandle(_)\n   elif stdin ==PIPE:\n    p2cread,p2cwrite=_winapi.CreatePipe(None ,0)\n    p2cread,p2cwrite=Handle(p2cread),Handle(p2cwrite)\n   elif stdin ==DEVNULL:\n    p2cread=msvcrt.get_osfhandle(self._get_devnull())\n   elif isinstance(stdin,int):\n    p2cread=msvcrt.get_osfhandle(stdin)\n   else :\n   \n    p2cread=msvcrt.get_osfhandle(stdin.fileno())\n   p2cread=self._make_inheritable(p2cread)\n   \n   if stdout is None :\n    c2pwrite=_winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)\n    if c2pwrite is None :\n     _,c2pwrite=_winapi.CreatePipe(None ,0)\n     c2pwrite=Handle(c2pwrite)\n     _winapi.CloseHandle(_)\n   elif stdout ==PIPE:\n    c2pread,c2pwrite=_winapi.CreatePipe(None ,0)\n    c2pread,c2pwrite=Handle(c2pread),Handle(c2pwrite)\n   elif stdout ==DEVNULL:\n    c2pwrite=msvcrt.get_osfhandle(self._get_devnull())\n   elif isinstance(stdout,int):\n    c2pwrite=msvcrt.get_osfhandle(stdout)\n   else :\n   \n    c2pwrite=msvcrt.get_osfhandle(stdout.fileno())\n   c2pwrite=self._make_inheritable(c2pwrite)\n   \n   if stderr is None :\n    errwrite=_winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)\n    if errwrite is None :\n     _,errwrite=_winapi.CreatePipe(None ,0)\n     errwrite=Handle(errwrite)\n     _winapi.CloseHandle(_)\n   elif stderr ==PIPE:\n    errread,errwrite=_winapi.CreatePipe(None ,0)\n    errread,errwrite=Handle(errread),Handle(errwrite)\n   elif stderr ==STDOUT:\n    errwrite=c2pwrite\n   elif stderr ==DEVNULL:\n    errwrite=msvcrt.get_osfhandle(self._get_devnull())\n   elif isinstance(stderr,int):\n    errwrite=msvcrt.get_osfhandle(stderr)\n   else :\n   \n    errwrite=msvcrt.get_osfhandle(stderr.fileno())\n   errwrite=self._make_inheritable(errwrite)\n   \n   return (p2cread,p2cwrite,\n   c2pread,c2pwrite,\n   errread,errwrite)\n   \n   \n  def _make_inheritable(self,handle):\n   ''\n   h=_winapi.DuplicateHandle(\n   _winapi.GetCurrentProcess(),handle,\n   _winapi.GetCurrentProcess(),0,1,\n   _winapi.DUPLICATE_SAME_ACCESS)\n   return Handle(h)\n   \n   \n  def _find_w9xpopen(self):\n   ''\n   w9xpopen=os.path.join(\n   os.path.dirname(_winapi.GetModuleFileName(0)),\n   \"w9xpopen.exe\")\n   if not os.path.exists(w9xpopen):\n   \n   \n    w9xpopen=os.path.join(os.path.dirname(sys.base_exec_prefix),\n    \"w9xpopen.exe\")\n    if not os.path.exists(w9xpopen):\n     raise RuntimeError(\"Cannot locate w9xpopen.exe, which is \"\n     \"needed for Popen to work with your \"\n     \"shell or platform.\")\n   return w9xpopen\n   \n   \n  def _execute_child(self,args,executable,preexec_fn,close_fds,\n  pass_fds,cwd,env,\n  startupinfo,creationflags,shell,\n  p2cread,p2cwrite,\n  c2pread,c2pwrite,\n  errread,errwrite,\n  unused_restore_signals,unused_start_new_session):\n   ''\n   \n   assert not pass_fds,\"pass_fds not supported on Windows.\"\n   \n   if not isinstance(args,str):\n    args=list2cmdline(args)\n    \n    \n   if startupinfo is None :\n    startupinfo=STARTUPINFO()\n   if -1 not in (p2cread,c2pwrite,errwrite):\n    startupinfo.dwFlags |=_winapi.STARTF_USESTDHANDLES\n    startupinfo.hStdInput=p2cread\n    startupinfo.hStdOutput=c2pwrite\n    startupinfo.hStdError=errwrite\n    \n   if shell:\n    startupinfo.dwFlags |=_winapi.STARTF_USESHOWWINDOW\n    startupinfo.wShowWindow=_winapi.SW_HIDE\n    comspec=os.environ.get(\"COMSPEC\",\"cmd.exe\")\n    args='{} /c \"{}\"'.format(comspec,args)\n    if (_winapi.GetVersion()>=0x80000000 or\n    os.path.basename(comspec).lower()==\"command.com\"):\n    \n    \n    \n    \n     w9xpopen=self._find_w9xpopen()\n     args='\"%s\" %s'%(w9xpopen,args)\n     \n     \n     \n     \n     \n     \n     creationflags |=_winapi.CREATE_NEW_CONSOLE\n     \n     \n   try :\n    hp,ht,pid,tid=_winapi.CreateProcess(executable,args,\n    \n    None ,None ,\n    int(not close_fds),\n    creationflags,\n    env,\n    cwd,\n    startupinfo)\n   except pywintypes.error as e:\n   \n   \n   \n   \n    raise WindowsError(*e.args)\n   finally :\n   \n   \n   \n   \n   \n   \n    if p2cread !=-1:\n     p2cread.Close()\n    if c2pwrite !=-1:\n     c2pwrite.Close()\n    if errwrite !=-1:\n     errwrite.Close()\n    if hasattr(self,'_devnull'):\n     os.close(self._devnull)\n     \n     \n   self._child_created=True\n   self._handle=Handle(hp)\n   self.pid=pid\n   _winapi.CloseHandle(ht)\n   \n  def _internal_poll(self,_deadstate=None ,\n  _WaitForSingleObject=_winapi.WaitForSingleObject,\n  _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,\n  _GetExitCodeProcess=_winapi.GetExitCodeProcess):\n   ''\n\n\n\n\n\n   \n   if self.returncode is None :\n    if _WaitForSingleObject(self._handle,0)==_WAIT_OBJECT_0:\n     self.returncode=_GetExitCodeProcess(self._handle)\n   return self.returncode\n   \n   \n  def wait(self,timeout=None ,endtime=None ):\n   ''\n   \n   if endtime is not None :\n    timeout=self._remaining_time(endtime)\n   if timeout is None :\n    timeout_millis=_winapi.INFINITE\n   else :\n    timeout_millis=int(timeout *1000)\n   if self.returncode is None :\n    result=_winapi.WaitForSingleObject(self._handle,\n    timeout_millis)\n    if result ==_winapi.WAIT_TIMEOUT:\n     raise TimeoutExpired(self.args,timeout)\n    self.returncode=_winapi.GetExitCodeProcess(self._handle)\n   return self.returncode\n   \n   \n  def _readerthread(self,fh,buffer):\n   buffer.append(fh.read())\n   fh.close()\n   \n   \n  def _communicate(self,input,endtime,orig_timeout):\n  \n  \n   if self.stdout and not hasattr(self,\"_stdout_buff\"):\n    self._stdout_buff=[]\n    self.stdout_thread=    threading.Thread(target=self._readerthread,\n    args=(self.stdout,self._stdout_buff))\n    self.stdout_thread.daemon=True\n    self.stdout_thread.start()\n   if self.stderr and not hasattr(self,\"_stderr_buff\"):\n    self._stderr_buff=[]\n    self.stderr_thread=    threading.Thread(target=self._readerthread,\n    args=(self.stderr,self._stderr_buff))\n    self.stderr_thread.daemon=True\n    self.stderr_thread.start()\n    \n   if self.stdin:\n    if input is not None :\n     try :\n      self.stdin.write(input)\n     except IOError as e:\n      if e.errno !=errno.EPIPE:\n       raise\n    self.stdin.close()\n    \n    \n    \n    \n   if self.stdout is not None :\n    self.stdout_thread.join(self._remaining_time(endtime))\n    if self.stdout_thread.is_alive():\n     raise TimeoutExpired(self.args,orig_timeout)\n   if self.stderr is not None :\n    self.stderr_thread.join(self._remaining_time(endtime))\n    if self.stderr_thread.is_alive():\n     raise TimeoutExpired(self.args,orig_timeout)\n     \n     \n     \n   stdout=None\n   stderr=None\n   if self.stdout:\n    stdout=self._stdout_buff\n    self.stdout.close()\n   if self.stderr:\n    stderr=self._stderr_buff\n    self.stderr.close()\n    \n    \n   if stdout is not None :\n    stdout=stdout[0]\n   if stderr is not None :\n    stderr=stderr[0]\n    \n   return (stdout,stderr)\n   \n  def send_signal(self,sig):\n   ''\n   \n   if sig ==signal.SIGTERM:\n    self.terminate()\n   elif sig ==signal.CTRL_C_EVENT:\n    os.kill(self.pid,signal.CTRL_C_EVENT)\n   elif sig ==signal.CTRL_BREAK_EVENT:\n    os.kill(self.pid,signal.CTRL_BREAK_EVENT)\n   else :\n    raise ValueError(\"Unsupported signal: {}\".format(sig))\n    \n  def terminate(self):\n   ''\n   \n   try :\n    _winapi.TerminateProcess(self._handle,1)\n   except PermissionError:\n   \n   \n    rc=_winapi.GetExitCodeProcess(self._handle)\n    if rc ==_winapi.STILL_ACTIVE:\n     raise\n    self.returncode=rc\n    \n  kill=terminate\n  \n else :\n \n \n \n  def _get_handles(self,stdin,stdout,stderr):\n   ''\n\n   \n   p2cread,p2cwrite=-1,-1\n   c2pread,c2pwrite=-1,-1\n   errread,errwrite=-1,-1\n   \n   if stdin is None :\n    pass\n   elif stdin ==PIPE:\n    p2cread,p2cwrite=_create_pipe()\n   elif stdin ==DEVNULL:\n    p2cread=self._get_devnull()\n   elif isinstance(stdin,int):\n    p2cread=stdin\n   else :\n   \n    p2cread=stdin.fileno()\n    \n   if stdout is None :\n    pass\n   elif stdout ==PIPE:\n    c2pread,c2pwrite=_create_pipe()\n   elif stdout ==DEVNULL:\n    c2pwrite=self._get_devnull()\n   elif isinstance(stdout,int):\n    c2pwrite=stdout\n   else :\n   \n    c2pwrite=stdout.fileno()\n    \n   if stderr is None :\n    pass\n   elif stderr ==PIPE:\n    errread,errwrite=_create_pipe()\n   elif stderr ==STDOUT:\n    errwrite=c2pwrite\n   elif stderr ==DEVNULL:\n    errwrite=self._get_devnull()\n   elif isinstance(stderr,int):\n    errwrite=stderr\n   else :\n   \n    errwrite=stderr.fileno()\n    \n   return (p2cread,p2cwrite,\n   c2pread,c2pwrite,\n   errread,errwrite)\n   \n   \n  def _close_fds(self,fds_to_keep):\n   start_fd=3\n   for fd in sorted(fds_to_keep):\n    if fd >=start_fd:\n     os.closerange(start_fd,fd)\n     start_fd=fd+1\n   if start_fd <=MAXFD:\n    os.closerange(start_fd,MAXFD)\n    \n    \n  def _execute_child(self,args,executable,preexec_fn,close_fds,\n  pass_fds,cwd,env,\n  startupinfo,creationflags,shell,\n  p2cread,p2cwrite,\n  c2pread,c2pwrite,\n  errread,errwrite,\n  restore_signals,start_new_session):\n   ''\n   \n   if isinstance(args,(str,bytes)):\n    args=[args]\n   else :\n    args=list(args)\n    \n   if shell:\n    args=[\"/bin/sh\",\"-c\"]+args\n    if executable:\n     args[0]=executable\n     \n   if executable is None :\n    executable=args[0]\n   orig_executable=executable\n   \n   \n   \n   \n   errpipe_read,errpipe_write=_create_pipe()\n   try :\n    try :\n    \n    \n    \n    \n    \n     if env is not None :\n      env_list=[os.fsencode(k)+b'='+os.fsencode(v)\n      for k,v in env.items()]\n     else :\n      env_list=None\n     executable=os.fsencode(executable)\n     if os.path.dirname(executable):\n      executable_list=(executable,)\n     else :\n     \n      executable_list=tuple(\n      os.path.join(os.fsencode(dir),executable)\n      for dir in os.get_exec_path(env))\n     fds_to_keep=set(pass_fds)\n     fds_to_keep.add(errpipe_write)\n     self.pid=_posixsubprocess.fork_exec(\n     args,executable_list,\n     close_fds,sorted(fds_to_keep),cwd,env_list,\n     p2cread,p2cwrite,c2pread,c2pwrite,\n     errread,errwrite,\n     errpipe_read,errpipe_write,\n     restore_signals,start_new_session,preexec_fn)\n     self._child_created=True\n    finally :\n    \n     os.close(errpipe_write)\n     \n     \n    devnull_fd=getattr(self,'_devnull',None )\n    if p2cread !=-1 and p2cwrite !=-1 and p2cread !=devnull_fd:\n     os.close(p2cread)\n    if c2pwrite !=-1 and c2pread !=-1 and c2pwrite !=devnull_fd:\n     os.close(c2pwrite)\n    if errwrite !=-1 and errread !=-1 and errwrite !=devnull_fd:\n     os.close(errwrite)\n    if devnull_fd is not None :\n     os.close(devnull_fd)\n     \n    self._closed_child_pipe_fds=True\n    \n    \n    \n    errpipe_data=bytearray()\n    while True :\n     part=_eintr_retry_call(os.read,errpipe_read,50000)\n     errpipe_data +=part\n     if not part or len(errpipe_data)>50000:\n      break\n   finally :\n   \n    os.close(errpipe_read)\n    \n   if errpipe_data:\n    try :\n     _eintr_retry_call(os.waitpid,self.pid,0)\n    except OSError as e:\n     if e.errno !=errno.ECHILD:\n      raise\n    try :\n     exception_name,hex_errno,err_msg=(\n     errpipe_data.split(b':',2))\n    except ValueError:\n     exception_name=b'RuntimeError'\n     hex_errno=b'0'\n     err_msg=(b'Bad exception data from child: '+\n     repr(errpipe_data))\n    child_exception_type=getattr(\n    builtins,exception_name.decode('ascii'),\n    RuntimeError)\n    err_msg=err_msg.decode(errors=\"surrogatepass\")\n    if issubclass(child_exception_type,OSError)and hex_errno:\n     errno_num=int(hex_errno,16)\n     child_exec_never_called=(err_msg ==\"noexec\")\n     if child_exec_never_called:\n      err_msg=\"\"\n     if errno_num !=0:\n      err_msg=os.strerror(errno_num)\n      if errno_num ==errno.ENOENT:\n       if child_exec_never_called:\n       \n        err_msg +=': '+repr(cwd)\n       else :\n        err_msg +=': '+repr(orig_executable)\n     raise child_exception_type(errno_num,err_msg)\n    raise child_exception_type(err_msg)\n    \n    \n  def _handle_exitstatus(self,sts,_WIFSIGNALED=os.WIFSIGNALED,\n  _WTERMSIG=os.WTERMSIG,_WIFEXITED=os.WIFEXITED,\n  _WEXITSTATUS=os.WEXITSTATUS):\n  \n  \n   if _WIFSIGNALED(sts):\n    self.returncode=-_WTERMSIG(sts)\n   elif _WIFEXITED(sts):\n    self.returncode=_WEXITSTATUS(sts)\n   else :\n   \n    raise RuntimeError(\"Unknown child exit status!\")\n    \n    \n  def _internal_poll(self,_deadstate=None ,_waitpid=os.waitpid,\n  _WNOHANG=os.WNOHANG,_os_error=os.error,_ECHILD=errno.ECHILD):\n   ''\n\n\n\n\n\n   \n   if self.returncode is None :\n    try :\n     pid,sts=_waitpid(self.pid,_WNOHANG)\n     if pid ==self.pid:\n      self._handle_exitstatus(sts)\n    except _os_error as e:\n     if _deadstate is not None :\n      self.returncode=_deadstate\n     elif e.errno ==_ECHILD:\n     \n     \n     \n     \n     \n      self.returncode=0\n   return self.returncode\n   \n   \n  def _try_wait(self,wait_flags):\n   try :\n    (pid,sts)=_eintr_retry_call(os.waitpid,self.pid,wait_flags)\n   except OSError as e:\n    if e.errno !=errno.ECHILD:\n     raise\n     \n     \n     \n    pid=self.pid\n    sts=0\n   return (pid,sts)\n   \n   \n  def wait(self,timeout=None ,endtime=None ):\n   ''\n   \n   if self.returncode is not None :\n    return self.returncode\n    \n    \n    \n   if endtime is not None or timeout is not None :\n    if endtime is None :\n     endtime=_time()+timeout\n    elif timeout is None :\n     timeout=self._remaining_time(endtime)\n     \n   if endtime is not None :\n   \n   \n    delay=0.0005\n    while True :\n     (pid,sts)=self._try_wait(os.WNOHANG)\n     assert pid ==self.pid or pid ==0\n     if pid ==self.pid:\n      self._handle_exitstatus(sts)\n      break\n     remaining=self._remaining_time(endtime)\n     if remaining <=0:\n      raise TimeoutExpired(self.args,timeout)\n     delay=min(delay *2,remaining,.05)\n     time.sleep(delay)\n   else :\n    while self.returncode is None :\n     (pid,sts)=self._try_wait(0)\n     \n     \n     if pid ==self.pid:\n      self._handle_exitstatus(sts)\n   return self.returncode\n   \n   \n  def _communicate(self,input,endtime,orig_timeout):\n   if self.stdin and not self._communication_started:\n   \n   \n    self.stdin.flush()\n    if not input:\n     self.stdin.close()\n     \n   if _has_poll:\n    stdout,stderr=self._communicate_with_poll(input,endtime,\n    orig_timeout)\n   else :\n    stdout,stderr=self._communicate_with_select(input,endtime,\n    orig_timeout)\n    \n   self.wait(timeout=self._remaining_time(endtime))\n   \n   \n   if stdout is not None :\n    stdout=b''.join(stdout)\n   if stderr is not None :\n    stderr=b''.join(stderr)\n    \n    \n    \n   if self.universal_newlines:\n    if stdout is not None :\n     stdout=self._translate_newlines(stdout,\n     self.stdout.encoding)\n    if stderr is not None :\n     stderr=self._translate_newlines(stderr,\n     self.stderr.encoding)\n     \n   return (stdout,stderr)\n   \n   \n  def _save_input(self,input):\n  \n  \n  \n   if self.stdin and self._input is None :\n    self._input_offset=0\n    self._input=input\n    if self.universal_newlines and input is not None :\n     self._input=self._input.encode(self.stdin.encoding)\n     \n     \n  def _communicate_with_poll(self,input,endtime,orig_timeout):\n   stdout=None\n   stderr=None\n   \n   if not self._communication_started:\n    self._fd2file={}\n    \n   poller=select.poll()\n   def register_and_append(file_obj,eventmask):\n    poller.register(file_obj.fileno(),eventmask)\n    self._fd2file[file_obj.fileno()]=file_obj\n    \n   def close_unregister_and_remove(fd):\n    poller.unregister(fd)\n    self._fd2file[fd].close()\n    self._fd2file.pop(fd)\n    \n   if self.stdin and input:\n    register_and_append(self.stdin,select.POLLOUT)\n    \n    \n   if not self._communication_started:\n    self._fd2output={}\n    if self.stdout:\n     self._fd2output[self.stdout.fileno()]=[]\n    if self.stderr:\n     self._fd2output[self.stderr.fileno()]=[]\n     \n   select_POLLIN_POLLPRI=select.POLLIN |select.POLLPRI\n   if self.stdout:\n    register_and_append(self.stdout,select_POLLIN_POLLPRI)\n    stdout=self._fd2output[self.stdout.fileno()]\n   if self.stderr:\n    register_and_append(self.stderr,select_POLLIN_POLLPRI)\n    stderr=self._fd2output[self.stderr.fileno()]\n    \n   self._save_input(input)\n   \n   while self._fd2file:\n    timeout=self._remaining_time(endtime)\n    if timeout is not None and timeout <0:\n     raise TimeoutExpired(self.args,orig_timeout)\n    try :\n     ready=poller.poll(timeout)\n    except select.error as e:\n     if e.args[0]==errno.EINTR:\n      continue\n     raise\n    self._check_timeout(endtime,orig_timeout)\n    \n    \n    \n    \n    for fd,mode in ready:\n     if mode&select.POLLOUT:\n      chunk=self._input[self._input_offset:\n      self._input_offset+_PIPE_BUF]\n      try :\n       self._input_offset +=os.write(fd,chunk)\n      except OSError as e:\n       if e.errno ==errno.EPIPE:\n        close_unregister_and_remove(fd)\n       else :\n        raise\n      else :\n       if self._input_offset >=len(self._input):\n        close_unregister_and_remove(fd)\n     elif mode&select_POLLIN_POLLPRI:\n      data=os.read(fd,4096)\n      if not data:\n       close_unregister_and_remove(fd)\n      self._fd2output[fd].append(data)\n     else :\n     \n      close_unregister_and_remove(fd)\n      \n   return (stdout,stderr)\n   \n   \n  def _communicate_with_select(self,input,endtime,orig_timeout):\n   if not self._communication_started:\n    self._read_set=[]\n    self._write_set=[]\n    if self.stdin and input:\n     self._write_set.append(self.stdin)\n    if self.stdout:\n     self._read_set.append(self.stdout)\n    if self.stderr:\n     self._read_set.append(self.stderr)\n     \n   self._save_input(input)\n   \n   stdout=None\n   stderr=None\n   \n   if self.stdout:\n    if not self._communication_started:\n     self._stdout_buff=[]\n    stdout=self._stdout_buff\n   if self.stderr:\n    if not self._communication_started:\n     self._stderr_buff=[]\n    stderr=self._stderr_buff\n    \n   while self._read_set or self._write_set:\n    timeout=self._remaining_time(endtime)\n    if timeout is not None and timeout <0:\n     raise TimeoutExpired(self.args,orig_timeout)\n    try :\n     (rlist,wlist,xlist)=     select.select(self._read_set,self._write_set,[],\n     timeout)\n    except select.error as e:\n     if e.args[0]==errno.EINTR:\n      continue\n     raise\n     \n     \n     \n    if not (rlist or wlist or xlist):\n     raise TimeoutExpired(self.args,orig_timeout)\n     \n    self._check_timeout(endtime,orig_timeout)\n    \n    \n    \n    \n    if self.stdin in wlist:\n     chunk=self._input[self._input_offset:\n     self._input_offset+_PIPE_BUF]\n     try :\n      bytes_written=os.write(self.stdin.fileno(),chunk)\n     except OSError as e:\n      if e.errno ==errno.EPIPE:\n       self.stdin.close()\n       self._write_set.remove(self.stdin)\n      else :\n       raise\n     else :\n      self._input_offset +=bytes_written\n      if self._input_offset >=len(self._input):\n       self.stdin.close()\n       self._write_set.remove(self.stdin)\n       \n    if self.stdout in rlist:\n     data=os.read(self.stdout.fileno(),1024)\n     if not data:\n      self.stdout.close()\n      self._read_set.remove(self.stdout)\n     stdout.append(data)\n     \n    if self.stderr in rlist:\n     data=os.read(self.stderr.fileno(),1024)\n     if not data:\n      self.stderr.close()\n      self._read_set.remove(self.stderr)\n     stderr.append(data)\n     \n   return (stdout,stderr)\n   \n   \n  def send_signal(self,sig):\n   ''\n   \n   os.kill(self.pid,sig)\n   \n  def terminate(self):\n   ''\n   \n   self.send_signal(signal.SIGTERM)\n   \n  def kill(self):\n   ''\n   \n   self.send_signal(signal.SIGKILL)\n"], "socket": [".py", "\n\n\n\"\"\"\\\nThis module provides socket operations and some related functions.\nOn Unix, it supports IP (Internet Protocol) and Unix domain sockets.\nOn other systems, it only supports IP. Functions specific for a\nsocket are available as methods of the socket object.\n\nFunctions:\n\nsocket() -- create a new socket object\nsocketpair() -- create a pair of new socket objects [*]\nfromfd() -- create a socket object from an open file descriptor [*]\nfromshare() -- create a socket object from data received from socket.share() [*]\ngethostname() -- return the current hostname\ngethostbyname() -- map a hostname to its IP number\ngethostbyaddr() -- map an IP number or hostname to DNS info\ngetservbyname() -- map a service name and a protocol name to a port number\ngetprotobyname() -- map a protocol name (e.g. 'tcp') to a number\nntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order\nhtons(), htonl() -- convert 16, 32 bit int from host to network byte order\ninet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format\ninet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)\nsocket.getdefaulttimeout() -- get the default timeout value\nsocket.setdefaulttimeout() -- set the default timeout value\ncreate_connection() -- connects to an address, with an optional timeout and\n                       optional source address.\n\n [*] not available on all platforms!\n\nSpecial objects:\n\nSocketType -- type object for socket objects\nerror -- exception raised for I/O errors\nhas_ipv6 -- boolean value indicating if IPv6 is supported\n\nInteger constants:\n\nAF_INET, AF_UNIX -- socket domains (first argument to socket() call)\nSOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)\n\nMany other constants may be defined; these may be used in calls to\nthe setsockopt() and getsockopt() methods.\n\"\"\"\n\nimport _socket\nfrom _socket import *\n\nimport os,sys,io\n\ntry :\n import errno\nexcept ImportError:\n errno=None\nEBADF=getattr(errno,'EBADF',9)\nEAGAIN=getattr(errno,'EAGAIN',11)\nEWOULDBLOCK=getattr(errno,'EWOULDBLOCK',11)\n\n__all__=[\"getfqdn\",\"create_connection\"]\n__all__.extend(os._get_exports_list(_socket))\n\n\n_realsocket=socket\n\n\nif sys.platform.lower().startswith(\"win\"):\n errorTab={}\n errorTab[10004]=\"The operation was interrupted.\"\n errorTab[10009]=\"A bad file handle was passed.\"\n errorTab[10013]=\"Permission denied.\"\n errorTab[10014]=\"A fault occurred on the network??\"\n errorTab[10022]=\"An invalid operation was attempted.\"\n errorTab[10035]=\"The socket operation would block\"\n errorTab[10036]=\"A blocking operation is already in progress.\"\n errorTab[10048]=\"The network address is in use.\"\n errorTab[10054]=\"The connection has been reset.\"\n errorTab[10058]=\"The network has been shut down.\"\n errorTab[10060]=\"The operation timed out.\"\n errorTab[10061]=\"Connection refused.\"\n errorTab[10063]=\"The name is too long.\"\n errorTab[10064]=\"The host is down.\"\n errorTab[10065]=\"The host is unreachable.\"\n __all__.append(\"errorTab\")\n \n \nclass socket(_socket.socket):\n\n ''\n \n __slots__=[\"__weakref__\",\"_io_refs\",\"_closed\"]\n \n def __init__(self,family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None ):\n  _socket.socket.__init__(self,family,type,proto,fileno)\n  self._io_refs=0\n  self._closed=False\n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,*args):\n  if not self._closed:\n   self.close()\n   \n def __repr__(self):\n  ''\n  s=_socket.socket.__repr__(self)\n  if s.startswith(\"<socket object\"):\n   s=\"<%s.%s%s%s\"%(self.__class__.__module__,\n   self.__class__.__name__,\n   getattr(self,'_closed',False )and\" [closed] \"or\"\",\n   s[7:])\n  return s\n  \n def __getstate__(self):\n  raise TypeError(\"Cannot serialize socket object\")\n  \n def dup(self):\n  ''\n\n\n  \n  fd=dup(self.fileno())\n  sock=self.__class__(self.family,self.type,self.proto,fileno=fd)\n  sock.settimeout(self.gettimeout())\n  return sock\n  \n def accept(self):\n  ''\n\n\n\n\n  \n  fd,addr=self._accept()\n  sock=socket(self.family,self.type,self.proto,fileno=fd)\n  \n  \n  \n  if getdefaulttimeout()is None and self.gettimeout():\n   sock.setblocking(True )\n  return sock,addr\n  \n def makefile(self,mode=\"r\",buffering=None ,*,\n encoding=None ,errors=None ,newline=None ):\n  ''\n\n\n\n\n  \n  for c in mode:\n   if c not in {\"r\",\"w\",\"b\"}:\n    raise ValueError(\"invalid mode %r (only r, w, b allowed)\")\n  writing=\"w\"in mode\n  reading=\"r\"in mode or not writing\n  assert reading or writing\n  binary=\"b\"in mode\n  rawmode=\"\"\n  if reading:\n   rawmode +=\"r\"\n  if writing:\n   rawmode +=\"w\"\n  raw=SocketIO(self,rawmode)\n  self._io_refs +=1\n  if buffering is None :\n   buffering=-1\n  if buffering <0:\n   buffering=io.DEFAULT_BUFFER_SIZE\n  if buffering ==0:\n   if not binary:\n    raise ValueError(\"unbuffered streams must be binary\")\n   return raw\n  if reading and writing:\n   buffer=io.BufferedRWPair(raw,raw,buffering)\n  elif reading:\n   buffer=io.BufferedReader(raw,buffering)\n  else :\n   assert writing\n   buffer=io.BufferedWriter(raw,buffering)\n  if binary:\n   return buffer\n  text=io.TextIOWrapper(buffer,encoding,errors,newline)\n  text.mode=mode\n  return text\n  \n def _decref_socketios(self):\n  if self._io_refs >0:\n   self._io_refs -=1\n  if self._closed:\n   self.close()\n   \n def _real_close(self,_ss=_socket.socket):\n \n  _ss.close(self)\n  \n def close(self):\n \n  self._closed=True\n  if self._io_refs <=0:\n   self._real_close()\n   \n def detach(self):\n  ''\n\n\n\n\n  \n  self._closed=True\n  return super().detach()\n  \ndef fromfd(fd,family,type,proto=0):\n ''\n\n\n\n \n nfd=dup(fd)\n return socket(family,type,proto,nfd)\n \nif hasattr(_socket.socket,\"share\"):\n def fromshare(info):\n  ''\n\n\n\n  \n  return socket(0,0,0,info)\n  \nif hasattr(_socket,\"socketpair\"):\n\n def socketpair(family=None ,type=SOCK_STREAM,proto=0):\n  ''\n\n\n\n\n\n  \n  if family is None :\n   try :\n    family=AF_UNIX\n   except NameError:\n    family=AF_INET\n  a,b=_socket.socketpair(family,type,proto)\n  a=socket(family,type,proto,a.detach())\n  b=socket(family,type,proto,b.detach())\n  return a,b\n  \n  \n_blocking_errnos={EAGAIN,EWOULDBLOCK}\n\nclass SocketIO(io.RawIOBase):\n\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n def __init__(self,sock,mode):\n  if mode not in (\"r\",\"w\",\"rw\",\"rb\",\"wb\",\"rwb\"):\n   raise ValueError(\"invalid mode: %r\"%mode)\n  io.RawIOBase.__init__(self)\n  self._sock=sock\n  if\"b\"not in mode:\n   mode +=\"b\"\n  self._mode=mode\n  self._reading=\"r\"in mode\n  self._writing=\"w\"in mode\n  self._timeout_occurred=False\n  \n def readinto(self,b):\n  ''\n\n\n\n\n\n  \n  self._checkClosed()\n  self._checkReadable()\n  if self._timeout_occurred:\n   raise IOError(\"cannot read from timed out object\")\n  while True :\n   try :\n    return self._sock.recv_into(b)\n   except timeout:\n    self._timeout_occurred=True\n    raise\n   except InterruptedError:\n    continue\n   except error as e:\n    if e.args[0]in _blocking_errnos:\n     return None\n    raise\n    \n def write(self,b):\n  ''\n\n\n\n  \n  self._checkClosed()\n  self._checkWritable()\n  try :\n   return self._sock.send(b)\n  except error as e:\n  \n   if e.args[0]in _blocking_errnos:\n    return None\n   raise\n   \n def readable(self):\n  ''\n  \n  if self.closed:\n   raise ValueError(\"I/O operation on closed socket.\")\n  return self._reading\n  \n def writable(self):\n  ''\n  \n  if self.closed:\n   raise ValueError(\"I/O operation on closed socket.\")\n  return self._writing\n  \n def seekable(self):\n  ''\n  \n  if self.closed:\n   raise ValueError(\"I/O operation on closed socket.\")\n  return super().seekable()\n  \n def fileno(self):\n  ''\n  \n  self._checkClosed()\n  return self._sock.fileno()\n  \n @property\n def name(self):\n  if not self.closed:\n   return self.fileno()\n  else :\n   return -1\n   \n @property\n def mode(self):\n  return self._mode\n  \n def close(self):\n  ''\n\n  \n  if self.closed:\n   return\n  io.RawIOBase.close(self)\n  self._sock._decref_socketios()\n  self._sock=None\n  \n  \ndef getfqdn(name=''):\n ''\n\n\n\n\n\n\n \n name=name.strip()\n if not name or name =='0.0.0.0':\n  name=gethostname()\n try :\n  hostname,aliases,ipaddrs=gethostbyaddr(name)\n except error:\n  pass\n else :\n  aliases.insert(0,hostname)\n  for name in aliases:\n   if'.'in name:\n    break\n  else :\n   name=hostname\n return name\n \n \n_GLOBAL_DEFAULT_TIMEOUT=object()\n\ndef create_connection(address,timeout=_GLOBAL_DEFAULT_TIMEOUT,\nsource_address=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n host,port=address\n err=None\n for res in getaddrinfo(host,port,0,SOCK_STREAM):\n  af,socktype,proto,canonname,sa=res\n  sock=None\n  try :\n   sock=socket(af,socktype,proto)\n   if timeout is not _GLOBAL_DEFAULT_TIMEOUT:\n    sock.settimeout(timeout)\n   if source_address:\n    sock.bind(source_address)\n   sock.connect(sa)\n   return sock\n   \n  except error as _:\n   err=_\n   if sock is not None :\n    sock.close()\n    \n if err is not None :\n  raise err\n else :\n  raise error(\"getaddrinfo returns an empty list\")\n"], "_sre": [".py", "\n''\n\n\n\n\n\n\n\nMAXREPEAT=2147483648\n\n\nimport operator,sys\nfrom sre_constants import ATCODES,OPCODES,CHCODES\nfrom sre_constants import SRE_INFO_PREFIX,SRE_INFO_LITERAL\nfrom sre_constants import SRE_FLAG_UNICODE,SRE_FLAG_LOCALE\n\n\nimport sys\n\n\n\nMAGIC=20031017\n\n\n\n\n\n\n\n\n\n\n\n\n\nCODESIZE=4\n\ncopyright=\"_sre.py 2.4c Copyright 2005 by Nik Haldimann\"\n\n\ndef getcodesize():\n return CODESIZE\n \ndef compile(pattern,flags,code,groups=0,groupindex={},indexgroup=[None ]):\n ''\n \n return SRE_Pattern(pattern,flags,code,groups,groupindex,indexgroup)\n \ndef getlower(char_ord,flags):\n if (char_ord <128)or (flags&SRE_FLAG_UNICODE) or (flags&SRE_FLAG_LOCALE and char_ord <256):\n \n  return ord(chr(char_ord).lower())\n else :\n  return char_ord\n  \n  \nclass SRE_Pattern:\n\n def __init__(self,pattern,flags,code,groups=0,groupindex={},indexgroup=[None ]):\n  self.pattern=pattern\n  self.flags=flags\n  self.groups=groups\n  self.groupindex=groupindex\n  self._indexgroup=indexgroup\n  self._code=code\n  \n def match(self,string,pos=0,endpos=sys.maxsize):\n  ''\n\n  \n  state=_State(string,pos,endpos,self.flags)\n  if state.match(self._code):\n   return SRE_Match(self,state)\n  return None\n  \n def search(self,string,pos=0,endpos=sys.maxsize):\n  ''\n\n\n  \n  state=_State(string,pos,endpos,self.flags)\n  if state.search(self._code):\n   return SRE_Match(self,state)\n  else :\n   return None\n   \n def findall(self,string,pos=0,endpos=sys.maxsize):\n  ''\n  matchlist=[]\n  state=_State(string,pos,endpos,self.flags)\n  while state.start <=state.end:\n   state.reset()\n   state.string_position=state.start\n   if not state.search(self._code):\n    break\n   match=SRE_Match(self,state)\n   if self.groups ==0 or self.groups ==1:\n    item=match.group(self.groups)\n   else :\n    item=match.groups(\"\")\n   matchlist.append(item)\n   if state.string_position ==state.start:\n    state.start +=1\n   else :\n    state.start=state.string_position\n  return matchlist\n  \n def _subx(self,template,string,count=0,subn=False ):\n  filter=template\n  if not callable(template)and\"\\\\\"in template:\n  \n  \n  \n  \n   import re as sre\n   filter=sre._subx(self,template)\n  state=_State(string,0,sys.maxsize,self.flags)\n  sublist=[]\n  \n  n=last_pos=0\n  while not count or n <count:\n   state.reset()\n   state.string_position=state.start\n   if not state.search(self._code):\n    break\n   if last_pos <state.start:\n    sublist.append(string[last_pos:state.start])\n   if not (last_pos ==state.start and\n   last_pos ==state.string_position and n >0):\n   \n    if callable(filter):\n     sublist.append(filter(SRE_Match(self,state)))\n    else :\n     sublist.append(filter)\n    last_pos=state.string_position\n    n +=1\n   if state.string_position ==state.start:\n    state.start +=1\n   else :\n    state.start=state.string_position\n    \n  if last_pos <state.end:\n   sublist.append(string[last_pos:state.end])\n  item=\"\".join(sublist)\n  if subn:\n   return item,n\n  else :\n   return item\n   \n def sub(self,repl,string,count=0):\n  ''\n  \n  return self._subx(repl,string,count,False )\n  \n def subn(self,repl,string,count=0):\n  ''\n\n  \n  return self._subx(repl,string,count,True )\n  \n def split(self,string,maxsplit=0):\n  ''\n  splitlist=[]\n  state=_State(string,0,sys.maxsize,self.flags)\n  n=0\n  last=state.start\n  while not maxsplit or n <maxsplit:\n   state.reset()\n   state.string_position=state.start\n   if not state.search(self._code):\n    break\n   if state.start ==state.string_position:\n    if last ==state.end:\n     break\n    state.start +=1\n    continue\n   splitlist.append(string[last:state.start])\n   \n   if self.groups:\n    match=SRE_Match(self,state)\n    splitlist.extend(list(match.groups(None )))\n   n +=1\n   last=state.start=state.string_position\n  splitlist.append(string[last:state.end])\n  return splitlist\n  \n def finditer(self,string,pos=0,endpos=sys.maxsize):\n  ''\n  \n  _list=[]\n  _m=self.scanner(string,pos,endpos)\n  _re=SRE_Scanner(self,string,pos,endpos)\n  _m=_re.search()\n  while _m:\n   _list.append(_m)\n   _m=_re.search()\n  return _list\n  \n  \n def scanner(self,string,start=0,end=sys.maxsize):\n  return SRE_Scanner(self,string,start,end)\n  \n def __copy__(self):\n  raise TypeError(\"cannot copy this pattern object\")\n  \n def __deepcopy__(self):\n  raise TypeError(\"cannot copy this pattern object\")\n  \nclass SRE_Scanner:\n ''\n \n def __init__(self,pattern,string,start,end):\n  self.pattern=pattern\n  self._state=_State(string,start,end,self.pattern.flags)\n  \n def _match_search(self,matcher):\n  state=self._state\n  state.reset()\n  state.string_position=state.start\n  match=None\n  if matcher(self.pattern._code):\n   match=SRE_Match(self.pattern,state)\n  if match is None or state.string_position ==state.start:\n   state.start +=1\n  else :\n   state.start=state.string_position\n  return match\n  \n def match(self):\n  return self._match_search(self._state.match)\n  \n def search(self):\n  return self._match_search(self._state.search)\n  \nclass SRE_Match:\n\n def __init__(self,pattern,state):\n  self.re=pattern\n  self.string=state.string\n  self.pos=state.pos\n  self.endpos=state.end\n  self.lastindex=state.lastindex\n  if self.lastindex <0:\n   self.lastindex=None\n  self.regs=self._create_regs(state)\n  \n  \n  \n  if self.lastindex is not None and pattern._indexgroup and 0 <=self.lastindex <len(pattern._indexgroup):\n  \n  \n  \n  \n  \n   self.lastgroup=pattern._indexgroup[self.lastindex]\n  else :\n   self.lastgroup=None\n   \n def _create_regs(self,state):\n  ''\n  regs=[(state.start,state.string_position)]\n  for group in range(self.re.groups):\n   mark_index=2 *group\n   if mark_index+1 <len(state.marks)   and state.marks[mark_index]is not None   and state.marks[mark_index+1]is not None :\n    regs.append((state.marks[mark_index],state.marks[mark_index+1]))\n   else :\n    regs.append((-1,-1))\n  return tuple(regs)\n  \n def _get_index(self,group):\n  if isinstance(group,int):\n   if group >=0 and group <=self.re.groups:\n    return group\n  else :\n   if group in self.re.groupindex:\n    return self.re.groupindex[group]\n  raise IndexError(\"no such group\")\n  \n def _get_slice(self,group,default):\n  group_indices=self.regs[group]\n  if group_indices[0]>=0:\n   return self.string[group_indices[0]:group_indices[1]]\n  else :\n   return default\n   \n def start(self,group=0):\n  ''\n\n  \n  return self.regs[self._get_index(group)][0]\n  \n def end(self,group=0):\n  ''\n\n  \n  return self.regs[self._get_index(group)][1]\n  \n def span(self,group=0):\n  ''\n  return self.start(group),self.end(group)\n  \n def expand(self,template):\n  ''\n  \n  import sre\n  return sre._expand(self.re,self,template)\n  \n def groups(self,default=None ):\n  ''\n\n  \n  groups=[]\n  for indices in self.regs[1:]:\n   if indices[0]>=0:\n    groups.append(self.string[indices[0]:indices[1]])\n   else :\n    groups.append(default)\n  return tuple(groups)\n  \n def groupdict(self,default=None ):\n  ''\n\n  \n  groupdict={}\n  for key,value in self.re.groupindex.items():\n   groupdict[key]=self._get_slice(value,default)\n  return groupdict\n  \n def group(self,*args):\n  ''\n  \n  if len(args)==0:\n   args=(0,)\n  grouplist=[]\n  for group in args:\n   grouplist.append(self._get_slice(self._get_index(group),None ))\n  if len(grouplist)==1:\n   return grouplist[0]\n  else :\n   return tuple(grouplist)\n   \n def __copy__():\n  raise TypeError(\"cannot copy this pattern object\")\n  \n def __deepcopy__():\n  raise TypeError(\"cannot copy this pattern object\")\n  \n  \nclass _State:\n\n def __init__(self,string,start,end,flags):\n  self.string=string\n  if start <0:\n   start=0\n  if end >len(string):\n   end=len(string)\n  self.start=start\n  self.string_position=self.start\n  self.end=end\n  self.pos=start\n  self.flags=flags\n  self.reset()\n  \n def reset(self):\n  self.marks=[]\n  self.lastindex=-1\n  self.marks_stack=[]\n  self.context_stack=[]\n  self.repeat=None\n  \n def match(self,pattern_codes):\n \n \n \n \n \n \n \n \n \n  dispatcher=_OpcodeDispatcher()\n  self.context_stack.append(_MatchContext(self,pattern_codes))\n  has_matched=None\n  while len(self.context_stack)>0:\n   context=self.context_stack[-1]\n   has_matched=dispatcher.match(context)\n   if has_matched is not None :\n    self.context_stack.pop()\n  return has_matched\n  \n def search(self,pattern_codes):\n  flags=0\n  if pattern_codes[0]==OPCODES[\"info\"]:\n  \n  \n   if pattern_codes[2]&SRE_INFO_PREFIX and pattern_codes[5]>1:\n    return self.fast_search(pattern_codes)\n   flags=pattern_codes[2]\n   pattern_codes=pattern_codes[pattern_codes[1]+1:]\n   \n  string_position=self.start\n  if pattern_codes[0]==OPCODES[\"literal\"]:\n  \n  \n   character=pattern_codes[1]\n   while True :\n    while string_position <self.end    and ord(self.string[string_position])!=character:\n     string_position +=1\n    if string_position >=self.end:\n     return False\n    self.start=string_position\n    string_position +=1\n    self.string_position=string_position\n    if flags&SRE_INFO_LITERAL:\n     return True\n    if self.match(pattern_codes[2:]):\n     return True\n   return False\n   \n   \n  while string_position <=self.end:\n   self.reset()\n   self.start=self.string_position=string_position\n   if self.match(pattern_codes):\n    return True\n   string_position +=1\n  return False\n  \n def fast_search(self,pattern_codes):\n  ''\n  \n  \n  \n  flags=pattern_codes[2]\n  prefix_len=pattern_codes[5]\n  prefix_skip=pattern_codes[6]\n  prefix=pattern_codes[7:7+prefix_len]\n  overlap=pattern_codes[7+prefix_len -1:pattern_codes[1]+1]\n  pattern_codes=pattern_codes[pattern_codes[1]+1:]\n  i=0\n  string_position=self.string_position\n  while string_position <self.end:\n   while True :\n    if ord(self.string[string_position])!=prefix[i]:\n     if i ==0:\n      break\n     else :\n      i=overlap[i]\n    else :\n     i +=1\n     if i ==prefix_len:\n     \n      self.start=string_position+1 -prefix_len\n      self.string_position=string_position+1      -prefix_len+prefix_skip\n      if flags&SRE_INFO_LITERAL:\n       return True\n      if self.match(pattern_codes[2 *prefix_skip:]):\n       return True\n      i=overlap[i]\n     break\n   string_position +=1\n  return False\n  \n def set_mark(self,mark_nr,position):\n  if mark_nr&1:\n  \n  \n  \n   self.lastindex=mark_nr //2+1\n  if mark_nr >=len(self.marks):\n   self.marks.extend([None ]*(mark_nr -len(self.marks)+1))\n  self.marks[mark_nr]=position\n  \n def get_marks(self,group_index):\n  marks_index=2 *group_index\n  if len(self.marks)>marks_index+1:\n   return self.marks[marks_index],self.marks[marks_index+1]\n  else :\n   return None ,None\n   \n def marks_push(self):\n  self.marks_stack.append((self.marks[:],self.lastindex))\n  \n def marks_pop(self):\n  self.marks,self.lastindex=self.marks_stack.pop()\n  \n def marks_pop_keep(self):\n  self.marks,self.lastindex=self.marks_stack[-1]\n  \n def marks_pop_discard(self):\n  self.marks_stack.pop()\n  \n def lower(self,char_ord):\n  return getlower(char_ord,self.flags)\n  \n  \nclass _MatchContext:\n\n def __init__(self,state,pattern_codes):\n  self.state=state\n  self.pattern_codes=pattern_codes\n  self.string_position=state.string_position\n  self.code_position=0\n  self.has_matched=None\n  \n def push_new_context(self,pattern_offset):\n  ''\n\n  \n  child_context=_MatchContext(self.state,\n  self.pattern_codes[self.code_position+pattern_offset:])\n  \n  \n  \n  \n  self.state.context_stack.append(child_context)\n  return child_context\n  \n def peek_char(self,peek=0):\n  return self.state.string[self.string_position+peek]\n  \n def skip_char(self,skip_count):\n  self.string_position +=skip_count\n  \n def remaining_chars(self):\n  return self.state.end -self.string_position\n  \n def peek_code(self,peek=0):\n  return self.pattern_codes[self.code_position+peek]\n  \n def skip_code(self,skip_count):\n  self.code_position +=skip_count\n  \n def remaining_codes(self):\n  return len(self.pattern_codes)-self.code_position\n  \n def at_beginning(self):\n  return self.string_position ==0\n  \n def at_end(self):\n  return self.string_position ==self.state.end\n  \n def at_linebreak(self):\n  return not self.at_end()and _is_linebreak(self.peek_char())\n  \n def at_boundary(self,word_checker):\n  if self.at_beginning()and self.at_end():\n   return False\n  that=not self.at_beginning()and word_checker(self.peek_char(-1))\n  this=not self.at_end()and word_checker(self.peek_char())\n  return this !=that\n  \n  \nclass _RepeatContext(_MatchContext):\n\n def __init__(self,context):\n  _MatchContext.__init__(self,context.state,\n  context.pattern_codes[context.code_position:])\n  self.count=-1\n  \n  self.previous=context.state.repeat\n  self.last_position=None\n  \n  \nclass _Dispatcher:\n\n DISPATCH_TABLE=None\n \n def dispatch(self,code,context):\n  method=self.DISPATCH_TABLE.get(code,self.__class__.unknown)\n  return method(self,context)\n  \n def unknown(self,code,ctx):\n  raise NotImplementedError()\n  \n def build_dispatch_table(cls,code_dict,method_prefix):\n  if cls.DISPATCH_TABLE is not None :\n   return\n  table={}\n  for key,value in code_dict.items():\n   if hasattr(cls,\"%s%s\"%(method_prefix,key)):\n    table[value]=getattr(cls,\"%s%s\"%(method_prefix,key))\n  cls.DISPATCH_TABLE=table\n  \n build_dispatch_table=classmethod(build_dispatch_table)\n \n \nclass _OpcodeDispatcher(_Dispatcher):\n\n def __init__(self):\n  self.executing_contexts={}\n  self.at_dispatcher=_AtcodeDispatcher()\n  self.ch_dispatcher=_ChcodeDispatcher()\n  self.set_dispatcher=_CharsetDispatcher()\n  \n def match(self,context):\n  ''\n\n  \n  while context.remaining_codes()>0 and context.has_matched is None :\n   opcode=context.peek_code()\n   if not self.dispatch(opcode,context):\n    return None\n  if context.has_matched is None :\n   context.has_matched=False\n  return context.has_matched\n  \n def dispatch(self,opcode,context):\n  ''\n  \n  \n  if id(context)in self.executing_contexts:\n   generator=self.executing_contexts[id(context)]\n   del self.executing_contexts[id(context)]\n   has_finished=next(generator)\n  else :\n   method=self.DISPATCH_TABLE.get(opcode,_OpcodeDispatcher.unknown)\n   has_finished=method(self,context)\n   if hasattr(has_finished,\"__next__\"):\n    generator=has_finished\n    has_finished=next(generator)\n  if not has_finished:\n   self.executing_contexts[id(context)]=generator\n  return has_finished\n  \n def op_success(self,ctx):\n \n \n  ctx.state.string_position=ctx.string_position\n  ctx.has_matched=True\n  return True\n  \n def op_failure(self,ctx):\n \n \n  ctx.has_matched=False\n  return True\n  \n def general_op_literal(self,ctx,compare,decorate=lambda x:x):\n \n  if ctx.at_end()or not compare(decorate(ord(ctx.peek_char())),\n  decorate(ctx.peek_code(1))):\n   ctx.has_matched=False\n  ctx.skip_code(2)\n  ctx.skip_char(1)\n  \n def op_literal(self,ctx):\n \n \n \n  self.general_op_literal(ctx,operator.eq)\n  return True\n  \n def op_not_literal(self,ctx):\n \n \n \n  self.general_op_literal(ctx,operator.ne)\n  return True\n  \n def op_literal_ignore(self,ctx):\n \n \n \n  self.general_op_literal(ctx,operator.eq,ctx.state.lower)\n  return True\n  \n def op_not_literal_ignore(self,ctx):\n \n \n \n  self.general_op_literal(ctx,operator.ne,ctx.state.lower)\n  return True\n  \n def op_at(self,ctx):\n \n \n \n  if not self.at_dispatcher.dispatch(ctx.peek_code(1),ctx):\n   ctx.has_matched=False\n   \n   return True\n  ctx.skip_code(2)\n  return True\n  \n def op_category(self,ctx):\n \n \n \n  if ctx.at_end()or not self.ch_dispatcher.dispatch(ctx.peek_code(1),ctx):\n   ctx.has_matched=False\n   \n   return True\n  ctx.skip_code(2)\n  ctx.skip_char(1)\n  return True\n  \n def op_any(self,ctx):\n \n \n \n  if ctx.at_end()or ctx.at_linebreak():\n   ctx.has_matched=False\n   \n   return True\n  ctx.skip_code(1)\n  ctx.skip_char(1)\n  return True\n  \n def op_any_all(self,ctx):\n \n \n \n  if ctx.at_end():\n   ctx.has_matched=False\n   \n   return True\n  ctx.skip_code(1)\n  ctx.skip_char(1)\n  return True\n  \n def general_op_in(self,ctx,decorate=lambda x:x):\n \n \n  if ctx.at_end():\n   ctx.has_matched=False\n   \n   return\n  skip=ctx.peek_code(1)\n  ctx.skip_code(2)\n  \n  \n  if not self.check_charset(ctx,decorate(ord(ctx.peek_char()))):\n  \n   ctx.has_matched=False\n   return\n  ctx.skip_code(skip -1)\n  ctx.skip_char(1)\n  \n  \n def op_in(self,ctx):\n \n \n \n  self.general_op_in(ctx)\n  return True\n  \n def op_in_ignore(self,ctx):\n \n \n \n  self.general_op_in(ctx,ctx.state.lower)\n  return True\n  \n def op_jump(self,ctx):\n \n \n \n  ctx.skip_code(ctx.peek_code(1)+1)\n  return True\n  \n  \n  \n op_info=op_jump\n \n def op_mark(self,ctx):\n \n \n \n  ctx.state.set_mark(ctx.peek_code(1),ctx.string_position)\n  ctx.skip_code(2)\n  return True\n  \n def op_branch(self,ctx):\n \n \n \n  ctx.state.marks_push()\n  ctx.skip_code(1)\n  current_branch_length=ctx.peek_code(0)\n  while current_branch_length:\n  \n  \n   if not (ctx.peek_code(1)==OPCODES[\"literal\"]and   (ctx.at_end()or ctx.peek_code(2)!=ord(ctx.peek_char()))):\n    ctx.state.string_position=ctx.string_position\n    child_context=ctx.push_new_context(1)\n    \n    yield False\n    if child_context.has_matched:\n     ctx.has_matched=True\n     yield True\n    ctx.state.marks_pop_keep()\n   ctx.skip_code(current_branch_length)\n   current_branch_length=ctx.peek_code(0)\n  ctx.state.marks_pop_discard()\n  ctx.has_matched=False\n  \n  yield True\n  \n def op_repeat_one(self,ctx):\n \n \n \n \n  mincount=ctx.peek_code(2)\n  maxcount=ctx.peek_code(3)\n  \n  \n  \n  if ctx.remaining_chars()<mincount:\n   ctx.has_matched=False\n   yield True\n  ctx.state.string_position=ctx.string_position\n  count=self.count_repetitions(ctx,maxcount)\n  ctx.skip_char(count)\n  if count <mincount:\n   ctx.has_matched=False\n   yield True\n  if ctx.peek_code(ctx.peek_code(1)+1)==OPCODES[\"success\"]:\n  \n   ctx.state.string_position=ctx.string_position\n   ctx.has_matched=True\n   yield True\n   \n  ctx.state.marks_push()\n  if ctx.peek_code(ctx.peek_code(1)+1)==OPCODES[\"literal\"]:\n  \n  \n   char=ctx.peek_code(ctx.peek_code(1)+2)\n   while True :\n    while count >=mincount and    (ctx.at_end()or ord(ctx.peek_char())!=char):\n     ctx.skip_char(-1)\n     count -=1\n    if count <mincount:\n     break\n    ctx.state.string_position=ctx.string_position\n    child_context=ctx.push_new_context(ctx.peek_code(1)+1)\n    \n    yield False\n    if child_context.has_matched:\n     ctx.has_matched=True\n     yield True\n    ctx.skip_char(-1)\n    count -=1\n    ctx.state.marks_pop_keep()\n    \n  else :\n  \n   while count >=mincount:\n    ctx.state.string_position=ctx.string_position\n    child_context=ctx.push_new_context(ctx.peek_code(1)+1)\n    yield False\n    if child_context.has_matched:\n     ctx.has_matched=True\n     yield True\n    ctx.skip_char(-1)\n    count -=1\n    ctx.state.marks_pop_keep()\n    \n  ctx.state.marks_pop_discard()\n  ctx.has_matched=False\n  \n  yield True\n  \n def op_min_repeat_one(self,ctx):\n \n \n  mincount=ctx.peek_code(2)\n  maxcount=ctx.peek_code(3)\n  \n  \n  if ctx.remaining_chars()<mincount:\n   ctx.has_matched=False\n   yield True\n  ctx.state.string_position=ctx.string_position\n  if mincount ==0:\n   count=0\n  else :\n   count=self.count_repetitions(ctx,mincount)\n   if count <mincount:\n    ctx.has_matched=False\n    \n    yield True\n   ctx.skip_char(count)\n  if ctx.peek_code(ctx.peek_code(1)+1)==OPCODES[\"success\"]:\n  \n   ctx.state.string_position=ctx.string_position\n   ctx.has_matched=True\n   yield True\n   \n  ctx.state.marks_push()\n  while maxcount ==MAXREPEAT or count <=maxcount:\n   ctx.state.string_position=ctx.string_position\n   child_context=ctx.push_new_context(ctx.peek_code(1)+1)\n   \n   yield False\n   if child_context.has_matched:\n    ctx.has_matched=True\n    yield True\n   ctx.state.string_position=ctx.string_position\n   if self.count_repetitions(ctx,1)==0:\n    break\n   ctx.skip_char(1)\n   count +=1\n   ctx.state.marks_pop_keep()\n   \n  ctx.state.marks_pop_discard()\n  ctx.has_matched=False\n  yield True\n  \n def op_repeat(self,ctx):\n \n \n \n \n \n \n \n \n \n  repeat=_RepeatContext(ctx)\n  ctx.state.repeat=repeat\n  ctx.state.string_position=ctx.string_position\n  child_context=ctx.push_new_context(ctx.peek_code(1)+1)\n  \n  \n  \n  \n  yield False\n  ctx.state.repeat=repeat.previous\n  ctx.has_matched=child_context.has_matched\n  yield True\n  \n def op_max_until(self,ctx):\n \n \n  repeat=ctx.state.repeat\n  \n  if repeat is None :\n  \n   raise RuntimeError(\"Internal re error: MAX_UNTIL without REPEAT.\")\n  mincount=repeat.peek_code(2)\n  maxcount=repeat.peek_code(3)\n  ctx.state.string_position=ctx.string_position\n  count=repeat.count+1\n  \n  \n  if count <mincount:\n  \n   repeat.count=count\n   child_context=repeat.push_new_context(4)\n   yield False\n   ctx.has_matched=child_context.has_matched\n   if not ctx.has_matched:\n    repeat.count=count -1\n    ctx.state.string_position=ctx.string_position\n   yield True\n   \n  if (count <maxcount or maxcount ==MAXREPEAT)  and ctx.state.string_position !=repeat.last_position:\n  \n   repeat.count=count\n   ctx.state.marks_push()\n   save_last_position=repeat.last_position\n   repeat.last_position=ctx.state.string_position\n   child_context=repeat.push_new_context(4)\n   yield False\n   repeat.last_position=save_last_position\n   if child_context.has_matched:\n    ctx.state.marks_pop_discard()\n    ctx.has_matched=True\n    yield True\n   ctx.state.marks_pop()\n   repeat.count=count -1\n   ctx.state.string_position=ctx.string_position\n   \n   \n  ctx.state.repeat=repeat.previous\n  child_context=ctx.push_new_context(1)\n  \n  yield False\n  ctx.has_matched=child_context.has_matched\n  if not ctx.has_matched:\n   ctx.state.repeat=repeat\n   ctx.state.string_position=ctx.string_position\n  yield True\n  \n def op_min_until(self,ctx):\n \n \n  repeat=ctx.state.repeat\n  if repeat is None :\n   raise RuntimeError(\"Internal re error: MIN_UNTIL without REPEAT.\")\n  mincount=repeat.peek_code(2)\n  maxcount=repeat.peek_code(3)\n  ctx.state.string_position=ctx.string_position\n  count=repeat.count+1\n  \n  \n  if count <mincount:\n  \n   repeat.count=count\n   child_context=repeat.push_new_context(4)\n   yield False\n   ctx.has_matched=child_context.has_matched\n   if not ctx.has_matched:\n    repeat.count=count -1\n    ctx.state.string_position=ctx.string_position\n   yield True\n   \n   \n  ctx.state.marks_push()\n  ctx.state.repeat=repeat.previous\n  child_context=ctx.push_new_context(1)\n  \n  yield False\n  if child_context.has_matched:\n   ctx.has_matched=True\n   yield True\n  ctx.state.repeat=repeat\n  ctx.state.string_position=ctx.string_position\n  ctx.state.marks_pop()\n  \n  \n  if count >=maxcount and maxcount !=MAXREPEAT:\n   ctx.has_matched=False\n   \n   yield True\n  repeat.count=count\n  child_context=repeat.push_new_context(4)\n  yield False\n  ctx.has_matched=child_context.has_matched\n  if not ctx.has_matched:\n   repeat.count=count -1\n   ctx.state.string_position=ctx.string_position\n  yield True\n  \n def general_op_groupref(self,ctx,decorate=lambda x:x):\n  group_start,group_end=ctx.state.get_marks(ctx.peek_code(1))\n  if group_start is None or group_end is None or group_end <group_start:\n   ctx.has_matched=False\n   return True\n  while group_start <group_end:\n   if ctx.at_end()or decorate(ord(ctx.peek_char()))   !=decorate(ord(ctx.state.string[group_start])):\n    ctx.has_matched=False\n    \n    return True\n   group_start +=1\n   ctx.skip_char(1)\n  ctx.skip_code(2)\n  return True\n  \n def op_groupref(self,ctx):\n \n \n \n  return self.general_op_groupref(ctx)\n  \n def op_groupref_ignore(self,ctx):\n \n \n \n  return self.general_op_groupref(ctx,ctx.state.lower)\n  \n def op_groupref_exists(self,ctx):\n \n \n  group_start,group_end=ctx.state.get_marks(ctx.peek_code(1))\n  if group_start is None or group_end is None or group_end <group_start:\n   ctx.skip_code(ctx.peek_code(2)+1)\n  else :\n   ctx.skip_code(3)\n  return True\n  \n def op_assert(self,ctx):\n \n \n \n  ctx.state.string_position=ctx.string_position -ctx.peek_code(2)\n  if ctx.state.string_position <0:\n   ctx.has_matched=False\n   yield True\n  child_context=ctx.push_new_context(3)\n  yield False\n  if child_context.has_matched:\n   ctx.skip_code(ctx.peek_code(1)+1)\n  else :\n   ctx.has_matched=False\n  yield True\n  \n def op_assert_not(self,ctx):\n \n \n \n  ctx.state.string_position=ctx.string_position -ctx.peek_code(2)\n  if ctx.state.string_position >=0:\n   child_context=ctx.push_new_context(3)\n   yield False\n   if child_context.has_matched:\n    ctx.has_matched=False\n    yield True\n  ctx.skip_code(ctx.peek_code(1)+1)\n  yield True\n  \n def unknown(self,ctx):\n \n  raise RuntimeError(\"Internal re error. Unknown opcode: %s\"%ctx.peek_code())\n  \n def check_charset(self,ctx,char):\n  ''\n  \n  self.set_dispatcher.reset(char)\n  save_position=ctx.code_position\n  result=None\n  while result is None :\n   result=self.set_dispatcher.dispatch(ctx.peek_code(),ctx)\n  ctx.code_position=save_position\n  \n  return result\n  \n def count_repetitions(self,ctx,maxcount):\n  ''\n\n  \n  count=0\n  real_maxcount=ctx.state.end -ctx.string_position\n  if maxcount <real_maxcount and maxcount !=MAXREPEAT:\n   real_maxcount=maxcount\n   \n   \n   \n  code_position=ctx.code_position\n  string_position=ctx.string_position\n  ctx.skip_code(4)\n  reset_position=ctx.code_position\n  while count <real_maxcount:\n  \n  \n   ctx.code_position=reset_position\n   self.dispatch(ctx.peek_code(),ctx)\n   \n   if ctx.has_matched is False :\n    break\n   count +=1\n  ctx.has_matched=None\n  ctx.code_position=code_position\n  ctx.string_position=string_position\n  return count\n  \n def _log(self,context,opname,*args):\n  arg_string=(\"%s \"*len(args))%args\n  _log(\"|%s|%s|%s %s\"%(context.pattern_codes,\n  context.string_position,opname,arg_string))\n  \n_OpcodeDispatcher.build_dispatch_table(OPCODES,\"op_\")\n\n\nclass _CharsetDispatcher(_Dispatcher):\n\n def __init__(self):\n  self.ch_dispatcher=_ChcodeDispatcher()\n  \n def reset(self,char):\n  self.char=char\n  self.ok=True\n  \n def set_failure(self,ctx):\n  return not self.ok\n def set_literal(self,ctx):\n \n  if ctx.peek_code(1)==self.char:\n   return self.ok\n  else :\n   ctx.skip_code(2)\n def set_category(self,ctx):\n \n  if self.ch_dispatcher.dispatch(ctx.peek_code(1),ctx):\n   return self.ok\n  else :\n   ctx.skip_code(2)\n def set_charset(self,ctx):\n \n  char_code=self.char\n  ctx.skip_code(1)\n  if CODESIZE ==2:\n   if char_code <256 and ctx.peek_code(char_code >>4)   &(1 <<(char_code&15)):\n    return self.ok\n   ctx.skip_code(16)\n  else :\n   if char_code <256 and ctx.peek_code(char_code >>5)   &(1 <<(char_code&31)):\n    return self.ok\n   ctx.skip_code(8)\n def set_range(self,ctx):\n \n  if ctx.peek_code(1)<=self.char <=ctx.peek_code(2):\n   return self.ok\n  ctx.skip_code(3)\n def set_negate(self,ctx):\n  self.ok=not self.ok\n  ctx.skip_code(1)\n  \n  \n def set_bigcharset(self,ctx):\n  raise NotImplementationError(\"_sre.py: set_bigcharset, array not implemented\")\n  \n  char_code=self.char\n  count=ctx.peek_code(1)\n  ctx.skip_code(2)\n  if char_code <65536:\n   block_index=char_code >>8\n   \n   a=array.array(\"B\")\n   a.fromstring(array.array(CODESIZE ==2 and\"H\"or\"I\",\n   [ctx.peek_code(block_index //CODESIZE)]).tostring())\n   block=a[block_index %CODESIZE]\n   ctx.skip_code(256 //CODESIZE)\n   block_value=ctx.peek_code(block *(32 //CODESIZE)\n   +((char_code&255)>>(CODESIZE ==2 and 4 or 5)))\n   if block_value&(1 <<(char_code&((8 *CODESIZE)-1))):\n    return self.ok\n  else :\n   ctx.skip_code(256 //CODESIZE)\n  ctx.skip_code(count *(32 //CODESIZE))\n  \n def unknown(self,ctx):\n  return False\n  \n_CharsetDispatcher.build_dispatch_table(OPCODES,\"set_\")\n\n\nclass _AtcodeDispatcher(_Dispatcher):\n\n def at_beginning(self,ctx):\n  return ctx.at_beginning()\n at_beginning_string=at_beginning\n def at_beginning_line(self,ctx):\n  return ctx.at_beginning()or _is_linebreak(ctx.peek_char(-1))\n def at_end(self,ctx):\n  return (ctx.remaining_chars()==1 and ctx.at_linebreak())or ctx.at_end()\n def at_end_line(self,ctx):\n  return ctx.at_linebreak()or ctx.at_end()\n def at_end_string(self,ctx):\n  return ctx.at_end()\n def at_boundary(self,ctx):\n  return ctx.at_boundary(_is_word)\n def at_non_boundary(self,ctx):\n  return not ctx.at_boundary(_is_word)\n def at_loc_boundary(self,ctx):\n  return ctx.at_boundary(_is_loc_word)\n def at_loc_non_boundary(self,ctx):\n  return not ctx.at_boundary(_is_loc_word)\n def at_uni_boundary(self,ctx):\n  return ctx.at_boundary(_is_uni_word)\n def at_uni_non_boundary(self,ctx):\n  return not ctx.at_boundary(_is_uni_word)\n def unknown(self,ctx):\n  return False\n  \n_AtcodeDispatcher.build_dispatch_table(ATCODES,\"\")\n\n\nclass _ChcodeDispatcher(_Dispatcher):\n\n def category_digit(self,ctx):\n  return _is_digit(ctx.peek_char())\n def category_not_digit(self,ctx):\n  return not _is_digit(ctx.peek_char())\n def category_space(self,ctx):\n  return _is_space(ctx.peek_char())\n def category_not_space(self,ctx):\n  return not _is_space(ctx.peek_char())\n def category_word(self,ctx):\n  return _is_word(ctx.peek_char())\n def category_not_word(self,ctx):\n  return not _is_word(ctx.peek_char())\n def category_linebreak(self,ctx):\n  return _is_linebreak(ctx.peek_char())\n def category_not_linebreak(self,ctx):\n  return not _is_linebreak(ctx.peek_char())\n def category_loc_word(self,ctx):\n  return _is_loc_word(ctx.peek_char())\n def category_loc_not_word(self,ctx):\n  return not _is_loc_word(ctx.peek_char())\n def category_uni_digit(self,ctx):\n  return ctx.peek_char().isdigit()\n def category_uni_not_digit(self,ctx):\n  return not ctx.peek_char().isdigit()\n def category_uni_space(self,ctx):\n  return ctx.peek_char().isspace()\n def category_uni_not_space(self,ctx):\n  return not ctx.peek_char().isspace()\n def category_uni_word(self,ctx):\n  return _is_uni_word(ctx.peek_char())\n def category_uni_not_word(self,ctx):\n  return not _is_uni_word(ctx.peek_char())\n def category_uni_linebreak(self,ctx):\n  return ord(ctx.peek_char())in _uni_linebreaks\n def category_uni_not_linebreak(self,ctx):\n  return ord(ctx.peek_char())not in _uni_linebreaks\n def unknown(self,ctx):\n  return False\n  \n_ChcodeDispatcher.build_dispatch_table(CHCODES,\"\")\n\n\n_ascii_char_info=[0,0,0,0,0,0,0,0,0,2,6,2,\n2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,25,25,25,25,25,25,25,25,\n25,25,0,0,0,0,0,0,0,24,24,24,24,24,24,24,24,24,24,\n24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,0,0,\n0,0,16,0,24,24,24,24,24,24,24,24,24,24,24,24,24,24,\n24,24,24,24,24,24,24,24,24,24,24,24,0,0,0,0,0]\n\ndef _is_digit(char):\n code=ord(char)\n return code <128 and _ascii_char_info[code]&1\n \ndef _is_space(char):\n code=ord(char)\n return code <128 and _ascii_char_info[code]&2\n \ndef _is_word(char):\n\n code=ord(char)\n return code <128 and _ascii_char_info[code]&16\n \ndef _is_loc_word(char):\n return (not (ord(char)&~255)and char.isalnum())or char =='_'\n \ndef _is_uni_word(char):\n\n\n return chr(ord(char)).isalnum()or char =='_'\n \ndef _is_linebreak(char):\n return char ==\"\\n\"\n \n \n_uni_linebreaks=[10,13,28,29,30,133,8232,8233]\n\ndef _log(message):\n if 0:\n  print(message)\n"], "itertools": [".py", "import operator\n\nclass accumulate:\n def __init__(self,iterable,func=operator.add):\n  self.it=iter(iterable)\n  self._total=None\n  self.func=func\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  if not self._total:\n   self._total=next(self.it)\n   return self._total\n  else :\n   element=next(self.it)\n   try :\n    self._total=self.func(self._total,element)\n   except :\n    raise TypeError(\"unsupported operand type\")\n   return self._total\n   \n   \n   \nclass chain:\n def __init__(self,*iterables):\n  self._iterables_iter=iter(map(iter,iterables))\n  \n  self._cur_iterable_iter=iter([])\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  while True :\n   try :\n    return next(self._cur_iterable_iter)\n   except StopIteration:\n    self._cur_iterable_iter=next(self._iterables_iter)\n    \n @classmethod\n def from_iterable(cls,iterable):\n  for it in iterable:\n   for element in it:\n    yield element\n    \nclass combinations:\n def __init__(self,iterable,r):\n  self.pool=tuple(iterable)\n  self.n=len(self.pool)\n  self.r=r\n  self.indices=list(range(self.r))\n  self.zero=False\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  if self.r >self.n:\n   raise StopIteration\n  if not self.zero:\n   self.zero=True\n   return tuple(self.pool[i]for i in self.indices)\n  else :\n   try :\n    for i in reversed(range(self.r)):\n     if self.indices[i]!=i+self.n -self.r:\n      break\n    self.indices[i]+=1\n    for j in range(i+1,self.r):\n     self.indices[j]=self.indices[j -1]+1\n    return tuple(self.pool[i]for i in self.indices)\n   except :\n    raise StopIteration\n    \nclass combinations_with_replacement:\n def __init__(self,iterable,r):\n  self.pool=tuple(iterable)\n  self.n=len(self.pool)\n  self.r=r\n  self.indices=[0]*self.r\n  self.zero=False\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  if not self.n and self.r:\n   raise StopIteration\n  if not self.zero:\n   self.zero=True\n   return tuple(self.pool[i]for i in self.indices)\n  else :\n   try :\n    for i in reversed(range(self.r)):\n     if self.indices[i]!=self.n -1:\n      break\n    self.indices[i:]=[self.indices[i]+1]*(self.r -i)\n    return tuple(self.pool[i]for i in self.indices)\n   except :\n    raise StopIteration\n    \n    \n    \nclass compress:\n def __init__(self,data,selectors):\n  self.data=iter(data)\n  self.selectors=iter(selectors)\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  while True :\n   next_item=next(self.data)\n   next_selector=next(self.selectors)\n   if bool(next_selector):\n    return next_item\n    \n    \n    \n    \nclass count:\n ''\n\n\n\n \n def __init__(self,start=0,step=1):\n  if not isinstance(start,(int,float)):\n   raise TypeError('a number is required')\n  self.times=start -step\n  self.step=step\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  self.times +=self.step\n  return self.times\n  \n def __repr__(self):\n  return'count(%d)'%(self.times+self.step)\n  \n  \n  \nclass cycle:\n def __init__(self,iterable):\n  self._cur_iter=iter(iterable)\n  self._saved=[]\n  self._must_save=True\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  try :\n   next_elt=next(self._cur_iter)\n   if self._must_save:\n    self._saved.append(next_elt)\n  except StopIteration:\n   self._cur_iter=iter(self._saved)\n   next_elt=next(self._cur_iter)\n   self._must_save=False\n  return next_elt\n  \n  \n  \nclass dropwhile:\n def __init__(self,predicate,iterable):\n  self._predicate=predicate\n  self._iter=iter(iterable)\n  self._dropped=False\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  value=next(self._iter)\n  if self._dropped:\n   return value\n  while self._predicate(value):\n   value=next(self._iter)\n  self._dropped=True\n  return value\n  \n  \n  \nclass filterfalse:\n def __init__(self,predicate,iterable):\n \n  self._iter=iter(iterable)\n  if predicate is None :\n   self._predicate=bool\n  else :\n   self._predicate=predicate\n   \n def __iter__(self):\n  return self\n def __next__(self):\n  next_elt=next(self._iter)\n  while True :\n   if not self._predicate(next_elt):\n    return next_elt\n   next_elt=next(self._iter)\n   \nclass groupby:\n\n\n def __init__(self,iterable,key=None ):\n  if key is None :\n   key=lambda x:x\n  self.keyfunc=key\n  self.it=iter(iterable)\n  self.tgtkey=self.currkey=self.currvalue=object()\n def __iter__(self):\n  return self\n def __next__(self):\n  while self.currkey ==self.tgtkey:\n   self.currvalue=next(self.it)\n   self.currkey=self.keyfunc(self.currvalue)\n  self.tgtkey=self.currkey\n  return (self.currkey,self._grouper(self.tgtkey))\n def _grouper(self,tgtkey):\n  while self.currkey ==tgtkey:\n   yield self.currvalue\n   self.currvalue=next(self.it)\n   self.currkey=self.keyfunc(self.currvalue)\n   \n   \n   \nclass islice:\n def __init__(self,iterable,*args):\n  s=slice(*args)\n  self.start,self.stop,self.step=s.start or 0,s.stop,s.step\n  if not isinstance(self.start,int):\n   raise ValueError(\"Start argument must be an integer\")\n  if self.stop !=None and not isinstance(self.stop,int):\n   raise ValueError(\"Stop argument must be an integer or None\")\n  if self.step is None :\n   self.step=1\n  if self.start <0 or (self.stop !=None and self.stop <0\n  )or self.step <=0:\n   raise ValueError(\"indices for islice() must be positive\")\n  self.it=iter(iterable)\n  self.donext=None\n  self.cnt=0\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  nextindex=self.start\n  if self.stop !=None and nextindex >=self.stop:\n   raise StopIteration\n  while self.cnt <=nextindex:\n   nextitem=next(self.it)\n   self.cnt +=1\n  self.start +=self.step\n  return nextitem\n  \nclass permutations:\n def __init__(self,iterable,r=None ):\n  self.pool=tuple(iterable)\n  self.n=len(self.pool)\n  self.r=self.n if r is None else r\n  self.indices=list(range(self.n))\n  self.cycles=list(range(self.n,self.n -self.r,-1))\n  self.zero=False\n  self.stop=False\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  indices=self.indices\n  if self.r >self.n:\n   raise StopIteration\n  if not self.zero:\n   self.zero=True\n   return tuple(self.pool[i]for i in indices[:self.r])\n   \n  i=self.r -1\n  while i >=0:\n   j=self.cycles[i]-1\n   if j >0:\n    self.cycles[i]=j\n    indices[i],indices[-j]=indices[-j],indices[i]\n    return tuple(self.pool[i]for i in indices[:self.r])\n   self.cycles[i]=len(indices)-i\n   n1=len(indices)-1\n   assert n1 >=0\n   num=indices[i]\n   for k in range(i,n1):\n    indices[k]=indices[k+1]\n   indices[n1]=num\n   i -=1\n  raise StopIteration\n  \n  \ndef product(*args,repeat=1):\n\n\n pools=[tuple(pool)for pool in args]*repeat\n result=[[]]\n for pool in pools:\n  result=[x+[y]for x in result for y in pool]\n for prod in result:\n  yield tuple(prod)\n  \n  \n  \n  \n  \n  \n  \n  \nclass _product:\n def __init__(self,*args,**kw):\n  if len(kw)>1:\n   raise TypeError(\"product() takes at most 1 argument (%d given)\"%\n   len(kw))\n  self.repeat=kw.get('repeat',1)\n  if not isinstance(self.repeat,int):\n   raise TypeError(\"integer argument expected, got %s\"%\n   type(self.repeat))\n  self.gears=[x for x in args]*self.repeat\n  self.num_gears=len(self.gears)\n  \n  self.indicies=[(0,len(self.gears[x]))\n  for x in range(0,self.num_gears)]\n  self.cont=True\n  self.zero=False\n  \n def roll_gears(self):\n \n \n \n  should_carry=True\n  for n in range(0,self.num_gears):\n   nth_gear=self.num_gears -n -1\n   if should_carry:\n    count,lim=self.indicies[nth_gear]\n    count +=1\n    if count ==lim and nth_gear ==0:\n     self.cont=False\n    if count ==lim:\n     should_carry=True\n     count=0\n    else :\n     should_carry=False\n    self.indicies[nth_gear]=(count,lim)\n   else :\n    break\n    \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  if self.zero:\n   raise StopIteration\n  if self.repeat >0:\n   if not self.cont:\n    raise StopIteration\n   l=[]\n   for x in range(0,self.num_gears):\n    index,limit=self.indicies[x]\n    print('itertools 353',self.gears,x,index)\n    l.append(self.gears[x][index])\n   self.roll_gears()\n   return tuple(l)\n  elif self.repeat ==0:\n   self.zero=True\n   return ()\n  else :\n   raise ValueError(\"repeat argument cannot be negative\")\n   \n   \n   \nclass repeat:\n def __init__(self,obj,times=None ):\n  self._obj=obj\n  if times is not None :\n   range(times)\n   if times <0:\n    times=0\n  self._times=times\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n \n  if self._times is not None :\n   if self._times <=0:\n    raise StopIteration()\n   self._times -=1\n  return self._obj\n  \n def __repr__(self):\n  if self._times is not None :\n   return'repeat(%r, %r)'%(self._obj,self._times)\n  else :\n   return'repeat(%r)'%(self._obj,)\n   \n def __len__(self):\n  if self._times ==-1 or self._times is None :\n   raise TypeError(\"len() of uniszed object\")\n  return self._times\n  \n  \n  \nclass starmap(object):\n def __init__(self,function,iterable):\n  self._func=function\n  self._iter=iter(iterable)\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  t=next(self._iter)\n  return self._func(*t)\n  \n  \n  \nclass takewhile(object):\n def __init__(self,predicate,iterable):\n  self._predicate=predicate\n  self._iter=iter(iterable)\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  value=next(self._iter)\n  if not self._predicate(value):\n   raise StopIteration()\n  return value\n  \n  \n  \nclass TeeData(object):\n def __init__(self,iterator):\n  self.data=[]\n  self._iter=iterator\n  \n def __getitem__(self,i):\n \n  while i >=len(self.data):\n   self.data.append(next(self._iter))\n  return self.data[i]\n  \n  \nclass TeeObject(object):\n def __init__(self,iterable=None ,tee_data=None ):\n  if tee_data:\n   self.tee_data=tee_data\n   self.pos=0\n   \n  elif isinstance(iterable,TeeObject):\n   self.tee_data=iterable.tee_data\n   self.pos=iterable.pos\n  else :\n   self.tee_data=TeeData(iter(iterable))\n   self.pos=0\n   \n def __next__(self):\n  data=self.tee_data[self.pos]\n  self.pos +=1\n  return data\n  \n def __iter__(self):\n  return self\n  \n  \ndef tee(iterable,n=2):\n if isinstance(iterable,TeeObject):\n  return tuple([iterable]+\n  [TeeObject(tee_data=iterable.tee_data)for i in range(n -1)])\n tee_data=TeeData(iter(iterable))\n return tuple([TeeObject(tee_data=tee_data)for i in range(n)])\n \nclass zip_longest:\n def __init__(self,*args,fillvalue=None ):\n  self.args=[iter(arg)for arg in args]\n  self.fillvalue=fillvalue\n  self.units=len(args)\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  temp=[]\n  nb=0\n  for i in range(self.units):\n   try :\n    temp.append(next(self.args[i]))\n    nb +=1\n   except StopIteration:\n    temp.append(self.fillvalue)\n  if nb ==0:\n   raise StopIteration\n  return tuple(temp)\n"], "encodings.cp1125": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1125',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0410,\n0x0081:0x0411,\n0x0082:0x0412,\n0x0083:0x0413,\n0x0084:0x0414,\n0x0085:0x0415,\n0x0086:0x0416,\n0x0087:0x0417,\n0x0088:0x0418,\n0x0089:0x0419,\n0x008a:0x041a,\n0x008b:0x041b,\n0x008c:0x041c,\n0x008d:0x041d,\n0x008e:0x041e,\n0x008f:0x041f,\n0x0090:0x0420,\n0x0091:0x0421,\n0x0092:0x0422,\n0x0093:0x0423,\n0x0094:0x0424,\n0x0095:0x0425,\n0x0096:0x0426,\n0x0097:0x0427,\n0x0098:0x0428,\n0x0099:0x0429,\n0x009a:0x042a,\n0x009b:0x042b,\n0x009c:0x042c,\n0x009d:0x042d,\n0x009e:0x042e,\n0x009f:0x042f,\n0x00a0:0x0430,\n0x00a1:0x0431,\n0x00a2:0x0432,\n0x00a3:0x0433,\n0x00a4:0x0434,\n0x00a5:0x0435,\n0x00a6:0x0436,\n0x00a7:0x0437,\n0x00a8:0x0438,\n0x00a9:0x0439,\n0x00aa:0x043a,\n0x00ab:0x043b,\n0x00ac:0x043c,\n0x00ad:0x043d,\n0x00ae:0x043e,\n0x00af:0x043f,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x0440,\n0x00e1:0x0441,\n0x00e2:0x0442,\n0x00e3:0x0443,\n0x00e4:0x0444,\n0x00e5:0x0445,\n0x00e6:0x0446,\n0x00e7:0x0447,\n0x00e8:0x0448,\n0x00e9:0x0449,\n0x00ea:0x044a,\n0x00eb:0x044b,\n0x00ec:0x044c,\n0x00ed:0x044d,\n0x00ee:0x044e,\n0x00ef:0x044f,\n0x00f0:0x0401,\n0x00f1:0x0451,\n0x00f2:0x0490,\n0x00f3:0x0491,\n0x00f4:0x0404,\n0x00f5:0x0454,\n0x00f6:0x0406,\n0x00f7:0x0456,\n0x00f8:0x0407,\n0x00f9:0x0457,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x2116,\n0x00fd:0x00a4,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n'\\u0401'\n'\\u0451'\n'\\u0490'\n'\\u0491'\n'\\u0404'\n'\\u0454'\n'\\u0406'\n'\\u0456'\n'\\u0407'\n'\\u0457'\n'\\xb7'\n'\\u221a'\n'\\u2116'\n'\\xa4'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00fd,\n0x00b7:0x00fa,\n0x0401:0x00f0,\n0x0404:0x00f4,\n0x0406:0x00f6,\n0x0407:0x00f8,\n0x0410:0x0080,\n0x0411:0x0081,\n0x0412:0x0082,\n0x0413:0x0083,\n0x0414:0x0084,\n0x0415:0x0085,\n0x0416:0x0086,\n0x0417:0x0087,\n0x0418:0x0088,\n0x0419:0x0089,\n0x041a:0x008a,\n0x041b:0x008b,\n0x041c:0x008c,\n0x041d:0x008d,\n0x041e:0x008e,\n0x041f:0x008f,\n0x0420:0x0090,\n0x0421:0x0091,\n0x0422:0x0092,\n0x0423:0x0093,\n0x0424:0x0094,\n0x0425:0x0095,\n0x0426:0x0096,\n0x0427:0x0097,\n0x0428:0x0098,\n0x0429:0x0099,\n0x042a:0x009a,\n0x042b:0x009b,\n0x042c:0x009c,\n0x042d:0x009d,\n0x042e:0x009e,\n0x042f:0x009f,\n0x0430:0x00a0,\n0x0431:0x00a1,\n0x0432:0x00a2,\n0x0433:0x00a3,\n0x0434:0x00a4,\n0x0435:0x00a5,\n0x0436:0x00a6,\n0x0437:0x00a7,\n0x0438:0x00a8,\n0x0439:0x00a9,\n0x043a:0x00aa,\n0x043b:0x00ab,\n0x043c:0x00ac,\n0x043d:0x00ad,\n0x043e:0x00ae,\n0x043f:0x00af,\n0x0440:0x00e0,\n0x0441:0x00e1,\n0x0442:0x00e2,\n0x0443:0x00e3,\n0x0444:0x00e4,\n0x0445:0x00e5,\n0x0446:0x00e6,\n0x0447:0x00e7,\n0x0448:0x00e8,\n0x0449:0x00e9,\n0x044a:0x00ea,\n0x044b:0x00eb,\n0x044c:0x00ec,\n0x044d:0x00ed,\n0x044e:0x00ee,\n0x044f:0x00ef,\n0x0451:0x00f1,\n0x0454:0x00f5,\n0x0456:0x00f7,\n0x0457:0x00f9,\n0x0490:0x00f2,\n0x0491:0x00f3,\n0x2116:0x00fc,\n0x221a:0x00fb,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "multiprocessing.process": [".py", "\n\n\n\n\n\n\n\n\n__all__=['Process','current_process','active_children']\n\n\n\n\n\nimport os\nimport sys\nimport signal\nimport itertools\nfrom _weakrefset import WeakSet\n\n\nfrom _multiprocessing import Process\n\n\n\n\ntry :\n ORIGINAL_DIR=os.path.abspath(os.getcwd())\nexcept OSError:\n ORIGINAL_DIR=None\n \n \n \n \n \ndef current_process():\n ''\n\n \n return _current_process\n \ndef active_children():\n ''\n\n \n _cleanup()\n return list(_current_process._children)\n \n \n \n \n \ndef _cleanup():\n\n for p in list(_current_process._children):\n  if p._popen.poll()is not None :\n   _current_process._children.discard(p)\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \nclass AuthenticationString(bytes):\n def __reduce__(self):\n  from .forking import Popen\n  if not Popen.thread_is_spawning():\n   raise TypeError(\n   'Pickling an AuthenticationString object is '\n   'disallowed for security reasons'\n   )\n  return AuthenticationString,(bytes(self),)\n  \n  \n  \n  \n  \nclass _MainProcess(Process):\n\n def __init__(self):\n  self._identity=()\n  self._daemonic=False\n  self._name='MainProcess'\n  self._parent_pid=None\n  self._popen=None\n  self._counter=itertools.count(1)\n  self._children=set()\n  self._authkey=AuthenticationString(os.urandom(32))\n  self._tempdir=None\n  \n_current_process=_MainProcess()\ndel _MainProcess\n\n\n\n\n\n_exitcode_to_name={}\n\nfor name,signum in list(signal.__dict__.items()):\n if name[:3]=='SIG'and'_'not in name:\n  _exitcode_to_name[-signum]=name\n  \n  \n_dangling=WeakSet()\n"], "urllib.error": [".py", "class HTTPError(Exception):pass"], "doctest": [".py", "\n\n\n\n\n\n\n\nr\"\"\"Module doctest -- a framework for running examples in docstrings.\n\nIn simplest use, end each module M to be tested with:\n\ndef _test():\n    import doctest\n    doctest.testmod()\n\nif __name__ == \"__main__\":\n    _test()\n\nThen running the module as a script will cause the examples in the\ndocstrings to get executed and verified:\n\npython M.py\n\nThis won't display anything unless an example fails, in which case the\nfailing example(s) and the cause(s) of the failure(s) are printed to stdout\n(why not stderr? because stderr is a lame hack <0.2 wink>), and the final\nline of output is \"Test failed.\".\n\nRun it with the -v switch instead:\n\npython M.py -v\n\nand a detailed report of all examples tried is printed to stdout, along\nwith assorted summaries at the end.\n\nYou can force verbose mode by passing \"verbose=True\" to testmod, or prohibit\nit by passing \"verbose=False\".  In either of those cases, sys.argv is not\nexamined by testmod.\n\nThere are a variety of other ways to run doctests, including integration\nwith the unittest framework, and support for running non-Python text\nfiles containing doctests.  There are also many ways to override parts\nof doctest's default behaviors.  See the Library Reference Manual for\ndetails.\n\"\"\"\n\n__docformat__='reStructuredText en'\n\n__all__=[\n\n'register_optionflag',\n'DONT_ACCEPT_TRUE_FOR_1',\n'DONT_ACCEPT_BLANKLINE',\n'NORMALIZE_WHITESPACE',\n'ELLIPSIS',\n'SKIP',\n'IGNORE_EXCEPTION_DETAIL',\n'COMPARISON_FLAGS',\n'REPORT_UDIFF',\n'REPORT_CDIFF',\n'REPORT_NDIFF',\n'REPORT_ONLY_FIRST_FAILURE',\n'REPORTING_FLAGS',\n'FAIL_FAST',\n\n\n'Example',\n'DocTest',\n\n'DocTestParser',\n\n'DocTestFinder',\n\n'DocTestRunner',\n'OutputChecker',\n'DocTestFailure',\n'UnexpectedException',\n'DebugRunner',\n\n'testmod',\n'testfile',\n'run_docstring_examples',\n\n'DocTestSuite',\n'DocFileSuite',\n'set_unittest_reportflags',\n\n'script_from_examples',\n'testsource',\n'debug_src',\n'debug',\n]\n\nimport __future__\nimport argparse\nimport difflib\nimport inspect\nimport linecache\nimport os\nimport pdb\nimport re\nimport sys\nimport traceback\nimport unittest\nfrom io import StringIO\nfrom collections import namedtuple\n\nTestResults=namedtuple('TestResults','failed attempted')\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nOPTIONFLAGS_BY_NAME={}\ndef register_optionflag(name):\n\n return OPTIONFLAGS_BY_NAME.setdefault(name,1 <<len(OPTIONFLAGS_BY_NAME))\n \nDONT_ACCEPT_TRUE_FOR_1=register_optionflag('DONT_ACCEPT_TRUE_FOR_1')\nDONT_ACCEPT_BLANKLINE=register_optionflag('DONT_ACCEPT_BLANKLINE')\nNORMALIZE_WHITESPACE=register_optionflag('NORMALIZE_WHITESPACE')\nELLIPSIS=register_optionflag('ELLIPSIS')\nSKIP=register_optionflag('SKIP')\nIGNORE_EXCEPTION_DETAIL=register_optionflag('IGNORE_EXCEPTION_DETAIL')\n\nCOMPARISON_FLAGS=(DONT_ACCEPT_TRUE_FOR_1 |\nDONT_ACCEPT_BLANKLINE |\nNORMALIZE_WHITESPACE |\nELLIPSIS |\nSKIP |\nIGNORE_EXCEPTION_DETAIL)\n\nREPORT_UDIFF=register_optionflag('REPORT_UDIFF')\nREPORT_CDIFF=register_optionflag('REPORT_CDIFF')\nREPORT_NDIFF=register_optionflag('REPORT_NDIFF')\nREPORT_ONLY_FIRST_FAILURE=register_optionflag('REPORT_ONLY_FIRST_FAILURE')\nFAIL_FAST=register_optionflag('FAIL_FAST')\n\nREPORTING_FLAGS=(REPORT_UDIFF |\nREPORT_CDIFF |\nREPORT_NDIFF |\nREPORT_ONLY_FIRST_FAILURE |\nFAIL_FAST)\n\n\nBLANKLINE_MARKER='<BLANKLINE>'\nELLIPSIS_MARKER='...'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndef _extract_future_flags(globs):\n ''\n\n\n \n flags=0\n for fname in __future__.all_feature_names:\n  feature=globs.get(fname,None )\n  if feature is getattr(__future__,fname):\n   flags |=feature.compiler_flag\n return flags\n \ndef _normalize_module(module,depth=2):\n ''\n\n\n\n\n\n\n\n \n if inspect.ismodule(module):\n  return module\n elif isinstance(module,str):\n  return __import__(module,globals(),locals(),[\"*\"])\n elif module is None :\n  return sys.modules[sys._getframe(depth).f_globals['__name__']]\n else :\n  raise TypeError(\"Expected a module, string, or None\")\n  \ndef _load_testfile(filename,package,module_relative,encoding):\n if module_relative:\n  package=_normalize_module(package,3)\n  filename=_module_relative_path(package,filename)\n  if getattr(package,'__loader__',None )is not None :\n   if hasattr(package.__loader__,'get_data'):\n    file_contents=package.__loader__.get_data(filename)\n    file_contents=file_contents.decode(encoding)\n    \n    \n    return file_contents.replace(os.linesep,'\\n'),filename\n with open(filename,encoding=encoding)as f:\n  return f.read(),filename\n  \ndef _indent(s,indent=4):\n ''\n\n\n \n \n return re.sub('(?m)^(?!$)',indent *' ',s)\n \ndef _exception_traceback(exc_info):\n ''\n\n\n \n \n excout=StringIO()\n exc_type,exc_val,exc_tb=exc_info\n traceback.print_exception(exc_type,exc_val,exc_tb,file=excout)\n return excout.getvalue()\n \n \nclass _SpoofOut(StringIO):\n def getvalue(self):\n  result=StringIO.getvalue(self)\n  \n  \n  \n  if result and not result.endswith(\"\\n\"):\n   result +=\"\\n\"\n  return result\n  \n def truncate(self,size=None ):\n  self.seek(size)\n  StringIO.truncate(self)\n  \n  \ndef _ellipsis_match(want,got):\n ''\n\n\n\n \n if ELLIPSIS_MARKER not in want:\n  return want ==got\n  \n  \n ws=want.split(ELLIPSIS_MARKER)\n assert len(ws)>=2\n \n \n startpos,endpos=0,len(got)\n w=ws[0]\n if w:\n  if got.startswith(w):\n   startpos=len(w)\n   del ws[0]\n  else :\n   return False\n w=ws[-1]\n if w:\n  if got.endswith(w):\n   endpos -=len(w)\n   del ws[-1]\n  else :\n   return False\n   \n if startpos >endpos:\n \n \n  return False\n  \n  \n  \n  \n for w in ws:\n \n \n \n  startpos=got.find(w,startpos,endpos)\n  if startpos <0:\n   return False\n  startpos +=len(w)\n  \n return True\n \ndef _comment_line(line):\n ''\n line=line.rstrip()\n if line:\n  return'# '+line\n else :\n  return'#'\n  \ndef _strip_exception_details(msg):\n\n\n\n\n\n\n\n\n\n\n start,end=0,len(msg)\n \n i=msg.find(\"\\n\")\n if i >=0:\n  end=i\n  \n i=msg.find(':',0,end)\n if i >=0:\n  end=i\n  \n i=msg.rfind('.',0,end)\n if i >=0:\n  start=i+1\n return msg[start:end]\n \nclass _OutputRedirectingPdb(pdb.Pdb):\n ''\n\n\n\n \n def __init__(self,out):\n  self.__out=out\n  self.__debugger_used=False\n  \n  pdb.Pdb.__init__(self,stdout=out,nosigint=True )\n  \n  self.use_rawinput=1\n  \n def set_trace(self,frame=None ):\n  self.__debugger_used=True\n  if frame is None :\n   frame=sys._getframe().f_back\n  pdb.Pdb.set_trace(self,frame)\n  \n def set_continue(self):\n \n \n  if self.__debugger_used:\n   pdb.Pdb.set_continue(self)\n   \n def trace_dispatch(self,*args):\n \n  save_stdout=sys.stdout\n  sys.stdout=self.__out\n  \n  try :\n   return pdb.Pdb.trace_dispatch(self,*args)\n  finally :\n   sys.stdout=save_stdout\n   \n   \ndef _module_relative_path(module,path):\n if not inspect.ismodule(module):\n  raise TypeError('Expected a module: %r'%module)\n if path.startswith('/'):\n  raise ValueError('Module-relative files may not have absolute paths')\n  \n  \n if hasattr(module,'__file__'):\n \n  basedir=os.path.split(module.__file__)[0]\n elif module.__name__ =='__main__':\n \n  if len(sys.argv)>0 and sys.argv[0]!='':\n   basedir=os.path.split(sys.argv[0])[0]\n  else :\n   basedir=os.curdir\n else :\n \n  raise ValueError(\"Can't resolve paths relative to the module \"+\n  module+\" (it has no __file__)\")\n  \n  \n return os.path.join(basedir,*(path.split('/')))\n \n \n \n \n \n \n \n \n \n \n \n \n \nclass Example:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,source,want,exc_msg=None ,lineno=0,indent=0,\n options=None ):\n \n  if not source.endswith('\\n'):\n   source +='\\n'\n  if want and not want.endswith('\\n'):\n   want +='\\n'\n  if exc_msg is not None and not exc_msg.endswith('\\n'):\n   exc_msg +='\\n'\n   \n  self.source=source\n  self.want=want\n  self.lineno=lineno\n  self.indent=indent\n  if options is None :options={}\n  self.options=options\n  self.exc_msg=exc_msg\n  \n def __eq__(self,other):\n  if type(self)is not type(other):\n   return NotImplemented\n   \n  return self.source ==other.source and  self.want ==other.want and  self.lineno ==other.lineno and  self.indent ==other.indent and  self.options ==other.options and  self.exc_msg ==other.exc_msg\n  \n def __hash__(self):\n  return hash((self.source,self.want,self.lineno,self.indent,\n  self.exc_msg))\n  \nclass DocTest:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,examples,globs,name,filename,lineno,docstring):\n  ''\n\n\n  \n  assert not isinstance(examples,str),  \"DocTest no longer accepts str; use DocTestParser instead\"\n  self.examples=examples\n  self.docstring=docstring\n  self.globs=globs.copy()\n  self.name=name\n  self.filename=filename\n  self.lineno=lineno\n  \n def __repr__(self):\n  if len(self.examples)==0:\n   examples='no examples'\n  elif len(self.examples)==1:\n   examples='1 example'\n  else :\n   examples='%d examples'%len(self.examples)\n  return ('<DocTest %s from %s:%s (%s)>'%\n  (self.name,self.filename,self.lineno,examples))\n  \n def __eq__(self,other):\n  if type(self)is not type(other):\n   return NotImplemented\n   \n  return self.examples ==other.examples and  self.docstring ==other.docstring and  self.globs ==other.globs and  self.name ==other.name and  self.filename ==other.filename and  self.lineno ==other.lineno\n  \n def __hash__(self):\n  return hash((self.docstring,self.name,self.filename,self.lineno))\n  \n  \n def __lt__(self,other):\n  if not isinstance(other,DocTest):\n   return NotImplemented\n  return ((self.name,self.filename,self.lineno,id(self))\n  <\n  (other.name,other.filename,other.lineno,id(other)))\n  \n  \n  \n  \n  \nclass DocTestParser:\n ''\n\n \n \n \n \n \n \n _EXAMPLE_RE=re.compile(r'''\n        # Source consists of a PS1 line followed by zero or more PS2 lines.\n        (?P<source>\n            (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line\n            (?:\\n           [ ]*  \\.\\.\\. .*)*)  # PS2 lines\n        \\n?\n        # Want consists of any non-blank lines that do not start with PS1.\n        (?P<want> (?:(?![ ]*$)    # Not a blank line\n                     (?![ ]*>>>)  # Not a line starting with PS1\n                     .+$\\n?       # But any other line\n                  )*)\n        ''',re.MULTILINE |re.VERBOSE)\n \n \n \n \n \n \n \n \n \n \n _EXCEPTION_RE=re.compile(r\"\"\"\n        # Grab the traceback header.  Different versions of Python have\n        # said different things on the first traceback line.\n        ^(?P<hdr> Traceback\\ \\(\n            (?: most\\ recent\\ call\\ last\n            |   innermost\\ last\n            ) \\) :\n        )\n        \\s* $                # toss trailing whitespace on the header.\n        (?P<stack> .*?)      # don't blink: absorb stuff until...\n        ^ (?P<msg> \\w+ .*)   #     a line *starts* with alphanum.\n        \"\"\",re.VERBOSE |re.MULTILINE |re.DOTALL)\n \n \n \n _IS_BLANK_OR_COMMENT=re.compile(r'^[ ]*(#.*)?$').match\n \n def parse(self,string,name='<string>'):\n  ''\n\n\n\n\n\n  \n  string=string.expandtabs()\n  \n  min_indent=self._min_indent(string)\n  if min_indent >0:\n   string='\\n'.join([l[min_indent:]for l in string.split('\\n')])\n   \n  output=[]\n  charno,lineno=0,0\n  \n  for m in self._EXAMPLE_RE.finditer(string):\n  \n   output.append(string[charno:m.start()])\n   \n   lineno +=string.count('\\n',charno,m.start())\n   \n   (source,options,want,exc_msg)=   self._parse_example(m,name,lineno)\n   \n   if not self._IS_BLANK_OR_COMMENT(source):\n    output.append(Example(source,want,exc_msg,\n    lineno=lineno,\n    indent=min_indent+len(m.group('indent')),\n    options=options))\n    \n   lineno +=string.count('\\n',m.start(),m.end())\n   \n   charno=m.end()\n   \n  output.append(string[charno:])\n  return output\n  \n def get_doctest(self,string,globs,name,filename,lineno):\n  ''\n\n\n\n\n\n\n  \n  return DocTest(self.get_examples(string,name),globs,\n  name,filename,lineno,string)\n  \n def get_examples(self,string,name='<string>'):\n  ''\n\n\n\n\n\n\n\n\n  \n  return [x for x in self.parse(string,name)\n  if isinstance(x,Example)]\n  \n def _parse_example(self,m,name,lineno):\n  ''\n\n\n\n\n\n\n\n\n  \n  \n  indent=len(m.group('indent'))\n  \n  \n  \n  source_lines=m.group('source').split('\\n')\n  self._check_prompt_blank(source_lines,indent,name,lineno)\n  self._check_prefix(source_lines[1:],' '*indent+'.',name,lineno)\n  source='\\n'.join([sl[indent+4:]for sl in source_lines])\n  \n  \n  \n  \n  want=m.group('want')\n  want_lines=want.split('\\n')\n  if len(want_lines)>1 and re.match(r' *$',want_lines[-1]):\n   del want_lines[-1]\n  self._check_prefix(want_lines,' '*indent,name,\n  lineno+len(source_lines))\n  want='\\n'.join([wl[indent:]for wl in want_lines])\n  \n  \n  m=self._EXCEPTION_RE.match(want)\n  if m:\n   exc_msg=m.group('msg')\n  else :\n   exc_msg=None\n   \n   \n  options=self._find_options(source,name,lineno)\n  \n  return source,options,want,exc_msg\n  \n  \n  \n  \n  \n  \n  \n  \n _OPTION_DIRECTIVE_RE=re.compile(r'#\\s*doctest:\\s*([^\\n\\'\"]*)$',\n re.MULTILINE)\n \n def _find_options(self,source,name,lineno):\n  ''\n\n\n\n\n\n  \n  options={}\n  \n  for m in self._OPTION_DIRECTIVE_RE.finditer(source):\n   option_strings=m.group(1).replace(',',' ').split()\n   for option in option_strings:\n    if (option[0]not in'+-'or\n    option[1:]not in OPTIONFLAGS_BY_NAME):\n     raise ValueError('line %r of the doctest for %s '\n     'has an invalid option: %r'%\n     (lineno+1,name,option))\n    flag=OPTIONFLAGS_BY_NAME[option[1:]]\n    options[flag]=(option[0]=='+')\n  if options and self._IS_BLANK_OR_COMMENT(source):\n   raise ValueError('line %r of the doctest for %s has an option '\n   'directive on a line with no example: %r'%\n   (lineno,name,source))\n  return options\n  \n  \n  \n _INDENT_RE=re.compile('^([ ]*)(?=\\S)',re.MULTILINE)\n \n def _min_indent(self,s):\n  ''\n  indents=[len(indent)for indent in self._INDENT_RE.findall(s)]\n  if len(indents)>0:\n   return min(indents)\n  else :\n   return 0\n   \n def _check_prompt_blank(self,lines,indent,name,lineno):\n  ''\n\n\n\n\n  \n  for i,line in enumerate(lines):\n   if len(line)>=indent+4 and line[indent+3]!=' ':\n    raise ValueError('line %r of the docstring for %s '\n    'lacks blank after %s: %r'%\n    (lineno+i+1,name,\n    line[indent:indent+3],line))\n    \n def _check_prefix(self,lines,prefix,name,lineno):\n  ''\n\n\n  \n  for i,line in enumerate(lines):\n   if line and not line.startswith(prefix):\n    raise ValueError('line %r of the docstring for %s has '\n    'inconsistent leading whitespace: %r'%\n    (lineno+i+1,name,line))\n    \n    \n    \n    \n    \n    \nclass DocTestFinder:\n ''\n\n\n\n\n\n \n \n def __init__(self,verbose=False ,parser=DocTestParser(),\n recurse=True ,exclude_empty=True ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self._parser=parser\n  self._verbose=verbose\n  self._recurse=recurse\n  self._exclude_empty=exclude_empty\n  \n def find(self,obj,name=None ,module=None ,globs=None ,extraglobs=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if name is None :\n   name=getattr(obj,'__name__',None )\n   if name is None :\n    raise ValueError(\"DocTestFinder.find: name must be given \"\n    \"when obj.__name__ doesn't exist: %r\"%\n    (type(obj),))\n    \n    \n    \n    \n  if module is False :\n   module=None\n  elif module is None :\n   module=inspect.getmodule(obj)\n   \n   \n   \n   \n  try :\n   file=inspect.getsourcefile(obj)\n  except TypeError:\n   source_lines=None\n  else :\n   if not file:\n   \n   \n    file=inspect.getfile(obj)\n    if not file[0]+file[-2:]=='<]>':file=None\n   if file is None :\n    source_lines=None\n   else :\n    if module is not None :\n    \n    \n    \n     source_lines=linecache.getlines(file,module.__dict__)\n    else :\n    \n    \n     source_lines=linecache.getlines(file)\n    if not source_lines:\n     source_lines=None\n     \n     \n  if globs is None :\n   if module is None :\n    globs={}\n   else :\n    globs=module.__dict__.copy()\n  else :\n   globs=globs.copy()\n  if extraglobs is not None :\n   globs.update(extraglobs)\n  if'__name__'not in globs:\n   globs['__name__']='__main__'\n   \n   \n  tests=[]\n  self._find(tests,obj,name,module,source_lines,globs,{})\n  \n  \n  \n  \n  tests.sort()\n  return tests\n  \n def _from_module(self,module,object):\n  ''\n\n\n  \n  if module is None :\n   return True\n  elif inspect.getmodule(object)is not None :\n   return module is inspect.getmodule(object)\n  elif inspect.isfunction(object):\n   return module.__dict__ is object.__globals__\n  elif inspect.ismethoddescriptor(object):\n   if hasattr(object,'__objclass__'):\n    obj_mod=object.__objclass__.__module__\n   elif hasattr(object,'__module__'):\n    obj_mod=object.__module__\n   else :\n    return True\n   return module.__name__ ==obj_mod\n  elif inspect.isclass(object):\n   return module.__name__ ==object.__module__\n  elif hasattr(object,'__module__'):\n   return module.__name__ ==object.__module__\n  elif isinstance(object,property):\n   return True\n  else :\n   raise ValueError(\"object must be a class or function\")\n   \n def _find(self,tests,obj,name,module,source_lines,globs,seen):\n  ''\n\n\n  \n  if self._verbose:\n   print('Finding tests in %s'%name)\n   \n   \n  if id(obj)in seen:\n   return\n  seen[id(obj)]=1\n  \n  \n  test=self._get_test(obj,name,module,globs,source_lines)\n  if test is not None :\n   tests.append(test)\n   \n   \n  if inspect.ismodule(obj)and self._recurse:\n   for valname,val in obj.__dict__.items():\n    valname='%s.%s'%(name,valname)\n    \n    if ((inspect.isroutine(val)or inspect.isclass(val))and\n    self._from_module(module,val)):\n     self._find(tests,val,valname,module,source_lines,\n     globs,seen)\n     \n     \n  if inspect.ismodule(obj)and self._recurse:\n   for valname,val in getattr(obj,'__test__',{}).items():\n    if not isinstance(valname,str):\n     raise ValueError(\"DocTestFinder.find: __test__ keys \"\n     \"must be strings: %r\"%\n     (type(valname),))\n    if not (inspect.isroutine(val)or inspect.isclass(val)or\n    inspect.ismodule(val)or isinstance(val,str)):\n     raise ValueError(\"DocTestFinder.find: __test__ values \"\n     \"must be strings, functions, methods, \"\n     \"classes, or modules: %r\"%\n     (type(val),))\n    valname='%s.__test__.%s'%(name,valname)\n    self._find(tests,val,valname,module,source_lines,\n    globs,seen)\n    \n    \n  if inspect.isclass(obj)and self._recurse:\n   for valname,val in obj.__dict__.items():\n   \n    if isinstance(val,staticmethod):\n     val=getattr(obj,valname)\n    if isinstance(val,classmethod):\n     val=getattr(obj,valname).__func__\n     \n     \n    if ((inspect.isroutine(val)or inspect.isclass(val)or\n    isinstance(val,property))and\n    self._from_module(module,val)):\n     valname='%s.%s'%(name,valname)\n     self._find(tests,val,valname,module,source_lines,\n     globs,seen)\n     \n def _get_test(self,obj,name,module,globs,source_lines):\n  ''\n\n\n  \n  \n  \n  if isinstance(obj,str):\n   docstring=obj\n  else :\n   try :\n    if obj.__doc__ is None :\n     docstring=''\n    else :\n     docstring=obj.__doc__\n     if not isinstance(docstring,str):\n      docstring=str(docstring)\n   except (TypeError,AttributeError):\n    docstring=''\n    \n    \n  lineno=self._find_lineno(obj,source_lines)\n  \n  \n  if self._exclude_empty and not docstring:\n   return None\n   \n   \n  if module is None :\n   filename=None\n  else :\n   filename=getattr(module,'__file__',module.__name__)\n   if filename[-4:]in (\".pyc\",\".pyo\"):\n    filename=filename[:-1]\n  return self._parser.get_doctest(docstring,globs,name,\n  filename,lineno)\n  \n def _find_lineno(self,obj,source_lines):\n  ''\n\n\n  \n  lineno=None\n  \n  \n  if inspect.ismodule(obj):\n   lineno=0\n   \n   \n   \n   \n  if inspect.isclass(obj):\n   if source_lines is None :\n    return None\n   pat=re.compile(r'^\\s*class\\s*%s\\b'%\n   getattr(obj,'__name__','-'))\n   for i,line in enumerate(source_lines):\n    if pat.match(line):\n     lineno=i\n     break\n     \n     \n  if inspect.ismethod(obj):obj=obj.__func__\n  if inspect.isfunction(obj):obj=obj.__code__\n  if inspect.istraceback(obj):obj=obj.tb_frame\n  if inspect.isframe(obj):obj=obj.f_code\n  if inspect.iscode(obj):\n   lineno=getattr(obj,'co_firstlineno',None )-1\n   \n   \n   \n   \n   \n   \n  if lineno is not None :\n   if source_lines is None :\n    return lineno+1\n   pat=re.compile('(^|.*:)\\s*\\w*(\"|\\')')\n   for lineno in range(lineno,len(source_lines)):\n    if pat.match(source_lines[lineno]):\n     return lineno\n     \n     \n  return None\n  \n  \n  \n  \n  \nclass DocTestRunner:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n DIVIDER=\"*\"*70\n \n def __init__(self,checker=None ,verbose=None ,optionflags=0):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self._checker=checker or OutputChecker()\n  if verbose is None :\n   verbose='-v'in sys.argv\n  self._verbose=verbose\n  self.optionflags=optionflags\n  self.original_optionflags=optionflags\n  \n  \n  self.tries=0\n  self.failures=0\n  self._name2ft={}\n  \n  \n  self._fakeout=_SpoofOut()\n  \n  \n  \n  \n  \n def report_start(self,out,test,example):\n  ''\n\n\n  \n  if self._verbose:\n   if example.want:\n    out('Trying:\\n'+_indent(example.source)+\n    'Expecting:\\n'+_indent(example.want))\n   else :\n    out('Trying:\\n'+_indent(example.source)+\n    'Expecting nothing\\n')\n    \n def report_success(self,out,test,example,got):\n  ''\n\n\n  \n  if self._verbose:\n   out(\"ok\\n\")\n   \n def report_failure(self,out,test,example,got):\n  ''\n\n  \n  out(self._failure_header(test,example)+\n  self._checker.output_difference(example,got,self.optionflags))\n  \n def report_unexpected_exception(self,out,test,example,exc_info):\n  ''\n\n  \n  out(self._failure_header(test,example)+\n  'Exception raised:\\n'+_indent(_exception_traceback(exc_info)))\n  \n def _failure_header(self,test,example):\n  out=[self.DIVIDER]\n  if test.filename:\n   if test.lineno is not None and example.lineno is not None :\n    lineno=test.lineno+example.lineno+1\n   else :\n    lineno='?'\n   out.append('File \"%s\", line %s, in %s'%\n   (test.filename,lineno,test.name))\n  else :\n   out.append('Line %s, in %s'%(example.lineno+1,test.name))\n  out.append('Failed example:')\n  source=example.source\n  out.append(_indent(source))\n  return'\\n'.join(out)\n  \n  \n  \n  \n  \n def __run(self,test,compileflags,out):\n  ''\n\n\n\n\n\n\n\n  \n  \n  failures=tries=0\n  \n  \n  \n  original_optionflags=self.optionflags\n  \n  SUCCESS,FAILURE,BOOM=range(3)\n  \n  check=self._checker.check_output\n  \n  \n  for examplenum,example in enumerate(test.examples):\n  \n  \n  \n   quiet=(self.optionflags&REPORT_ONLY_FIRST_FAILURE and\n   failures >0)\n   \n   \n   self.optionflags=original_optionflags\n   if example.options:\n    for (optionflag,val)in example.options.items():\n     if val:\n      self.optionflags |=optionflag\n     else :\n      self.optionflags &=~optionflag\n      \n      \n   if self.optionflags&SKIP:\n    continue\n    \n    \n   tries +=1\n   if not quiet:\n    self.report_start(out,test,example)\n    \n    \n    \n    \n   filename='<doctest %s[%d]>'%(test.name,examplenum)\n   \n   \n   \n   \n   try :\n   \n    exec(compile(example.source,filename,\"single\",\n    compileflags,1),test.globs)\n    self.debugger.set_continue()\n    exception=None\n   except KeyboardInterrupt:\n    raise\n   except :\n    exception=sys.exc_info()\n    self.debugger.set_continue()\n    \n   got=self._fakeout.getvalue()\n   self._fakeout.truncate(0)\n   outcome=FAILURE\n   \n   \n   \n   if exception is None :\n    if check(example.want,got,self.optionflags):\n     outcome=SUCCESS\n     \n     \n   else :\n    exc_msg=traceback.format_exception_only(*exception[:2])[-1]\n    if not quiet:\n     got +=_exception_traceback(exception)\n     \n     \n     \n    if example.exc_msg is None :\n     outcome=BOOM\n     \n     \n    elif check(example.exc_msg,exc_msg,self.optionflags):\n     outcome=SUCCESS\n     \n     \n    elif self.optionflags&IGNORE_EXCEPTION_DETAIL:\n     if check(_strip_exception_details(example.exc_msg),\n     _strip_exception_details(exc_msg),\n     self.optionflags):\n      outcome=SUCCESS\n      \n      \n   if outcome is SUCCESS:\n    if not quiet:\n     self.report_success(out,test,example,got)\n   elif outcome is FAILURE:\n    if not quiet:\n     self.report_failure(out,test,example,got)\n    failures +=1\n   elif outcome is BOOM:\n    if not quiet:\n     self.report_unexpected_exception(out,test,example,\n     exception)\n    failures +=1\n   else :\n    assert False ,(\"unknown outcome\",outcome)\n    \n   if failures and self.optionflags&FAIL_FAST:\n    break\n    \n    \n  self.optionflags=original_optionflags\n  \n  \n  self.__record_outcome(test,failures,tries)\n  return TestResults(failures,tries)\n  \n def __record_outcome(self,test,f,t):\n  ''\n\n\n  \n  f2,t2=self._name2ft.get(test.name,(0,0))\n  self._name2ft[test.name]=(f+f2,t+t2)\n  self.failures +=f\n  self.tries +=t\n  \n __LINECACHE_FILENAME_RE=re.compile(r'<doctest '\n r'(?P<name>.+)'\n r'\\[(?P<examplenum>\\d+)\\]>$')\n def __patched_linecache_getlines(self,filename,module_globals=None ):\n  m=self.__LINECACHE_FILENAME_RE.match(filename)\n  if m and m.group('name')==self.test.name:\n   example=self.test.examples[int(m.group('examplenum'))]\n   return example.source.splitlines(keepends=True )\n  else :\n   return self.save_linecache_getlines(filename,module_globals)\n   \n def run(self,test,compileflags=None ,out=None ,clear_globs=True ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self.test=test\n  \n  if compileflags is None :\n   compileflags=_extract_future_flags(test.globs)\n   \n  save_stdout=sys.stdout\n  if out is None :\n   encoding=save_stdout.encoding\n   if encoding is None or encoding.lower()=='utf-8':\n    out=save_stdout.write\n   else :\n   \n    def out(s):\n     s=str(s.encode(encoding,'backslashreplace'),encoding)\n     save_stdout.write(s)\n  sys.stdout=self._fakeout\n  \n  \n  \n  \n  \n  \n  save_trace=sys.gettrace()\n  save_set_trace=pdb.set_trace\n  self.debugger=_OutputRedirectingPdb(save_stdout)\n  self.debugger.reset()\n  pdb.set_trace=self.debugger.set_trace\n  \n  \n  \n  self.save_linecache_getlines=linecache.getlines\n  linecache.getlines=self.__patched_linecache_getlines\n  \n  \n  save_displayhook=sys.displayhook\n  sys.displayhook=sys.__displayhook__\n  \n  try :\n   return self.__run(test,compileflags,out)\n  finally :\n   sys.stdout=save_stdout\n   pdb.set_trace=save_set_trace\n   sys.settrace(save_trace)\n   linecache.getlines=self.save_linecache_getlines\n   sys.displayhook=save_displayhook\n   if clear_globs:\n    test.globs.clear()\n    import builtins\n    builtins._=None\n    \n    \n    \n    \n def summarize(self,verbose=None ):\n  ''\n\n\n\n\n\n\n\n\n  \n  if verbose is None :\n   verbose=self._verbose\n  notests=[]\n  passed=[]\n  failed=[]\n  totalt=totalf=0\n  for x in self._name2ft.items():\n   name,(f,t)=x\n   assert f <=t\n   totalt +=t\n   totalf +=f\n   if t ==0:\n    notests.append(name)\n   elif f ==0:\n    passed.append((name,t))\n   else :\n    failed.append(x)\n  if verbose:\n   if notests:\n    print(len(notests),\"items had no tests:\")\n    notests.sort()\n    for thing in notests:\n     print(\"   \",thing)\n   if passed:\n    print(len(passed),\"items passed all tests:\")\n    passed.sort()\n    for thing,count in passed:\n     print(\" %3d tests in %s\"%(count,thing))\n  if failed:\n   print(self.DIVIDER)\n   print(len(failed),\"items had failures:\")\n   failed.sort()\n   for thing,(f,t)in failed:\n    print(\" %3d of %3d in %s\"%(f,t,thing))\n  if verbose:\n   print(totalt,\"tests in\",len(self._name2ft),\"items.\")\n   print(totalt -totalf,\"passed and\",totalf,\"failed.\")\n  if totalf:\n   print(\"***Test Failed***\",totalf,\"failures.\")\n  elif verbose:\n   print(\"Test passed.\")\n  return TestResults(totalf,totalt)\n  \n  \n  \n  \n def merge(self,other):\n  d=self._name2ft\n  for name,(f,t)in other._name2ft.items():\n   if name in d:\n   \n   \n   \n   \n    f2,t2=d[name]\n    f=f+f2\n    t=t+t2\n   d[name]=f,t\n   \nclass OutputChecker:\n ''\n\n\n\n\n\n \n def _toAscii(self,s):\n  ''\n\n  \n  return str(s.encode('ASCII','backslashreplace'),\"ASCII\")\n  \n def check_output(self,want,got,optionflags):\n  ''\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  got=self._toAscii(got)\n  want=self._toAscii(want)\n  \n  \n  \n  if got ==want:\n   return True\n   \n   \n   \n  if not (optionflags&DONT_ACCEPT_TRUE_FOR_1):\n   if (got,want)==(\"True\\n\",\"1\\n\"):\n    return True\n   if (got,want)==(\"False\\n\",\"0\\n\"):\n    return True\n    \n    \n    \n  if not (optionflags&DONT_ACCEPT_BLANKLINE):\n  \n   want=re.sub('(?m)^%s\\s*?$'%re.escape(BLANKLINE_MARKER),\n   '',want)\n   \n   \n   got=re.sub('(?m)^\\s*?$','',got)\n   if got ==want:\n    return True\n    \n    \n    \n    \n  if optionflags&NORMALIZE_WHITESPACE:\n   got=' '.join(got.split())\n   want=' '.join(want.split())\n   if got ==want:\n    return True\n    \n    \n    \n  if optionflags&ELLIPSIS:\n   if _ellipsis_match(want,got):\n    return True\n    \n    \n  return False\n  \n  \n def _do_a_fancy_diff(self,want,got,optionflags):\n \n  if not optionflags&(REPORT_UDIFF |\n  REPORT_CDIFF |\n  REPORT_NDIFF):\n   return False\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n  if optionflags&REPORT_NDIFF:\n   return True\n   \n   \n  return want.count('\\n')>2 and got.count('\\n')>2\n  \n def output_difference(self,example,got,optionflags):\n  ''\n\n\n\n\n  \n  want=example.want\n  \n  \n  if not (optionflags&DONT_ACCEPT_BLANKLINE):\n   got=re.sub('(?m)^[ ]*(?=\\n)',BLANKLINE_MARKER,got)\n   \n   \n  if self._do_a_fancy_diff(want,got,optionflags):\n  \n   want_lines=want.splitlines(keepends=True )\n   got_lines=got.splitlines(keepends=True )\n   \n   if optionflags&REPORT_UDIFF:\n    diff=difflib.unified_diff(want_lines,got_lines,n=2)\n    diff=list(diff)[2:]\n    kind='unified diff with -expected +actual'\n   elif optionflags&REPORT_CDIFF:\n    diff=difflib.context_diff(want_lines,got_lines,n=2)\n    diff=list(diff)[2:]\n    kind='context diff with expected followed by actual'\n   elif optionflags&REPORT_NDIFF:\n    engine=difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)\n    diff=list(engine.compare(want_lines,got_lines))\n    kind='ndiff with -expected +actual'\n   else :\n    assert 0,'Bad diff option'\n    \n   diff=[line.rstrip()+'\\n'for line in diff]\n   return'Differences (%s):\\n'%kind+_indent(''.join(diff))\n   \n   \n   \n  if want and got:\n   return'Expected:\\n%sGot:\\n%s'%(_indent(want),_indent(got))\n  elif want:\n   return'Expected:\\n%sGot nothing\\n'%_indent(want)\n  elif got:\n   return'Expected nothing\\nGot:\\n%s'%_indent(got)\n  else :\n   return'Expected nothing\\nGot nothing\\n'\n   \nclass DocTestFailure(Exception):\n ''\n\n\n\n\n\n\n\n\n \n def __init__(self,test,example,got):\n  self.test=test\n  self.example=example\n  self.got=got\n  \n def __str__(self):\n  return str(self.test)\n  \nclass UnexpectedException(Exception):\n ''\n\n\n\n\n\n\n\n\n \n def __init__(self,test,example,exc_info):\n  self.test=test\n  self.example=example\n  self.exc_info=exc_info\n  \n def __str__(self):\n  return str(self.test)\n  \nclass DebugRunner(DocTestRunner):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def run(self,test,compileflags=None ,out=None ,clear_globs=True ):\n  r=DocTestRunner.run(self,test,compileflags,out,False )\n  if clear_globs:\n   test.globs.clear()\n  return r\n  \n def report_unexpected_exception(self,out,test,example,exc_info):\n  raise UnexpectedException(test,example,exc_info)\n  \n def report_failure(self,out,test,example,got):\n  raise DocTestFailure(test,example,got)\n  \n  \n  \n  \n  \n  \n  \n  \nmaster=None\n\ndef testmod(m=None ,name=None ,globs=None ,verbose=None ,\nreport=True ,optionflags=0,extraglobs=None ,\nraise_on_error=False ,exclude_empty=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global master\n \n \n if m is None :\n \n \n \n  m=sys.modules.get('__main__')\n  \n  \n if not inspect.ismodule(m):\n  raise TypeError(\"testmod: module required; %r\"%(m,))\n  \n  \n if name is None :\n  name=m.__name__\n  \n  \n finder=DocTestFinder(exclude_empty=exclude_empty)\n \n if raise_on_error:\n  runner=DebugRunner(verbose=verbose,optionflags=optionflags)\n else :\n  runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n  \n for test in finder.find(m,name,globs=globs,extraglobs=extraglobs):\n  runner.run(test)\n  \n if report:\n  runner.summarize()\n  \n if master is None :\n  master=runner\n else :\n  master.merge(runner)\n  \n return TestResults(runner.failures,runner.tries)\n \ndef testfile(filename,module_relative=True ,name=None ,package=None ,\nglobs=None ,verbose=None ,report=True ,optionflags=0,\nextraglobs=None ,raise_on_error=False ,parser=DocTestParser(),\nencoding=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global master\n \n if package and not module_relative:\n  raise ValueError(\"Package may only be specified for module-\"\n  \"relative paths.\")\n  \n  \n text,filename=_load_testfile(filename,package,module_relative,\n encoding or\"utf-8\")\n \n \n if name is None :\n  name=os.path.basename(filename)\n  \n  \n if globs is None :\n  globs={}\n else :\n  globs=globs.copy()\n if extraglobs is not None :\n  globs.update(extraglobs)\n if'__name__'not in globs:\n  globs['__name__']='__main__'\n  \n if raise_on_error:\n  runner=DebugRunner(verbose=verbose,optionflags=optionflags)\n else :\n  runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n  \n  \n test=parser.get_doctest(text,globs,name,filename,0)\n runner.run(test)\n \n if report:\n  runner.summarize()\n  \n if master is None :\n  master=runner\n else :\n  master.merge(runner)\n  \n return TestResults(runner.failures,runner.tries)\n \ndef run_docstring_examples(f,globs,verbose=False ,name=\"NoName\",\ncompileflags=None ,optionflags=0):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n finder=DocTestFinder(verbose=verbose,recurse=False )\n runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n for test in finder.find(f,name,globs=globs):\n  runner.run(test,compileflags=compileflags)\n  \n  \n  \n  \n  \n_unittest_reportflags=0\n\ndef set_unittest_reportflags(flags):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _unittest_reportflags\n \n if (flags&REPORTING_FLAGS)!=flags:\n  raise ValueError(\"Only reporting flags allowed\",flags)\n old=_unittest_reportflags\n _unittest_reportflags=flags\n return old\n \n \nclass DocTestCase(unittest.TestCase):\n\n def __init__(self,test,optionflags=0,setUp=None ,tearDown=None ,\n checker=None ):\n \n  unittest.TestCase.__init__(self)\n  self._dt_optionflags=optionflags\n  self._dt_checker=checker\n  self._dt_test=test\n  self._dt_setUp=setUp\n  self._dt_tearDown=tearDown\n  \n def setUp(self):\n  test=self._dt_test\n  \n  if self._dt_setUp is not None :\n   self._dt_setUp(test)\n   \n def tearDown(self):\n  test=self._dt_test\n  \n  if self._dt_tearDown is not None :\n   self._dt_tearDown(test)\n   \n  test.globs.clear()\n  \n def runTest(self):\n  test=self._dt_test\n  old=sys.stdout\n  new=StringIO()\n  optionflags=self._dt_optionflags\n  \n  if not (optionflags&REPORTING_FLAGS):\n  \n  \n   optionflags |=_unittest_reportflags\n   \n  runner=DocTestRunner(optionflags=optionflags,\n  checker=self._dt_checker,verbose=False )\n  \n  try :\n   runner.DIVIDER=\"-\"*70\n   failures,tries=runner.run(\n   test,out=new.write,clear_globs=False )\n  finally :\n   sys.stdout=old\n   \n  if failures:\n   raise self.failureException(self.format_failure(new.getvalue()))\n   \n def format_failure(self,err):\n  test=self._dt_test\n  if test.lineno is None :\n   lineno='unknown line number'\n  else :\n   lineno='%s'%test.lineno\n  lname='.'.join(test.name.split('.')[-1:])\n  return ('Failed doctest test for %s\\n'\n  '  File \"%s\", line %s, in %s\\n\\n%s'\n  %(test.name,test.filename,lineno,lname,err)\n  )\n  \n def debug(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  self.setUp()\n  runner=DebugRunner(optionflags=self._dt_optionflags,\n  checker=self._dt_checker,verbose=False )\n  runner.run(self._dt_test,clear_globs=False )\n  self.tearDown()\n  \n def id(self):\n  return self._dt_test.name\n  \n def __eq__(self,other):\n  if type(self)is not type(other):\n   return NotImplemented\n   \n  return self._dt_test ==other._dt_test and  self._dt_optionflags ==other._dt_optionflags and  self._dt_setUp ==other._dt_setUp and  self._dt_tearDown ==other._dt_tearDown and  self._dt_checker ==other._dt_checker\n  \n def __hash__(self):\n  return hash((self._dt_optionflags,self._dt_setUp,self._dt_tearDown,\n  self._dt_checker))\n  \n def __repr__(self):\n  name=self._dt_test.name.split('.')\n  return\"%s (%s)\"%(name[-1],'.'.join(name[:-1]))\n  \n __str__=__repr__\n \n def shortDescription(self):\n  return\"Doctest: \"+self._dt_test.name\n  \nclass SkipDocTestCase(DocTestCase):\n def __init__(self,module):\n  self.module=module\n  DocTestCase.__init__(self,None )\n  \n def setUp(self):\n  self.skipTest(\"DocTestSuite will not work with -O2 and above\")\n  \n def test_skip(self):\n  pass\n  \n def shortDescription(self):\n  return\"Skipping tests from %s\"%self.module.__name__\n  \n __str__=shortDescription\n \n \nclass _DocTestSuite(unittest.TestSuite):\n\n def _removeTestAtIndex(self,index):\n  pass\n  \n  \ndef DocTestSuite(module=None ,globs=None ,extraglobs=None ,test_finder=None ,\n**options):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if test_finder is None :\n  test_finder=DocTestFinder()\n  \n module=_normalize_module(module)\n tests=test_finder.find(module,globs=globs,extraglobs=extraglobs)\n \n if not tests and sys.flags.optimize >=2:\n \n  suite=_DocTestSuite()\n  suite.addTest(SkipDocTestCase(module))\n  return suite\n elif not tests:\n \n \n \n \n \n \n \n  raise ValueError(module,\"has no docstrings\")\n  \n tests.sort()\n suite=_DocTestSuite()\n \n for test in tests:\n  if len(test.examples)==0:\n   continue\n  if not test.filename:\n   filename=module.__file__\n   if filename[-4:]in (\".pyc\",\".pyo\"):\n    filename=filename[:-1]\n   test.filename=filename\n  suite.addTest(DocTestCase(test,**options))\n  \n return suite\n \nclass DocFileCase(DocTestCase):\n\n def id(self):\n  return'_'.join(self._dt_test.name.split('.'))\n  \n def __repr__(self):\n  return self._dt_test.filename\n __str__=__repr__\n \n def format_failure(self,err):\n  return ('Failed doctest test for %s\\n  File \"%s\", line 0\\n\\n%s'\n  %(self._dt_test.name,self._dt_test.filename,err)\n  )\n  \ndef DocFileTest(path,module_relative=True ,package=None ,\nglobs=None ,parser=DocTestParser(),\nencoding=None ,**options):\n if globs is None :\n  globs={}\n else :\n  globs=globs.copy()\n  \n if package and not module_relative:\n  raise ValueError(\"Package may only be specified for module-\"\n  \"relative paths.\")\n  \n  \n doc,path=_load_testfile(path,package,module_relative,\n encoding or\"utf-8\")\n \n if\"__file__\"not in globs:\n  globs[\"__file__\"]=path\n  \n  \n name=os.path.basename(path)\n \n \n test=parser.get_doctest(doc,globs,name,path,0)\n return DocFileCase(test,**options)\n \ndef DocFileSuite(*paths,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n suite=_DocTestSuite()\n \n \n \n \n if kw.get('module_relative',True ):\n  kw['package']=_normalize_module(kw.get('package'))\n  \n for path in paths:\n  suite.addTest(DocFileTest(path,**kw))\n  \n return suite\n \n \n \n \n \ndef script_from_examples(s):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n output=[]\n for piece in DocTestParser().parse(s):\n  if isinstance(piece,Example):\n  \n   output.append(piece.source[:-1])\n   \n   want=piece.want\n   if want:\n    output.append('# Expected:')\n    output +=['## '+l for l in want.split('\\n')[:-1]]\n  else :\n  \n   output +=[_comment_line(l)\n   for l in piece.split('\\n')[:-1]]\n   \n   \n while output and output[-1]=='#':\n  output.pop()\n while output and output[0]=='#':\n  output.pop(0)\n  \n  \n return'\\n'.join(output)+'\\n'\n \ndef testsource(module,name):\n ''\n\n\n\n\n \n module=_normalize_module(module)\n tests=DocTestFinder().find(module)\n test=[t for t in tests if t.name ==name]\n if not test:\n  raise ValueError(name,\"not found in tests\")\n test=test[0]\n testsrc=script_from_examples(test.docstring)\n return testsrc\n \ndef debug_src(src,pm=False ,globs=None ):\n ''\n testsrc=script_from_examples(src)\n debug_script(testsrc,pm,globs)\n \ndef debug_script(src,pm=False ,globs=None ):\n ''\n import pdb\n \n if globs:\n  globs=globs.copy()\n else :\n  globs={}\n  \n if pm:\n  try :\n   exec(src,globs,globs)\n  except :\n   print(sys.exc_info()[1])\n   p=pdb.Pdb(nosigint=True )\n   p.reset()\n   p.interaction(None ,sys.exc_info()[2])\n else :\n  pdb.Pdb(nosigint=True ).run(\"exec(%r)\"%src,globs,globs)\n  \ndef debug(module,name,pm=False ):\n ''\n\n\n\n\n \n module=_normalize_module(module)\n testsrc=testsource(module,name)\n debug_script(testsrc,pm,module.__dict__)\n \n \n \n \nclass _TestClass:\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,val):\n  ''\n\n\n\n\n  \n  \n  self.val=val\n  \n def square(self):\n  ''\n\n\n\n  \n  \n  self.val=self.val **2\n  return self\n  \n def get(self):\n  ''\n\n\n\n\n  \n  \n  return self.val\n  \n__test__={\"_TestClass\":_TestClass,\n\"string\":r\"\"\"\n                      Example of a string object, searched as-is.\n                      >>> x = 1; y = 2\n                      >>> x + y, x * y\n                      (3, 2)\n                      \"\"\",\n\n\"bool-int equivalence\":r\"\"\"\n                                    In 2.2, boolean expressions displayed\n                                    0 or 1.  By default, we still accept\n                                    them.  This can be disabled by passing\n                                    DONT_ACCEPT_TRUE_FOR_1 to the new\n                                    optionflags argument.\n                                    >>> 4 == 4\n                                    1\n                                    >>> 4 == 4\n                                    True\n                                    >>> 4 > 4\n                                    0\n                                    >>> 4 > 4\n                                    False\n                                    \"\"\",\n\n\"blank lines\":r\"\"\"\n                Blank lines can be marked with <BLANKLINE>:\n                    >>> print('foo\\n\\nbar\\n')\n                    foo\n                    <BLANKLINE>\n                    bar\n                    <BLANKLINE>\n            \"\"\",\n\n\"ellipsis\":r\"\"\"\n                If the ellipsis flag is used, then '...' can be used to\n                elide substrings in the desired output:\n                    >>> print(list(range(1000))) #doctest: +ELLIPSIS\n                    [0, 1, 2, ..., 999]\n            \"\"\",\n\n\"whitespace normalization\":r\"\"\"\n                If the whitespace normalization flag is used, then\n                differences in whitespace are ignored.\n                    >>> print(list(range(30))) #doctest: +NORMALIZE_WHITESPACE\n                    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n                     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,\n                     27, 28, 29]\n            \"\"\",\n}\n\n\ndef _test():\n parser=argparse.ArgumentParser(description=\"doctest runner\")\n parser.add_argument('-v','--verbose',action='store_true',default=False ,\n help='print very verbose output for all tests')\n parser.add_argument('-o','--option',action='append',\n choices=OPTIONFLAGS_BY_NAME.keys(),default=[],\n help=('specify a doctest option flag to apply'\n ' to the test run; may be specified more'\n ' than once to apply multiple options'))\n parser.add_argument('-f','--fail-fast',action='store_true',\n help=('stop running tests after first failure (this'\n ' is a shorthand for -o FAIL_FAST, and is'\n ' in addition to any other -o options)'))\n parser.add_argument('file',nargs='+',\n help='file containing the tests to run')\n args=parser.parse_args()\n testfiles=args.file\n \n \n verbose=args.verbose\n options=0\n for option in args.option:\n  options |=OPTIONFLAGS_BY_NAME[option]\n if args.fail_fast:\n  options |=FAIL_FAST\n for filename in testfiles:\n  if filename.endswith(\".py\"):\n  \n  \n  \n   dirname,filename=os.path.split(filename)\n   sys.path.insert(0,dirname)\n   m=__import__(filename[:-3])\n   del sys.path[0]\n   failures,_=testmod(m,verbose=verbose,optionflags=options)\n  else :\n   failures,_=testfile(filename,module_relative=False ,\n   verbose=verbose,optionflags=options)\n  if failures:\n   return 1\n return 0\n \n \nif __name__ ==\"__main__\":\n sys.exit(_test())\n"], "locale": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\nimport sys\nimport encodings\nimport encodings.aliases\nimport re\nimport collections\nfrom builtins import str as _builtin_str\nimport functools\n\n\n\n\n\n\n\n__all__=[\"getlocale\",\"getdefaultlocale\",\"getpreferredencoding\",\"Error\",\n\"setlocale\",\"resetlocale\",\"localeconv\",\"strcoll\",\"strxfrm\",\n\"str\",\"atof\",\"atoi\",\"format\",\"format_string\",\"currency\",\n\"normalize\",\"LC_CTYPE\",\"LC_COLLATE\",\"LC_TIME\",\"LC_MONETARY\",\n\"LC_NUMERIC\",\"LC_ALL\",\"CHAR_MAX\"]\n\ndef _strcoll(a,b):\n ''\n\n \n return (a >b)-(a <b)\n \ndef _strxfrm(s):\n ''\n\n \n return s\n \ntry :\n\n from _locale import *\n \nexcept ImportError:\n\n\n\n CHAR_MAX=127\n LC_ALL=6\n LC_COLLATE=3\n LC_CTYPE=0\n LC_MESSAGES=5\n LC_MONETARY=4\n LC_NUMERIC=1\n LC_TIME=2\n Error=ValueError\n \n def localeconv():\n  ''\n\n  \n  \n  return {'grouping':[127],\n  'currency_symbol':'',\n  'n_sign_posn':127,\n  'p_cs_precedes':127,\n  'n_cs_precedes':127,\n  'mon_grouping':[],\n  'n_sep_by_space':127,\n  'decimal_point':'.',\n  'negative_sign':'',\n  'positive_sign':'',\n  'p_sep_by_space':127,\n  'int_curr_symbol':'',\n  'p_sign_posn':127,\n  'thousands_sep':'',\n  'mon_thousands_sep':'',\n  'frac_digits':127,\n  'mon_decimal_point':'',\n  'int_frac_digits':127}\n  \n def setlocale(category,value=None ):\n  ''\n\n  \n  if value not in (None ,'','C'):\n   raise Error('_locale emulation only supports \"C\" locale')\n  return'C'\n  \n  \nif'strxfrm'not in globals():\n strxfrm=_strxfrm\nif'strcoll'not in globals():\n strcoll=_strcoll\n \n \n_localeconv=localeconv\n\n\n\n_override_localeconv={}\n\n@functools.wraps(_localeconv)\ndef localeconv():\n d=_localeconv()\n if _override_localeconv:\n  d.update(_override_localeconv)\n return d\n \n \n \n \n \n \n \n \ndef _grouping_intervals(grouping):\n last_interval=None\n for interval in grouping:\n \n  if interval ==CHAR_MAX:\n   return\n   \n  if interval ==0:\n   if last_interval is None :\n    raise ValueError(\"invalid grouping\")\n   while True :\n    yield last_interval\n  yield interval\n  last_interval=interval\n  \n  \ndef _group(s,monetary=False ):\n conv=localeconv()\n thousands_sep=conv[monetary and'mon_thousands_sep'or'thousands_sep']\n grouping=conv[monetary and'mon_grouping'or'grouping']\n if not grouping:\n  return (s,0)\n if s[-1]==' ':\n  stripped=s.rstrip()\n  right_spaces=s[len(stripped):]\n  s=stripped\n else :\n  right_spaces=''\n left_spaces=''\n groups=[]\n for interval in _grouping_intervals(grouping):\n  if not s or s[-1]not in\"0123456789\":\n  \n   left_spaces=s\n   s=''\n   break\n  groups.append(s[-interval:])\n  s=s[:-interval]\n if s:\n  groups.append(s)\n groups.reverse()\n return (\n left_spaces+thousands_sep.join(groups)+right_spaces,\n len(thousands_sep)*(len(groups)-1)\n )\n \n \ndef _strip_padding(s,amount):\n lpos=0\n while amount and s[lpos]==' ':\n  lpos +=1\n  amount -=1\n rpos=len(s)-1\n while amount and s[rpos]==' ':\n  rpos -=1\n  amount -=1\n return s[lpos:rpos+1]\n \n_percent_re=re.compile(r'%(?:\\((?P<key>.*?)\\))?'\nr'(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')\n\ndef format(percent,value,grouping=False ,monetary=False ,*additional):\n ''\n\n\n\n \n \n match=_percent_re.match(percent)\n if not match or len(match.group())!=len(percent):\n  raise ValueError((\"format() must be given exactly one %%char \"\n  \"format specifier, %s not valid\")%repr(percent))\n return _format(percent,value,grouping,monetary,*additional)\n \ndef _format(percent,value,grouping=False ,monetary=False ,*additional):\n if additional:\n  formatted=percent %((value,)+additional)\n else :\n  formatted=percent %value\n  \n if percent[-1]in'eEfFgG':\n  seps=0\n  parts=formatted.split('.')\n  if grouping:\n   parts[0],seps=_group(parts[0],monetary=monetary)\n  decimal_point=localeconv()[monetary and'mon_decimal_point'\n  or'decimal_point']\n  formatted=decimal_point.join(parts)\n  if seps:\n   formatted=_strip_padding(formatted,seps)\n elif percent[-1]in'diu':\n  seps=0\n  if grouping:\n   formatted,seps=_group(formatted,monetary=monetary)\n  if seps:\n   formatted=_strip_padding(formatted,seps)\n return formatted\n \ndef format_string(f,val,grouping=False ):\n ''\n\n \n percents=list(_percent_re.finditer(f))\n new_f=_percent_re.sub('%s',f)\n \n if isinstance(val,collections.Mapping):\n  new_val=[]\n  for perc in percents:\n   if perc.group()[-1]=='%':\n    new_val.append('%')\n   else :\n    new_val.append(format(perc.group(),val,grouping))\n else :\n  if not isinstance(val,tuple):\n   val=(val,)\n  new_val=[]\n  i=0\n  for perc in percents:\n   if perc.group()[-1]=='%':\n    new_val.append('%')\n   else :\n    starcount=perc.group('modifiers').count('*')\n    new_val.append(_format(perc.group(),\n    val[i],\n    grouping,\n    False ,\n    *val[i+1:i+1+starcount]))\n    i +=(1+starcount)\n val=tuple(new_val)\n \n return new_f %val\n \ndef currency(val,symbol=True ,grouping=False ,international=False ):\n ''\n \n conv=localeconv()\n \n \n digits=conv[international and'int_frac_digits'or'frac_digits']\n if digits ==127:\n  raise ValueError(\"Currency formatting is not possible using \"\n  \"the 'C' locale.\")\n  \n s=format('%%.%if'%digits,abs(val),grouping,monetary=True )\n \n s='<'+s+'>'\n \n if symbol:\n  smb=conv[international and'int_curr_symbol'or'currency_symbol']\n  precedes=conv[val <0 and'n_cs_precedes'or'p_cs_precedes']\n  separated=conv[val <0 and'n_sep_by_space'or'p_sep_by_space']\n  \n  if precedes:\n   s=smb+(separated and' 'or'')+s\n  else :\n   s=s+(separated and' 'or'')+smb\n   \n sign_pos=conv[val <0 and'n_sign_posn'or'p_sign_posn']\n sign=conv[val <0 and'negative_sign'or'positive_sign']\n \n if sign_pos ==0:\n  s='('+s+')'\n elif sign_pos ==1:\n  s=sign+s\n elif sign_pos ==2:\n  s=s+sign\n elif sign_pos ==3:\n  s=s.replace('<',sign)\n elif sign_pos ==4:\n  s=s.replace('>',sign)\n else :\n \n \n  s=sign+s\n  \n return s.replace('<','').replace('>','')\n \ndef str(val):\n ''\n return format(\"%.12g\",val)\n \ndef atof(string,func=float):\n ''\n \n ts=localeconv()['thousands_sep']\n if ts:\n  string=string.replace(ts,'')\n  \n dd=localeconv()['decimal_point']\n if dd:\n  string=string.replace(dd,'.')\n  \n return func(string)\n \ndef atoi(str):\n ''\n return atof(str,int)\n \ndef _test():\n setlocale(LC_ALL,\"\")\n \n s1=format(\"%d\",123456789,1)\n print(s1,\"is\",atoi(s1))\n \n s1=str(3.14)\n print(s1,\"is\",atof(s1))\n \n \n \n \n \n \n \n \n_setlocale=setlocale\n\ndef _replace_encoding(code,encoding):\n if'.'in code:\n  langname=code[:code.index('.')]\n else :\n  langname=code\n  \n norm_encoding=encodings.normalize_encoding(encoding)\n \n norm_encoding=encodings.aliases.aliases.get(norm_encoding.lower(),\n norm_encoding)\n \n encoding=norm_encoding\n norm_encoding=norm_encoding.lower()\n if norm_encoding in locale_encoding_alias:\n  encoding=locale_encoding_alias[norm_encoding]\n else :\n  norm_encoding=norm_encoding.replace('_','')\n  norm_encoding=norm_encoding.replace('-','')\n  if norm_encoding in locale_encoding_alias:\n   encoding=locale_encoding_alias[norm_encoding]\n   \n return langname+'.'+encoding\n \ndef _append_modifier(code,modifier):\n if modifier =='euro':\n  if'.'not in code:\n   return code+'.ISO8859-15'\n  _,_,encoding=code.partition('.')\n  if encoding in ('ISO8859-15','UTF-8'):\n   return code\n  if encoding =='ISO8859-1':\n   return _replace_encoding(code,'ISO8859-15')\n return code+'@'+modifier\n \ndef normalize(localename):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n code=localename.lower()\n if':'in code:\n \n  code=code.replace(':','.')\n if'@'in code:\n  code,modifier=code.split('@',1)\n else :\n  modifier=''\n if'.'in code:\n  langname,encoding=code.split('.')[:2]\n else :\n  langname=code\n  encoding=''\n  \n  \n lang_enc=langname\n if encoding:\n  norm_encoding=encoding.replace('-','')\n  norm_encoding=norm_encoding.replace('_','')\n  lang_enc +='.'+norm_encoding\n lookup_name=lang_enc\n if modifier:\n  lookup_name +='@'+modifier\n code=locale_alias.get(lookup_name,None )\n if code is not None :\n  return code\n  \n  \n if modifier:\n \n  code=locale_alias.get(lang_enc,None )\n  if code is not None :\n  \n   if'@'not in code:\n    return _append_modifier(code,modifier)\n   if code.split('@',1)[1].lower()==modifier:\n    return code\n    \n    \n if encoding:\n \n  lookup_name=langname\n  if modifier:\n   lookup_name +='@'+modifier\n  code=locale_alias.get(lookup_name,None )\n  if code is not None :\n  \n   if'@'not in code:\n    return _replace_encoding(code,encoding)\n   code,modifier=code.split('@',1)\n   return _replace_encoding(code,encoding)+'@'+modifier\n   \n  if modifier:\n  \n   code=locale_alias.get(langname,None )\n   if code is not None :\n   \n    if'@'not in code:\n     code=_replace_encoding(code,encoding)\n     return _append_modifier(code,modifier)\n    code,defmod=code.split('@',1)\n    if defmod.lower()==modifier:\n     return _replace_encoding(code,encoding)+'@'+defmod\n     \n return localename\n \ndef _parse_localename(localename):\n\n ''\n\n\n\n\n\n\n\n\n\n\n \n code=normalize(localename)\n if'@'in code:\n \n  code,modifier=code.split('@',1)\n  if modifier =='euro'and'.'not in code:\n  \n  \n  \n   return code,'iso-8859-15'\n   \n if'.'in code:\n  return tuple(code.split('.')[:2])\n elif code =='C':\n  return None ,None\n raise ValueError('unknown locale: %s'%localename)\n \ndef _build_localename(localetuple):\n\n ''\n\n\n\n\n \n try :\n  language,encoding=localetuple\n  \n  if language is None :\n   language='C'\n  if encoding is None :\n   return language\n  else :\n   return language+'.'+encoding\n except (TypeError,ValueError):\n  raise TypeError('Locale must be None, a string, or an iterable of two strings -- language code, encoding.')\n  \ndef getdefaultlocale(envvars=('LC_ALL','LC_CTYPE','LANG','LANGUAGE')):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n try :\n \n  import _locale\n  code,encoding=_locale._getdefaultlocale()\n except (ImportError,AttributeError):\n  pass\n else :\n \n  if sys.platform ==\"win32\"and code and code[:2]==\"0x\":\n  \n   code=windows_locale.get(int(code,0))\n   \n   \n  return code,encoding\n  \n  \n import os\n lookup=os.environ.get\n for variable in envvars:\n  localename=lookup(variable,None )\n  if localename:\n   if variable =='LANGUAGE':\n    localename=localename.split(':')[0]\n   break\n else :\n  localename='C'\n return _parse_localename(localename)\n \n \ndef getlocale(category=LC_CTYPE):\n\n ''\n\n\n\n\n\n\n\n\n\n \n localename=_setlocale(category)\n if category ==LC_ALL and';'in localename:\n  raise TypeError('category LC_ALL is not supported')\n return _parse_localename(localename)\n \ndef setlocale(category,locale=None ):\n\n ''\n\n\n\n\n\n\n\n\n \n if locale and not isinstance(locale,_builtin_str):\n \n  locale=normalize(_build_localename(locale))\n return _setlocale(category,locale)\n \ndef resetlocale(category=LC_ALL):\n\n ''\n\n\n\n\n \n _setlocale(category,_build_localename(getdefaultlocale()))\n \nif sys.platform.startswith(\"win\"):\n\n def getpreferredencoding(do_setlocale=True ):\n  ''\n  import _bootlocale\n  return _bootlocale.getpreferredencoding(False )\nelse :\n\n try :\n  CODESET\n except NameError:\n \n  def getpreferredencoding(do_setlocale=True ):\n   ''\n   \n   res=getdefaultlocale()[1]\n   if res is None :\n   \n    res='ascii'\n   return res\n else :\n  def getpreferredencoding(do_setlocale=True ):\n   ''\n   \n   import _bootlocale\n   if do_setlocale:\n    oldloc=setlocale(LC_CTYPE)\n    try :\n     setlocale(LC_CTYPE,\"\")\n    except Error:\n     pass\n   result=_bootlocale.getpreferredencoding(False )\n   if do_setlocale:\n    setlocale(LC_CTYPE,oldloc)\n   return result\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \nlocale_encoding_alias={\n\n\n'437':'C',\n'c':'C',\n'en':'ISO8859-1',\n'jis':'JIS7',\n'jis7':'JIS7',\n'ajec':'eucJP',\n'koi8c':'KOI8-C',\n'microsoftcp1251':'CP1251',\n'microsoftcp1255':'CP1255',\n'microsoftcp1256':'CP1256',\n'88591':'ISO8859-1',\n'88592':'ISO8859-2',\n'88595':'ISO8859-5',\n'885915':'ISO8859-15',\n\n\n'ascii':'ISO8859-1',\n'latin_1':'ISO8859-1',\n'iso8859_1':'ISO8859-1',\n'iso8859_10':'ISO8859-10',\n'iso8859_11':'ISO8859-11',\n'iso8859_13':'ISO8859-13',\n'iso8859_14':'ISO8859-14',\n'iso8859_15':'ISO8859-15',\n'iso8859_16':'ISO8859-16',\n'iso8859_2':'ISO8859-2',\n'iso8859_3':'ISO8859-3',\n'iso8859_4':'ISO8859-4',\n'iso8859_5':'ISO8859-5',\n'iso8859_6':'ISO8859-6',\n'iso8859_7':'ISO8859-7',\n'iso8859_8':'ISO8859-8',\n'iso8859_9':'ISO8859-9',\n'iso2022_jp':'JIS7',\n'shift_jis':'SJIS',\n'tactis':'TACTIS',\n'euc_jp':'eucJP',\n'euc_kr':'eucKR',\n'utf_8':'UTF-8',\n'koi8_r':'KOI8-R',\n'koi8_u':'KOI8-U',\n'cp1251':'CP1251',\n'cp1255':'CP1255',\n'cp1256':'CP1256',\n\n\n\n}\n\nfor k,v in sorted(locale_encoding_alias.items()):\n k=k.replace('_','')\n locale_encoding_alias.setdefault(k,v)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nlocale_alias={\n'a3':'az_AZ.KOI8-C',\n'a3_az':'az_AZ.KOI8-C',\n'a3_az.koic':'az_AZ.KOI8-C',\n'aa_dj':'aa_DJ.ISO8859-1',\n'aa_er':'aa_ER.UTF-8',\n'aa_et':'aa_ET.UTF-8',\n'af':'af_ZA.ISO8859-1',\n'af_za':'af_ZA.ISO8859-1',\n'am':'am_ET.UTF-8',\n'am_et':'am_ET.UTF-8',\n'american':'en_US.ISO8859-1',\n'an_es':'an_ES.ISO8859-15',\n'ar':'ar_AA.ISO8859-6',\n'ar_aa':'ar_AA.ISO8859-6',\n'ar_ae':'ar_AE.ISO8859-6',\n'ar_bh':'ar_BH.ISO8859-6',\n'ar_dz':'ar_DZ.ISO8859-6',\n'ar_eg':'ar_EG.ISO8859-6',\n'ar_in':'ar_IN.UTF-8',\n'ar_iq':'ar_IQ.ISO8859-6',\n'ar_jo':'ar_JO.ISO8859-6',\n'ar_kw':'ar_KW.ISO8859-6',\n'ar_lb':'ar_LB.ISO8859-6',\n'ar_ly':'ar_LY.ISO8859-6',\n'ar_ma':'ar_MA.ISO8859-6',\n'ar_om':'ar_OM.ISO8859-6',\n'ar_qa':'ar_QA.ISO8859-6',\n'ar_sa':'ar_SA.ISO8859-6',\n'ar_sd':'ar_SD.ISO8859-6',\n'ar_sy':'ar_SY.ISO8859-6',\n'ar_tn':'ar_TN.ISO8859-6',\n'ar_ye':'ar_YE.ISO8859-6',\n'arabic':'ar_AA.ISO8859-6',\n'as':'as_IN.UTF-8',\n'as_in':'as_IN.UTF-8',\n'ast_es':'ast_ES.ISO8859-15',\n'ayc_pe':'ayc_PE.UTF-8',\n'az':'az_AZ.ISO8859-9E',\n'az_az':'az_AZ.ISO8859-9E',\n'az_az.iso88599e':'az_AZ.ISO8859-9E',\n'be':'be_BY.CP1251',\n'be@latin':'be_BY.UTF-8@latin',\n'be_bg.utf8':'bg_BG.UTF-8',\n'be_by':'be_BY.CP1251',\n'be_by@latin':'be_BY.UTF-8@latin',\n'bem_zm':'bem_ZM.UTF-8',\n'ber_dz':'ber_DZ.UTF-8',\n'ber_ma':'ber_MA.UTF-8',\n'bg':'bg_BG.CP1251',\n'bg_bg':'bg_BG.CP1251',\n'bho_in':'bho_IN.UTF-8',\n'bn_bd':'bn_BD.UTF-8',\n'bn_in':'bn_IN.UTF-8',\n'bo_cn':'bo_CN.UTF-8',\n'bo_in':'bo_IN.UTF-8',\n'bokmal':'nb_NO.ISO8859-1',\n'bokm\\xe5l':'nb_NO.ISO8859-1',\n'br':'br_FR.ISO8859-1',\n'br_fr':'br_FR.ISO8859-1',\n'brx_in':'brx_IN.UTF-8',\n'bs':'bs_BA.ISO8859-2',\n'bs_ba':'bs_BA.ISO8859-2',\n'bulgarian':'bg_BG.CP1251',\n'byn_er':'byn_ER.UTF-8',\n'c':'C',\n'c-french':'fr_CA.ISO8859-1',\n'c.ascii':'C',\n'c.en':'C',\n'c.iso88591':'en_US.ISO8859-1',\n'c.utf8':'en_US.UTF-8',\n'c_c':'C',\n'c_c.c':'C',\n'ca':'ca_ES.ISO8859-1',\n'ca_ad':'ca_AD.ISO8859-1',\n'ca_es':'ca_ES.ISO8859-1',\n'ca_es@valencia':'ca_ES.ISO8859-15@valencia',\n'ca_fr':'ca_FR.ISO8859-1',\n'ca_it':'ca_IT.ISO8859-1',\n'catalan':'ca_ES.ISO8859-1',\n'cextend':'en_US.ISO8859-1',\n'chinese-s':'zh_CN.eucCN',\n'chinese-t':'zh_TW.eucTW',\n'crh_ua':'crh_UA.UTF-8',\n'croatian':'hr_HR.ISO8859-2',\n'cs':'cs_CZ.ISO8859-2',\n'cs_cs':'cs_CZ.ISO8859-2',\n'cs_cz':'cs_CZ.ISO8859-2',\n'csb_pl':'csb_PL.UTF-8',\n'cv_ru':'cv_RU.UTF-8',\n'cy':'cy_GB.ISO8859-1',\n'cy_gb':'cy_GB.ISO8859-1',\n'cz':'cs_CZ.ISO8859-2',\n'cz_cz':'cs_CZ.ISO8859-2',\n'czech':'cs_CZ.ISO8859-2',\n'da':'da_DK.ISO8859-1',\n'da_dk':'da_DK.ISO8859-1',\n'danish':'da_DK.ISO8859-1',\n'dansk':'da_DK.ISO8859-1',\n'de':'de_DE.ISO8859-1',\n'de_at':'de_AT.ISO8859-1',\n'de_be':'de_BE.ISO8859-1',\n'de_ch':'de_CH.ISO8859-1',\n'de_de':'de_DE.ISO8859-1',\n'de_li.utf8':'de_LI.UTF-8',\n'de_lu':'de_LU.ISO8859-1',\n'deutsch':'de_DE.ISO8859-1',\n'doi_in':'doi_IN.UTF-8',\n'dutch':'nl_NL.ISO8859-1',\n'dutch.iso88591':'nl_BE.ISO8859-1',\n'dv_mv':'dv_MV.UTF-8',\n'dz_bt':'dz_BT.UTF-8',\n'ee':'ee_EE.ISO8859-4',\n'ee_ee':'ee_EE.ISO8859-4',\n'eesti':'et_EE.ISO8859-1',\n'el':'el_GR.ISO8859-7',\n'el_cy':'el_CY.ISO8859-7',\n'el_gr':'el_GR.ISO8859-7',\n'el_gr@euro':'el_GR.ISO8859-15',\n'en':'en_US.ISO8859-1',\n'en_ag':'en_AG.UTF-8',\n'en_au':'en_AU.ISO8859-1',\n'en_be':'en_BE.ISO8859-1',\n'en_bw':'en_BW.ISO8859-1',\n'en_ca':'en_CA.ISO8859-1',\n'en_dk':'en_DK.ISO8859-1',\n'en_dl.utf8':'en_DL.UTF-8',\n'en_gb':'en_GB.ISO8859-1',\n'en_hk':'en_HK.ISO8859-1',\n'en_ie':'en_IE.ISO8859-1',\n'en_in':'en_IN.ISO8859-1',\n'en_ng':'en_NG.UTF-8',\n'en_nz':'en_NZ.ISO8859-1',\n'en_ph':'en_PH.ISO8859-1',\n'en_sg':'en_SG.ISO8859-1',\n'en_uk':'en_GB.ISO8859-1',\n'en_us':'en_US.ISO8859-1',\n'en_us@euro@euro':'en_US.ISO8859-15',\n'en_za':'en_ZA.ISO8859-1',\n'en_zm':'en_ZM.UTF-8',\n'en_zw':'en_ZW.ISO8859-1',\n'en_zw.utf8':'en_ZS.UTF-8',\n'eng_gb':'en_GB.ISO8859-1',\n'english':'en_EN.ISO8859-1',\n'english_uk':'en_GB.ISO8859-1',\n'english_united-states':'en_US.ISO8859-1',\n'english_united-states.437':'C',\n'english_us':'en_US.ISO8859-1',\n'eo':'eo_XX.ISO8859-3',\n'eo.utf8':'eo.UTF-8',\n'eo_eo':'eo_EO.ISO8859-3',\n'eo_us.utf8':'eo_US.UTF-8',\n'eo_xx':'eo_XX.ISO8859-3',\n'es':'es_ES.ISO8859-1',\n'es_ar':'es_AR.ISO8859-1',\n'es_bo':'es_BO.ISO8859-1',\n'es_cl':'es_CL.ISO8859-1',\n'es_co':'es_CO.ISO8859-1',\n'es_cr':'es_CR.ISO8859-1',\n'es_cu':'es_CU.UTF-8',\n'es_do':'es_DO.ISO8859-1',\n'es_ec':'es_EC.ISO8859-1',\n'es_es':'es_ES.ISO8859-1',\n'es_gt':'es_GT.ISO8859-1',\n'es_hn':'es_HN.ISO8859-1',\n'es_mx':'es_MX.ISO8859-1',\n'es_ni':'es_NI.ISO8859-1',\n'es_pa':'es_PA.ISO8859-1',\n'es_pe':'es_PE.ISO8859-1',\n'es_pr':'es_PR.ISO8859-1',\n'es_py':'es_PY.ISO8859-1',\n'es_sv':'es_SV.ISO8859-1',\n'es_us':'es_US.ISO8859-1',\n'es_uy':'es_UY.ISO8859-1',\n'es_ve':'es_VE.ISO8859-1',\n'estonian':'et_EE.ISO8859-1',\n'et':'et_EE.ISO8859-15',\n'et_ee':'et_EE.ISO8859-15',\n'eu':'eu_ES.ISO8859-1',\n'eu_es':'eu_ES.ISO8859-1',\n'eu_fr':'eu_FR.ISO8859-1',\n'fa':'fa_IR.UTF-8',\n'fa_ir':'fa_IR.UTF-8',\n'fa_ir.isiri3342':'fa_IR.ISIRI-3342',\n'ff_sn':'ff_SN.UTF-8',\n'fi':'fi_FI.ISO8859-15',\n'fi_fi':'fi_FI.ISO8859-15',\n'fil_ph':'fil_PH.UTF-8',\n'finnish':'fi_FI.ISO8859-1',\n'fo':'fo_FO.ISO8859-1',\n'fo_fo':'fo_FO.ISO8859-1',\n'fr':'fr_FR.ISO8859-1',\n'fr_be':'fr_BE.ISO8859-1',\n'fr_ca':'fr_CA.ISO8859-1',\n'fr_ch':'fr_CH.ISO8859-1',\n'fr_fr':'fr_FR.ISO8859-1',\n'fr_lu':'fr_LU.ISO8859-1',\n'fran\\xe7ais':'fr_FR.ISO8859-1',\n'fre_fr':'fr_FR.ISO8859-1',\n'french':'fr_FR.ISO8859-1',\n'french.iso88591':'fr_CH.ISO8859-1',\n'french_france':'fr_FR.ISO8859-1',\n'fur_it':'fur_IT.UTF-8',\n'fy_de':'fy_DE.UTF-8',\n'fy_nl':'fy_NL.UTF-8',\n'ga':'ga_IE.ISO8859-1',\n'ga_ie':'ga_IE.ISO8859-1',\n'galego':'gl_ES.ISO8859-1',\n'galician':'gl_ES.ISO8859-1',\n'gd':'gd_GB.ISO8859-1',\n'gd_gb':'gd_GB.ISO8859-1',\n'ger_de':'de_DE.ISO8859-1',\n'german':'de_DE.ISO8859-1',\n'german.iso88591':'de_CH.ISO8859-1',\n'german_germany':'de_DE.ISO8859-1',\n'gez_er':'gez_ER.UTF-8',\n'gez_et':'gez_ET.UTF-8',\n'gl':'gl_ES.ISO8859-1',\n'gl_es':'gl_ES.ISO8859-1',\n'greek':'el_GR.ISO8859-7',\n'gu_in':'gu_IN.UTF-8',\n'gv':'gv_GB.ISO8859-1',\n'gv_gb':'gv_GB.ISO8859-1',\n'ha_ng':'ha_NG.UTF-8',\n'he':'he_IL.ISO8859-8',\n'he_il':'he_IL.ISO8859-8',\n'hebrew':'he_IL.ISO8859-8',\n'hi':'hi_IN.ISCII-DEV',\n'hi_in':'hi_IN.ISCII-DEV',\n'hi_in.isciidev':'hi_IN.ISCII-DEV',\n'hne':'hne_IN.UTF-8',\n'hne_in':'hne_IN.UTF-8',\n'hr':'hr_HR.ISO8859-2',\n'hr_hr':'hr_HR.ISO8859-2',\n'hrvatski':'hr_HR.ISO8859-2',\n'hsb_de':'hsb_DE.ISO8859-2',\n'ht_ht':'ht_HT.UTF-8',\n'hu':'hu_HU.ISO8859-2',\n'hu_hu':'hu_HU.ISO8859-2',\n'hungarian':'hu_HU.ISO8859-2',\n'hy_am':'hy_AM.UTF-8',\n'hy_am.armscii8':'hy_AM.ARMSCII_8',\n'ia':'ia.UTF-8',\n'ia_fr':'ia_FR.UTF-8',\n'icelandic':'is_IS.ISO8859-1',\n'id':'id_ID.ISO8859-1',\n'id_id':'id_ID.ISO8859-1',\n'ig_ng':'ig_NG.UTF-8',\n'ik_ca':'ik_CA.UTF-8',\n'in':'id_ID.ISO8859-1',\n'in_id':'id_ID.ISO8859-1',\n'is':'is_IS.ISO8859-1',\n'is_is':'is_IS.ISO8859-1',\n'iso-8859-1':'en_US.ISO8859-1',\n'iso-8859-15':'en_US.ISO8859-15',\n'iso8859-1':'en_US.ISO8859-1',\n'iso8859-15':'en_US.ISO8859-15',\n'iso_8859_1':'en_US.ISO8859-1',\n'iso_8859_15':'en_US.ISO8859-15',\n'it':'it_IT.ISO8859-1',\n'it_ch':'it_CH.ISO8859-1',\n'it_it':'it_IT.ISO8859-1',\n'italian':'it_IT.ISO8859-1',\n'iu':'iu_CA.NUNACOM-8',\n'iu_ca':'iu_CA.NUNACOM-8',\n'iu_ca.nunacom8':'iu_CA.NUNACOM-8',\n'iw':'he_IL.ISO8859-8',\n'iw_il':'he_IL.ISO8859-8',\n'iw_il.utf8':'iw_IL.UTF-8',\n'ja':'ja_JP.eucJP',\n'ja_jp':'ja_JP.eucJP',\n'ja_jp.euc':'ja_JP.eucJP',\n'ja_jp.mscode':'ja_JP.SJIS',\n'ja_jp.pck':'ja_JP.SJIS',\n'japan':'ja_JP.eucJP',\n'japanese':'ja_JP.eucJP',\n'japanese-euc':'ja_JP.eucJP',\n'japanese.euc':'ja_JP.eucJP',\n'jp_jp':'ja_JP.eucJP',\n'ka':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge.georgianacademy':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge.georgianps':'ka_GE.GEORGIAN-PS',\n'ka_ge.georgianrs':'ka_GE.GEORGIAN-ACADEMY',\n'kk_kz':'kk_KZ.RK1048',\n'kl':'kl_GL.ISO8859-1',\n'kl_gl':'kl_GL.ISO8859-1',\n'km_kh':'km_KH.UTF-8',\n'kn':'kn_IN.UTF-8',\n'kn_in':'kn_IN.UTF-8',\n'ko':'ko_KR.eucKR',\n'ko_kr':'ko_KR.eucKR',\n'ko_kr.euc':'ko_KR.eucKR',\n'kok_in':'kok_IN.UTF-8',\n'korean':'ko_KR.eucKR',\n'korean.euc':'ko_KR.eucKR',\n'ks':'ks_IN.UTF-8',\n'ks_in':'ks_IN.UTF-8',\n'ks_in@devanagari.utf8':'ks_IN.UTF-8@devanagari',\n'ku_tr':'ku_TR.ISO8859-9',\n'kw':'kw_GB.ISO8859-1',\n'kw_gb':'kw_GB.ISO8859-1',\n'ky':'ky_KG.UTF-8',\n'ky_kg':'ky_KG.UTF-8',\n'lb_lu':'lb_LU.UTF-8',\n'lg_ug':'lg_UG.ISO8859-10',\n'li_be':'li_BE.UTF-8',\n'li_nl':'li_NL.UTF-8',\n'lij_it':'lij_IT.UTF-8',\n'lithuanian':'lt_LT.ISO8859-13',\n'lo':'lo_LA.MULELAO-1',\n'lo_la':'lo_LA.MULELAO-1',\n'lo_la.cp1133':'lo_LA.IBM-CP1133',\n'lo_la.ibmcp1133':'lo_LA.IBM-CP1133',\n'lo_la.mulelao1':'lo_LA.MULELAO-1',\n'lt':'lt_LT.ISO8859-13',\n'lt_lt':'lt_LT.ISO8859-13',\n'lv':'lv_LV.ISO8859-13',\n'lv_lv':'lv_LV.ISO8859-13',\n'mag_in':'mag_IN.UTF-8',\n'mai':'mai_IN.UTF-8',\n'mai_in':'mai_IN.UTF-8',\n'mg_mg':'mg_MG.ISO8859-15',\n'mhr_ru':'mhr_RU.UTF-8',\n'mi':'mi_NZ.ISO8859-1',\n'mi_nz':'mi_NZ.ISO8859-1',\n'mk':'mk_MK.ISO8859-5',\n'mk_mk':'mk_MK.ISO8859-5',\n'ml':'ml_IN.UTF-8',\n'ml_in':'ml_IN.UTF-8',\n'mn_mn':'mn_MN.UTF-8',\n'mni_in':'mni_IN.UTF-8',\n'mr':'mr_IN.UTF-8',\n'mr_in':'mr_IN.UTF-8',\n'ms':'ms_MY.ISO8859-1',\n'ms_my':'ms_MY.ISO8859-1',\n'mt':'mt_MT.ISO8859-3',\n'mt_mt':'mt_MT.ISO8859-3',\n'my_mm':'my_MM.UTF-8',\n'nan_tw@latin':'nan_TW.UTF-8@latin',\n'nb':'nb_NO.ISO8859-1',\n'nb_no':'nb_NO.ISO8859-1',\n'nds_de':'nds_DE.UTF-8',\n'nds_nl':'nds_NL.UTF-8',\n'ne_np':'ne_NP.UTF-8',\n'nhn_mx':'nhn_MX.UTF-8',\n'niu_nu':'niu_NU.UTF-8',\n'niu_nz':'niu_NZ.UTF-8',\n'nl':'nl_NL.ISO8859-1',\n'nl_aw':'nl_AW.UTF-8',\n'nl_be':'nl_BE.ISO8859-1',\n'nl_nl':'nl_NL.ISO8859-1',\n'nn':'nn_NO.ISO8859-1',\n'nn_no':'nn_NO.ISO8859-1',\n'no':'no_NO.ISO8859-1',\n'no@nynorsk':'ny_NO.ISO8859-1',\n'no_no':'no_NO.ISO8859-1',\n'no_no.iso88591@bokmal':'no_NO.ISO8859-1',\n'no_no.iso88591@nynorsk':'no_NO.ISO8859-1',\n'norwegian':'no_NO.ISO8859-1',\n'nr':'nr_ZA.ISO8859-1',\n'nr_za':'nr_ZA.ISO8859-1',\n'nso':'nso_ZA.ISO8859-15',\n'nso_za':'nso_ZA.ISO8859-15',\n'ny':'ny_NO.ISO8859-1',\n'ny_no':'ny_NO.ISO8859-1',\n'nynorsk':'nn_NO.ISO8859-1',\n'oc':'oc_FR.ISO8859-1',\n'oc_fr':'oc_FR.ISO8859-1',\n'om_et':'om_ET.UTF-8',\n'om_ke':'om_KE.ISO8859-1',\n'or':'or_IN.UTF-8',\n'or_in':'or_IN.UTF-8',\n'os_ru':'os_RU.UTF-8',\n'pa':'pa_IN.UTF-8',\n'pa_in':'pa_IN.UTF-8',\n'pa_pk':'pa_PK.UTF-8',\n'pap_an':'pap_AN.UTF-8',\n'pd':'pd_US.ISO8859-1',\n'pd_de':'pd_DE.ISO8859-1',\n'pd_us':'pd_US.ISO8859-1',\n'ph':'ph_PH.ISO8859-1',\n'ph_ph':'ph_PH.ISO8859-1',\n'pl':'pl_PL.ISO8859-2',\n'pl_pl':'pl_PL.ISO8859-2',\n'polish':'pl_PL.ISO8859-2',\n'portuguese':'pt_PT.ISO8859-1',\n'portuguese_brazil':'pt_BR.ISO8859-1',\n'posix':'C',\n'posix-utf2':'C',\n'pp':'pp_AN.ISO8859-1',\n'pp_an':'pp_AN.ISO8859-1',\n'ps_af':'ps_AF.UTF-8',\n'pt':'pt_PT.ISO8859-1',\n'pt_br':'pt_BR.ISO8859-1',\n'pt_pt':'pt_PT.ISO8859-1',\n'ro':'ro_RO.ISO8859-2',\n'ro_ro':'ro_RO.ISO8859-2',\n'romanian':'ro_RO.ISO8859-2',\n'ru':'ru_RU.UTF-8',\n'ru_ru':'ru_RU.UTF-8',\n'ru_ua':'ru_UA.KOI8-U',\n'rumanian':'ro_RO.ISO8859-2',\n'russian':'ru_RU.ISO8859-5',\n'rw':'rw_RW.ISO8859-1',\n'rw_rw':'rw_RW.ISO8859-1',\n'sa_in':'sa_IN.UTF-8',\n'sat_in':'sat_IN.UTF-8',\n'sc_it':'sc_IT.UTF-8',\n'sd':'sd_IN.UTF-8',\n'sd_in':'sd_IN.UTF-8',\n'sd_in@devanagari.utf8':'sd_IN.UTF-8@devanagari',\n'sd_pk':'sd_PK.UTF-8',\n'se_no':'se_NO.UTF-8',\n'serbocroatian':'sr_RS.UTF-8@latin',\n'sh':'sr_RS.UTF-8@latin',\n'sh_ba.iso88592@bosnia':'sr_CS.ISO8859-2',\n'sh_hr':'sh_HR.ISO8859-2',\n'sh_hr.iso88592':'hr_HR.ISO8859-2',\n'sh_sp':'sr_CS.ISO8859-2',\n'sh_yu':'sr_RS.UTF-8@latin',\n'shs_ca':'shs_CA.UTF-8',\n'si':'si_LK.UTF-8',\n'si_lk':'si_LK.UTF-8',\n'sid_et':'sid_ET.UTF-8',\n'sinhala':'si_LK.UTF-8',\n'sk':'sk_SK.ISO8859-2',\n'sk_sk':'sk_SK.ISO8859-2',\n'sl':'sl_SI.ISO8859-2',\n'sl_cs':'sl_CS.ISO8859-2',\n'sl_si':'sl_SI.ISO8859-2',\n'slovak':'sk_SK.ISO8859-2',\n'slovene':'sl_SI.ISO8859-2',\n'slovenian':'sl_SI.ISO8859-2',\n'so_dj':'so_DJ.ISO8859-1',\n'so_et':'so_ET.UTF-8',\n'so_ke':'so_KE.ISO8859-1',\n'so_so':'so_SO.ISO8859-1',\n'sp':'sr_CS.ISO8859-5',\n'sp_yu':'sr_CS.ISO8859-5',\n'spanish':'es_ES.ISO8859-1',\n'spanish_spain':'es_ES.ISO8859-1',\n'sq':'sq_AL.ISO8859-2',\n'sq_al':'sq_AL.ISO8859-2',\n'sq_mk':'sq_MK.UTF-8',\n'sr':'sr_RS.UTF-8',\n'sr@cyrillic':'sr_RS.UTF-8',\n'sr@latn':'sr_CS.UTF-8@latin',\n'sr_cs':'sr_CS.UTF-8',\n'sr_cs.iso88592@latn':'sr_CS.ISO8859-2',\n'sr_cs@latn':'sr_CS.UTF-8@latin',\n'sr_me':'sr_ME.UTF-8',\n'sr_rs':'sr_RS.UTF-8',\n'sr_rs@latn':'sr_RS.UTF-8@latin',\n'sr_sp':'sr_CS.ISO8859-2',\n'sr_yu':'sr_RS.UTF-8@latin',\n'sr_yu.cp1251@cyrillic':'sr_CS.CP1251',\n'sr_yu.iso88592':'sr_CS.ISO8859-2',\n'sr_yu.iso88595':'sr_CS.ISO8859-5',\n'sr_yu.iso88595@cyrillic':'sr_CS.ISO8859-5',\n'sr_yu.microsoftcp1251@cyrillic':'sr_CS.CP1251',\n'sr_yu.utf8':'sr_RS.UTF-8',\n'sr_yu.utf8@cyrillic':'sr_RS.UTF-8',\n'sr_yu@cyrillic':'sr_RS.UTF-8',\n'ss':'ss_ZA.ISO8859-1',\n'ss_za':'ss_ZA.ISO8859-1',\n'st':'st_ZA.ISO8859-1',\n'st_za':'st_ZA.ISO8859-1',\n'sv':'sv_SE.ISO8859-1',\n'sv_fi':'sv_FI.ISO8859-1',\n'sv_se':'sv_SE.ISO8859-1',\n'sw_ke':'sw_KE.UTF-8',\n'sw_tz':'sw_TZ.UTF-8',\n'swedish':'sv_SE.ISO8859-1',\n'szl_pl':'szl_PL.UTF-8',\n'ta':'ta_IN.TSCII-0',\n'ta_in':'ta_IN.TSCII-0',\n'ta_in.tscii':'ta_IN.TSCII-0',\n'ta_in.tscii0':'ta_IN.TSCII-0',\n'ta_lk':'ta_LK.UTF-8',\n'te':'te_IN.UTF-8',\n'te_in':'te_IN.UTF-8',\n'tg':'tg_TJ.KOI8-C',\n'tg_tj':'tg_TJ.KOI8-C',\n'th':'th_TH.ISO8859-11',\n'th_th':'th_TH.ISO8859-11',\n'th_th.tactis':'th_TH.TIS620',\n'th_th.tis620':'th_TH.TIS620',\n'thai':'th_TH.ISO8859-11',\n'ti_er':'ti_ER.UTF-8',\n'ti_et':'ti_ET.UTF-8',\n'tig_er':'tig_ER.UTF-8',\n'tk_tm':'tk_TM.UTF-8',\n'tl':'tl_PH.ISO8859-1',\n'tl_ph':'tl_PH.ISO8859-1',\n'tn':'tn_ZA.ISO8859-15',\n'tn_za':'tn_ZA.ISO8859-15',\n'tr':'tr_TR.ISO8859-9',\n'tr_cy':'tr_CY.ISO8859-9',\n'tr_tr':'tr_TR.ISO8859-9',\n'ts':'ts_ZA.ISO8859-1',\n'ts_za':'ts_ZA.ISO8859-1',\n'tt':'tt_RU.TATAR-CYR',\n'tt_ru':'tt_RU.TATAR-CYR',\n'tt_ru.tatarcyr':'tt_RU.TATAR-CYR',\n'tt_ru@iqtelif':'tt_RU.UTF-8@iqtelif',\n'turkish':'tr_TR.ISO8859-9',\n'ug_cn':'ug_CN.UTF-8',\n'uk':'uk_UA.KOI8-U',\n'uk_ua':'uk_UA.KOI8-U',\n'univ':'en_US.utf',\n'universal':'en_US.utf',\n'universal.utf8@ucs4':'en_US.UTF-8',\n'unm_us':'unm_US.UTF-8',\n'ur':'ur_PK.CP1256',\n'ur_in':'ur_IN.UTF-8',\n'ur_pk':'ur_PK.CP1256',\n'uz':'uz_UZ.UTF-8',\n'uz_uz':'uz_UZ.UTF-8',\n'uz_uz@cyrillic':'uz_UZ.UTF-8',\n've':'ve_ZA.UTF-8',\n've_za':'ve_ZA.UTF-8',\n'vi':'vi_VN.TCVN',\n'vi_vn':'vi_VN.TCVN',\n'vi_vn.tcvn':'vi_VN.TCVN',\n'vi_vn.tcvn5712':'vi_VN.TCVN',\n'vi_vn.viscii':'vi_VN.VISCII',\n'vi_vn.viscii111':'vi_VN.VISCII',\n'wa':'wa_BE.ISO8859-1',\n'wa_be':'wa_BE.ISO8859-1',\n'wae_ch':'wae_CH.UTF-8',\n'wal_et':'wal_ET.UTF-8',\n'wo_sn':'wo_SN.UTF-8',\n'xh':'xh_ZA.ISO8859-1',\n'xh_za':'xh_ZA.ISO8859-1',\n'yi':'yi_US.CP1255',\n'yi_us':'yi_US.CP1255',\n'yo_ng':'yo_NG.UTF-8',\n'yue_hk':'yue_HK.UTF-8',\n'zh':'zh_CN.eucCN',\n'zh_cn':'zh_CN.gb2312',\n'zh_cn.big5':'zh_TW.big5',\n'zh_cn.euc':'zh_CN.eucCN',\n'zh_hk':'zh_HK.big5hkscs',\n'zh_hk.big5hk':'zh_HK.big5hkscs',\n'zh_sg':'zh_SG.GB2312',\n'zh_sg.gbk':'zh_SG.GBK',\n'zh_tw':'zh_TW.big5',\n'zh_tw.euc':'zh_TW.eucTW',\n'zh_tw.euctw':'zh_TW.eucTW',\n'zu':'zu_ZA.ISO8859-1',\n'zu_za':'zu_ZA.ISO8859-1',\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nwindows_locale={\n0x0436:\"af_ZA\",\n0x041c:\"sq_AL\",\n0x0484:\"gsw_FR\",\n0x045e:\"am_ET\",\n0x0401:\"ar_SA\",\n0x0801:\"ar_IQ\",\n0x0c01:\"ar_EG\",\n0x1001:\"ar_LY\",\n0x1401:\"ar_DZ\",\n0x1801:\"ar_MA\",\n0x1c01:\"ar_TN\",\n0x2001:\"ar_OM\",\n0x2401:\"ar_YE\",\n0x2801:\"ar_SY\",\n0x2c01:\"ar_JO\",\n0x3001:\"ar_LB\",\n0x3401:\"ar_KW\",\n0x3801:\"ar_AE\",\n0x3c01:\"ar_BH\",\n0x4001:\"ar_QA\",\n0x042b:\"hy_AM\",\n0x044d:\"as_IN\",\n0x042c:\"az_AZ\",\n0x082c:\"az_AZ\",\n0x046d:\"ba_RU\",\n0x042d:\"eu_ES\",\n0x0423:\"be_BY\",\n0x0445:\"bn_IN\",\n0x201a:\"bs_BA\",\n0x141a:\"bs_BA\",\n0x047e:\"br_FR\",\n0x0402:\"bg_BG\",\n\n0x0403:\"ca_ES\",\n0x0004:\"zh_CHS\",\n0x0404:\"zh_TW\",\n0x0804:\"zh_CN\",\n0x0c04:\"zh_HK\",\n0x1004:\"zh_SG\",\n0x1404:\"zh_MO\",\n0x7c04:\"zh_CHT\",\n0x0483:\"co_FR\",\n0x041a:\"hr_HR\",\n0x101a:\"hr_BA\",\n0x0405:\"cs_CZ\",\n0x0406:\"da_DK\",\n0x048c:\"gbz_AF\",\n0x0465:\"div_MV\",\n0x0413:\"nl_NL\",\n0x0813:\"nl_BE\",\n0x0409:\"en_US\",\n0x0809:\"en_GB\",\n0x0c09:\"en_AU\",\n0x1009:\"en_CA\",\n0x1409:\"en_NZ\",\n0x1809:\"en_IE\",\n0x1c09:\"en_ZA\",\n0x2009:\"en_JA\",\n0x2409:\"en_CB\",\n0x2809:\"en_BZ\",\n0x2c09:\"en_TT\",\n0x3009:\"en_ZW\",\n0x3409:\"en_PH\",\n0x4009:\"en_IN\",\n0x4409:\"en_MY\",\n0x4809:\"en_IN\",\n0x0425:\"et_EE\",\n0x0438:\"fo_FO\",\n0x0464:\"fil_PH\",\n0x040b:\"fi_FI\",\n0x040c:\"fr_FR\",\n0x080c:\"fr_BE\",\n0x0c0c:\"fr_CA\",\n0x100c:\"fr_CH\",\n0x140c:\"fr_LU\",\n0x180c:\"fr_MC\",\n0x0462:\"fy_NL\",\n0x0456:\"gl_ES\",\n0x0437:\"ka_GE\",\n0x0407:\"de_DE\",\n0x0807:\"de_CH\",\n0x0c07:\"de_AT\",\n0x1007:\"de_LU\",\n0x1407:\"de_LI\",\n0x0408:\"el_GR\",\n0x046f:\"kl_GL\",\n0x0447:\"gu_IN\",\n0x0468:\"ha_NG\",\n0x040d:\"he_IL\",\n0x0439:\"hi_IN\",\n0x040e:\"hu_HU\",\n0x040f:\"is_IS\",\n0x0421:\"id_ID\",\n0x045d:\"iu_CA\",\n0x085d:\"iu_CA\",\n0x083c:\"ga_IE\",\n0x0410:\"it_IT\",\n0x0810:\"it_CH\",\n0x0411:\"ja_JP\",\n0x044b:\"kn_IN\",\n0x043f:\"kk_KZ\",\n0x0453:\"kh_KH\",\n0x0486:\"qut_GT\",\n0x0487:\"rw_RW\",\n0x0457:\"kok_IN\",\n0x0412:\"ko_KR\",\n0x0440:\"ky_KG\",\n0x0454:\"lo_LA\",\n0x0426:\"lv_LV\",\n0x0427:\"lt_LT\",\n0x082e:\"dsb_DE\",\n0x046e:\"lb_LU\",\n0x042f:\"mk_MK\",\n0x043e:\"ms_MY\",\n0x083e:\"ms_BN\",\n0x044c:\"ml_IN\",\n0x043a:\"mt_MT\",\n0x0481:\"mi_NZ\",\n0x047a:\"arn_CL\",\n0x044e:\"mr_IN\",\n0x047c:\"moh_CA\",\n0x0450:\"mn_MN\",\n0x0850:\"mn_CN\",\n0x0461:\"ne_NP\",\n0x0414:\"nb_NO\",\n0x0814:\"nn_NO\",\n0x0482:\"oc_FR\",\n0x0448:\"or_IN\",\n0x0463:\"ps_AF\",\n0x0429:\"fa_IR\",\n0x0415:\"pl_PL\",\n0x0416:\"pt_BR\",\n0x0816:\"pt_PT\",\n0x0446:\"pa_IN\",\n0x046b:\"quz_BO\",\n0x086b:\"quz_EC\",\n0x0c6b:\"quz_PE\",\n0x0418:\"ro_RO\",\n0x0417:\"rm_CH\",\n0x0419:\"ru_RU\",\n0x243b:\"smn_FI\",\n0x103b:\"smj_NO\",\n0x143b:\"smj_SE\",\n0x043b:\"se_NO\",\n0x083b:\"se_SE\",\n0x0c3b:\"se_FI\",\n0x203b:\"sms_FI\",\n0x183b:\"sma_NO\",\n0x1c3b:\"sma_SE\",\n0x044f:\"sa_IN\",\n0x0c1a:\"sr_SP\",\n0x1c1a:\"sr_BA\",\n0x081a:\"sr_SP\",\n0x181a:\"sr_BA\",\n0x045b:\"si_LK\",\n0x046c:\"ns_ZA\",\n0x0432:\"tn_ZA\",\n0x041b:\"sk_SK\",\n0x0424:\"sl_SI\",\n0x040a:\"es_ES\",\n0x080a:\"es_MX\",\n0x0c0a:\"es_ES\",\n0x100a:\"es_GT\",\n0x140a:\"es_CR\",\n0x180a:\"es_PA\",\n0x1c0a:\"es_DO\",\n0x200a:\"es_VE\",\n0x240a:\"es_CO\",\n0x280a:\"es_PE\",\n0x2c0a:\"es_AR\",\n0x300a:\"es_EC\",\n0x340a:\"es_CL\",\n0x380a:\"es_UR\",\n0x3c0a:\"es_PY\",\n0x400a:\"es_BO\",\n0x440a:\"es_SV\",\n0x480a:\"es_HN\",\n0x4c0a:\"es_NI\",\n0x500a:\"es_PR\",\n0x540a:\"es_US\",\n\n0x0441:\"sw_KE\",\n0x041d:\"sv_SE\",\n0x081d:\"sv_FI\",\n0x045a:\"syr_SY\",\n0x0428:\"tg_TJ\",\n0x085f:\"tmz_DZ\",\n0x0449:\"ta_IN\",\n0x0444:\"tt_RU\",\n0x044a:\"te_IN\",\n0x041e:\"th_TH\",\n0x0851:\"bo_BT\",\n0x0451:\"bo_CN\",\n0x041f:\"tr_TR\",\n0x0442:\"tk_TM\",\n0x0480:\"ug_CN\",\n0x0422:\"uk_UA\",\n0x042e:\"wen_DE\",\n0x0420:\"ur_PK\",\n0x0820:\"ur_IN\",\n0x0443:\"uz_UZ\",\n0x0843:\"uz_UZ\",\n0x042a:\"vi_VN\",\n0x0452:\"cy_GB\",\n0x0488:\"wo_SN\",\n0x0434:\"xh_ZA\",\n0x0485:\"sah_RU\",\n0x0478:\"ii_CN\",\n0x046a:\"yo_NG\",\n0x0435:\"zu_ZA\",\n}\n\ndef _print_locale():\n\n ''\n \n categories={}\n def _init_categories(categories=categories):\n  for k,v in globals().items():\n   if k[:3]=='LC_':\n    categories[k]=v\n _init_categories()\n del categories['LC_ALL']\n \n print('Locale defaults as determined by getdefaultlocale():')\n print('-'*72)\n lang,enc=getdefaultlocale()\n print('Language: ',lang or'(undefined)')\n print('Encoding: ',enc or'(undefined)')\n print()\n \n print('Locale settings on startup:')\n print('-'*72)\n for name,category in categories.items():\n  print(name,'...')\n  lang,enc=getlocale(category)\n  print('   Language: ',lang or'(undefined)')\n  print('   Encoding: ',enc or'(undefined)')\n  print()\n  \n print()\n print('Locale settings after calling resetlocale():')\n print('-'*72)\n resetlocale()\n for name,category in categories.items():\n  print(name,'...')\n  lang,enc=getlocale(category)\n  print('   Language: ',lang or'(undefined)')\n  print('   Encoding: ',enc or'(undefined)')\n  print()\n  \n try :\n  setlocale(LC_ALL,\"\")\n except :\n  print('NOTE:')\n  print('setlocale(LC_ALL, \"\") does not support the default locale')\n  print('given in the OS environment variables.')\n else :\n  print()\n  print('Locale settings after calling setlocale(LC_ALL, \"\"):')\n  print('-'*72)\n  for name,category in categories.items():\n   print(name,'...')\n   lang,enc=getlocale(category)\n   print('   Language: ',lang or'(undefined)')\n   print('   Encoding: ',enc or'(undefined)')\n   print()\n   \n   \n   \ntry :\n LC_MESSAGES\nexcept NameError:\n pass\nelse :\n __all__.append(\"LC_MESSAGES\")\n \nif __name__ =='__main__':\n print('Locale aliasing:')\n print()\n _print_locale()\n print()\n print('Number formatting:')\n print()\n _test()\n"], "xml.etree.cElementTree": [".py", "\n\nfrom xml.etree.ElementTree import *\n"], "_abcoll": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) for collections, according to PEP 3119.\n\nDON'T USE THIS MODULE DIRECTLY!  The classes here should be imported\nvia collections; they are defined here only to alleviate certain\nbootstrapping issues.  Unit tests are in test_collections.\n\"\"\"\n\nfrom abc import ABCMeta,abstractmethod\nimport sys\n\n__all__=[\"Hashable\",\"Iterable\",\"Iterator\",\n\"Sized\",\"Container\",\"Callable\",\n\"Set\",\"MutableSet\",\n\"Mapping\",\"MutableMapping\",\n\"MappingView\",\"KeysView\",\"ItemsView\",\"ValuesView\",\n\"Sequence\",\"MutableSequence\",\n\"ByteString\",\n]\n\n\"\"\"\n### collection related types which are not exposed through builtin ###\n## iterators ##\n#fixme brython\n#bytes_iterator = type(iter(b''))\nbytes_iterator = type(iter(''))\n#fixme brython\n#bytearray_iterator = type(iter(bytearray()))\n#callable_iterator = ???\ndict_keyiterator = type(iter({}.keys()))\ndict_valueiterator = type(iter({}.values()))\ndict_itemiterator = type(iter({}.items()))\nlist_iterator = type(iter([]))\nlist_reverseiterator = type(iter(reversed([])))\nrange_iterator = type(iter(range(0)))\nset_iterator = type(iter(set()))\nstr_iterator = type(iter(\"\"))\ntuple_iterator = type(iter(()))\nzip_iterator = type(iter(zip()))\n## views ##\ndict_keys = type({}.keys())\ndict_values = type({}.values())\ndict_items = type({}.items())\n## misc ##\ndict_proxy = type(type.__dict__)\n\"\"\"\n\ndef abstractmethod(self):\n return self\n \n \n \n \n \nclass Iterable:\n\n @abstractmethod\n def __iter__(self):\n  while False :\n   yield None\n   \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Iterable:\n   if any(\"__iter__\"in B.__dict__ for B in C.__mro__):\n    return True\n  return NotImplemented\n  \n  \n  \nclass Sized:\n\n @abstractmethod\n def __len__(self):\n  return 0\n  \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Sized:\n   if any(\"__len__\"in B.__dict__ for B in C.__mro__):\n    return True\n  return NotImplemented\n  \n  \n  \nclass Container:\n\n @abstractmethod\n def __contains__(self,x):\n  return False\n  \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Container:\n   if any(\"__contains__\"in B.__dict__ for B in C.__mro__):\n    return True\n  return NotImplemented\n  \n  \n  \n  \nclass Mapping(Sized,Iterable,Container):\n\n @abstractmethod\n def __getitem__(self,key):\n  raise KeyError\n  \n def get(self,key,default=None ):\n  try :\n   return self[key]\n  except KeyError:\n   return default\n   \n def __contains__(self,key):\n  try :\n   self[key]\n  except KeyError:\n   return False\n  else :\n   return True\n   \n def keys(self):\n  return KeysView(self)\n  \n def items(self):\n  return ItemsView(self)\n  \n def values(self):\n  return ValuesView(self)\n  \n def __eq__(self,other):\n  if not isinstance(other,Mapping):\n   return NotImplemented\n  return dict(self.items())==dict(other.items())\n  \n def __ne__(self,other):\n  return not (self ==other)\n  \n  \nclass MutableMapping(Mapping):\n\n @abstractmethod\n def __setitem__(self,key,value):\n  raise KeyError\n  \n @abstractmethod\n def __delitem__(self,key):\n  raise KeyError\n  \n __marker=object()\n \n def pop(self,key,default=__marker):\n  try :\n   value=self[key]\n  except KeyError:\n   if default is self.__marker:\n    raise\n   return default\n  else :\n   del self[key]\n   return value\n   \n def popitem(self):\n  try :\n   key=next(iter(self))\n  except StopIteration:\n   raise KeyError\n  value=self[key]\n  del self[key]\n  return key,value\n  \n def clear(self):\n  try :\n   while True :\n    self.popitem()\n  except KeyError:\n   pass\n   \n def update(*args,**kwds):\n  if len(args)>2:\n   raise TypeError(\"update() takes at most 2 positional \"\n   \"arguments ({} given)\".format(len(args)))\n  elif not args:\n   raise TypeError(\"update() takes at least 1 argument (0 given)\")\n  self=args[0]\n  other=args[1]if len(args)>=2 else ()\n  \n  if isinstance(other,Mapping):\n   for key in other:\n    self[key]=other[key]\n  elif hasattr(other,\"keys\"):\n   for key in other.keys():\n    self[key]=other[key]\n  else :\n   for key,value in other:\n    self[key]=value\n  for key,value in kwds.items():\n   self[key]=value\n   \n def setdefault(self,key,default=None ):\n  try :\n   return self[key]\n  except KeyError:\n   self[key]=default\n  return default\n  \n  \n"], "cmd": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport string,sys\n\n__all__=[\"Cmd\"]\n\nPROMPT='(Cmd) '\nIDENTCHARS=string.ascii_letters+string.digits+'_'\n\nclass Cmd:\n ''\n\n\n\n\n\n\n\n\n\n \n prompt=PROMPT\n identchars=IDENTCHARS\n ruler='='\n lastcmd=''\n intro=None\n doc_leader=\"\"\n doc_header=\"Documented commands (type help <topic>):\"\n misc_header=\"Miscellaneous help topics:\"\n undoc_header=\"Undocumented commands:\"\n nohelp=\"*** No help on %s\"\n use_rawinput=1\n \n def __init__(self,completekey='tab',stdin=None ,stdout=None ):\n  ''\n\n\n\n\n\n\n\n\n  \n  if stdin is not None :\n   self.stdin=stdin\n  else :\n   self.stdin=sys.stdin\n  if stdout is not None :\n   self.stdout=stdout\n  else :\n   self.stdout=sys.stdout\n  self.cmdqueue=[]\n  self.completekey=completekey\n  \n def cmdloop(self,intro=None ):\n  ''\n\n\n\n  \n  \n  self.preloop()\n  if self.use_rawinput and self.completekey:\n   try :\n    import readline\n    self.old_completer=readline.get_completer()\n    readline.set_completer(self.complete)\n    readline.parse_and_bind(self.completekey+\": complete\")\n   except ImportError:\n    pass\n  try :\n   if intro is not None :\n    self.intro=intro\n   if self.intro:\n    self.stdout.write(str(self.intro)+\"\\n\")\n   stop=None\n   while not stop:\n    if self.cmdqueue:\n     line=self.cmdqueue.pop(0)\n    else :\n     if self.use_rawinput:\n      try :\n       line=input(self.prompt)\n      except EOFError:\n       line='EOF'\n     else :\n      self.stdout.write(self.prompt)\n      self.stdout.flush()\n      line=self.stdin.readline()\n      if not len(line):\n       line='EOF'\n      else :\n       line=line.rstrip('\\r\\n')\n    line=self.precmd(line)\n    stop=self.onecmd(line)\n    stop=self.postcmd(stop,line)\n   self.postloop()\n  finally :\n   if self.use_rawinput and self.completekey:\n    try :\n     import readline\n     readline.set_completer(self.old_completer)\n    except ImportError:\n     pass\n     \n     \n def precmd(self,line):\n  ''\n\n\n  \n  return line\n  \n def postcmd(self,stop,line):\n  ''\n  return stop\n  \n def preloop(self):\n  ''\n  pass\n  \n def postloop(self):\n  ''\n\n\n  \n  pass\n  \n def parseline(self,line):\n  ''\n\n\n  \n  line=line.strip()\n  if not line:\n   return None ,None ,line\n  elif line[0]=='?':\n   line='help '+line[1:]\n  elif line[0]=='!':\n   if hasattr(self,'do_shell'):\n    line='shell '+line[1:]\n   else :\n    return None ,None ,line\n  i,n=0,len(line)\n  while i <n and line[i]in self.identchars:i=i+1\n  cmd,arg=line[:i],line[i:].strip()\n  return cmd,arg,line\n  \n def onecmd(self,line):\n  ''\n\n\n\n\n\n\n\n  \n  cmd,arg,line=self.parseline(line)\n  if not line:\n   return self.emptyline()\n  if cmd is None :\n   return self.default(line)\n  self.lastcmd=line\n  if line =='EOF':\n   self.lastcmd=''\n  if cmd =='':\n   return self.default(line)\n  else :\n   try :\n    func=getattr(self,'do_'+cmd)\n   except AttributeError:\n    return self.default(line)\n   return func(arg)\n   \n def emptyline(self):\n  ''\n\n\n\n\n  \n  if self.lastcmd:\n   return self.onecmd(self.lastcmd)\n   \n def default(self,line):\n  ''\n\n\n\n\n  \n  self.stdout.write('*** Unknown syntax: %s\\n'%line)\n  \n def completedefault(self,*ignored):\n  ''\n\n\n\n\n  \n  return []\n  \n def completenames(self,text,*ignored):\n  dotext='do_'+text\n  return [a[3:]for a in self.get_names()if a.startswith(dotext)]\n  \n def complete(self,text,state):\n  ''\n\n\n\n  \n  if state ==0:\n   import readline\n   origline=readline.get_line_buffer()\n   line=origline.lstrip()\n   stripped=len(origline)-len(line)\n   begidx=readline.get_begidx()-stripped\n   endidx=readline.get_endidx()-stripped\n   if begidx >0:\n    cmd,args,foo=self.parseline(line)\n    if cmd =='':\n     compfunc=self.completedefault\n    else :\n     try :\n      compfunc=getattr(self,'complete_'+cmd)\n     except AttributeError:\n      compfunc=self.completedefault\n   else :\n    compfunc=self.completenames\n   self.completion_matches=compfunc(text,line,begidx,endidx)\n  try :\n   return self.completion_matches[state]\n  except IndexError:\n   return None\n   \n def get_names(self):\n \n \n  return dir(self.__class__)\n  \n def complete_help(self,*args):\n  commands=set(self.completenames(*args))\n  topics=set(a[5:]for a in self.get_names()\n  if a.startswith('help_'+args[0]))\n  return list(commands |topics)\n  \n def do_help(self,arg):\n  ''\n  if arg:\n  \n   try :\n    func=getattr(self,'help_'+arg)\n   except AttributeError:\n    try :\n     doc=getattr(self,'do_'+arg).__doc__\n     if doc:\n      self.stdout.write(\"%s\\n\"%str(doc))\n      return\n    except AttributeError:\n     pass\n    self.stdout.write(\"%s\\n\"%str(self.nohelp %(arg,)))\n    return\n   func()\n  else :\n   names=self.get_names()\n   cmds_doc=[]\n   cmds_undoc=[]\n   help={}\n   for name in names:\n    if name[:5]=='help_':\n     help[name[5:]]=1\n   names.sort()\n   \n   prevname=''\n   for name in names:\n    if name[:3]=='do_':\n     if name ==prevname:\n      continue\n     prevname=name\n     cmd=name[3:]\n     if cmd in help:\n      cmds_doc.append(cmd)\n      del help[cmd]\n     elif getattr(self,name).__doc__:\n      cmds_doc.append(cmd)\n     else :\n      cmds_undoc.append(cmd)\n   self.stdout.write(\"%s\\n\"%str(self.doc_leader))\n   self.print_topics(self.doc_header,cmds_doc,15,80)\n   self.print_topics(self.misc_header,list(help.keys()),15,80)\n   self.print_topics(self.undoc_header,cmds_undoc,15,80)\n   \n def print_topics(self,header,cmds,cmdlen,maxcol):\n  if cmds:\n   self.stdout.write(\"%s\\n\"%str(header))\n   if self.ruler:\n    self.stdout.write(\"%s\\n\"%str(self.ruler *len(header)))\n   self.columnize(cmds,maxcol -1)\n   self.stdout.write(\"\\n\")\n   \n def columnize(self,list,displaywidth=80):\n  ''\n\n\n\n  \n  if not list:\n   self.stdout.write(\"<empty>\\n\")\n   return\n   \n  nonstrings=[i for i in range(len(list))\n  if not isinstance(list[i],str)]\n  if nonstrings:\n   raise TypeError(\"list[i] not a string for i in %s\"\n   %\", \".join(map(str,nonstrings)))\n  size=len(list)\n  if size ==1:\n   self.stdout.write('%s\\n'%str(list[0]))\n   return\n   \n  for nrows in range(1,len(list)):\n   ncols=(size+nrows -1)//nrows\n   colwidths=[]\n   totwidth=-2\n   for col in range(ncols):\n    colwidth=0\n    for row in range(nrows):\n     i=row+nrows *col\n     if i >=size:\n      break\n     x=list[i]\n     colwidth=max(colwidth,len(x))\n    colwidths.append(colwidth)\n    totwidth +=colwidth+2\n    if totwidth >displaywidth:\n     break\n   if totwidth <=displaywidth:\n    break\n  else :\n   nrows=len(list)\n   ncols=1\n   colwidths=[0]\n  for row in range(nrows):\n   texts=[]\n   for col in range(ncols):\n    i=row+nrows *col\n    if i >=size:\n     x=\"\"\n    else :\n     x=list[i]\n    texts.append(x)\n   while texts and not texts[-1]:\n    del texts[-1]\n   for col in range(len(texts)):\n    texts[col]=texts[col].ljust(colwidths[col])\n   self.stdout.write(\"%s\\n\"%str(\"  \".join(texts)))\n"], "encodings.cp1252": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1252',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u0152'\n'\\ufffe'\n'\\u017d'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\u0161'\n'\\u203a'\n'\\u0153'\n'\\ufffe'\n'\\u017e'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_io": [".py", "''\n\n\n\nimport os\nimport abc\nimport codecs\nimport errno\n\ntry :\n from _thread import allocate_lock as Lock\nexcept ImportError:\n from _dummy_thread import allocate_lock as Lock\n \nimport io\n\n\nSEEK_SET=0\nSEEK_CUR=1\nSEEK_END=2\n\nvalid_seek_flags={0,1,2}\nif hasattr(os,'SEEK_HOLE'):\n valid_seek_flags.add(os.SEEK_HOLE)\n valid_seek_flags.add(os.SEEK_DATA)\n \n \nDEFAULT_BUFFER_SIZE=8 *1024\n\n\n\n\n\n\nBlockingIOError=BlockingIOError\n\n\ndef __open(file,mode=\"r\",buffering=-1,encoding=None ,errors=None ,\nnewline=None ,closefd=True ,opener=None ):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not isinstance(file,(str,bytes,int)):\n  raise TypeError(\"invalid file: %r\"%file)\n if not isinstance(mode,str):\n  raise TypeError(\"invalid mode: %r\"%mode)\n if not isinstance(buffering,int):\n  raise TypeError(\"invalid buffering: %r\"%buffering)\n if encoding is not None and not isinstance(encoding,str):\n  raise TypeError(\"invalid encoding: %r\"%encoding)\n if errors is not None and not isinstance(errors,str):\n  raise TypeError(\"invalid errors: %r\"%errors)\n modes=set(mode)\n if modes -set(\"axrwb+tU\")or len(mode)>len(modes):\n  raise ValueError(\"invalid mode: %r\"%mode)\n creating=\"x\"in modes\n reading=\"r\"in modes\n writing=\"w\"in modes\n appending=\"a\"in modes\n updating=\"+\"in modes\n text=\"t\"in modes\n binary=\"b\"in modes\n if\"U\"in modes:\n  if creating or writing or appending:\n   raise ValueError(\"can't use U and writing mode at once\")\n  reading=True\n if text and binary:\n  raise ValueError(\"can't have text and binary mode at once\")\n if creating+reading+writing+appending >1:\n  raise ValueError(\"can't have read/write/append mode at once\")\n if not (creating or reading or writing or appending):\n  raise ValueError(\"must have exactly one of read/write/append mode\")\n if binary and encoding is not None :\n  raise ValueError(\"binary mode doesn't take an encoding argument\")\n if binary and errors is not None :\n  raise ValueError(\"binary mode doesn't take an errors argument\")\n if binary and newline is not None :\n  raise ValueError(\"binary mode doesn't take a newline argument\")\n raw=FileIO(file,\n (creating and\"x\"or\"\")+\n (reading and\"r\"or\"\")+\n (writing and\"w\"or\"\")+\n (appending and\"a\"or\"\")+\n (updating and\"+\"or\"\"),\n closefd,opener=opener)\n line_buffering=False\n if buffering ==1 or buffering <0 and raw.isatty():\n  buffering=-1\n  line_buffering=True\n if buffering <0:\n  buffering=DEFAULT_BUFFER_SIZE\n  try :\n   bs=os.fstat(raw.fileno()).st_blksize\n  except (os.error,AttributeError):\n   pass\n  else :\n   if bs >1:\n    buffering=bs\n if buffering <0:\n  raise ValueError(\"invalid buffering size\")\n if buffering ==0:\n  if binary:\n   return raw\n  raise ValueError(\"can't have unbuffered text I/O\")\n if updating:\n  buffer=BufferedRandom(raw,buffering)\n elif creating or writing or appending:\n  buffer=BufferedWriter(raw,buffering)\n elif reading:\n  buffer=BufferedReader(raw,buffering)\n else :\n  raise ValueError(\"unknown mode: %r\"%mode)\n if binary:\n  return buffer\n text=TextIOWrapper(buffer,encoding,errors,newline,line_buffering)\n text.mode=mode\n return text\n \n \nclass DocDescriptor:\n ''\n \n def __get__(self,obj,typ):\n  return (\n  \"open(file, mode='r', buffering=-1, encoding=None, \"\n  \"errors=None, newline=None, closefd=True)\\n\\n\"+\n  open.__doc__)\n  \nclass OpenWrapper:\n ''\n\n\n\n\n\n \n __doc__=DocDescriptor()\n \n def __new__(cls,*args,**kwargs):\n  return open(*args,**kwargs)\n  \n  \n  \n  \ntry :\n UnsupportedOperation=io.UnsupportedOperation\nexcept AttributeError:\n class UnsupportedOperation(ValueError,IOError):\n  pass\n  \n  \nclass IOBase(metaclass=abc.ABCMeta):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n def _unsupported(self,name):\n  ''\n  raise UnsupportedOperation(\"%s.%s() not supported\"%\n  (self.__class__.__name__,name))\n  \n  \n  \n def seek(self,pos,whence=0):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  self._unsupported(\"seek\")\n  \n def tell(self):\n  ''\n  return self.seek(0,1)\n  \n def truncate(self,pos=None ):\n  ''\n\n\n\n  \n  self._unsupported(\"truncate\")\n  \n  \n  \n def flush(self):\n  ''\n\n\n  \n  self._checkClosed()\n  \n  \n __closed=False\n \n def close(self):\n  ''\n\n\n  \n  if not self.__closed:\n   try :\n    self.flush()\n   finally :\n    self.__closed=True\n    \n def __del__(self):\n  ''\n  \n  \n  \n  \n  \n  try :\n   self.close()\n  except :\n   pass\n   \n   \n   \n def seekable(self):\n  ''\n\n\n\n  \n  return False\n  \n def _checkSeekable(self,msg=None ):\n  ''\n  \n  if not self.seekable():\n   raise UnsupportedOperation(\"File or stream is not seekable.\"\n   if msg is None else msg)\n   \n def readable(self):\n  ''\n\n\n  \n  return False\n  \n def _checkReadable(self,msg=None ):\n  ''\n  \n  if not self.readable():\n   raise UnsupportedOperation(\"File or stream is not readable.\"\n   if msg is None else msg)\n   \n def writable(self):\n  ''\n\n\n  \n  return False\n  \n def _checkWritable(self,msg=None ):\n  ''\n  \n  if not self.writable():\n   raise UnsupportedOperation(\"File or stream is not writable.\"\n   if msg is None else msg)\n   \n @property\n def closed(self):\n  ''\n\n\n  \n  return self.__closed\n  \n def _checkClosed(self,msg=None ):\n  ''\n  \n  if self.closed:\n   raise ValueError(\"I/O operation on closed file.\"\n   if msg is None else msg)\n   \n   \n   \n def __enter__(self):\n  ''\n  self._checkClosed()\n  return self\n  \n def __exit__(self,*args):\n  ''\n  self.close()\n  \n  \n  \n  \n  \n def fileno(self):\n  ''\n\n\n  \n  self._unsupported(\"fileno\")\n  \n def isatty(self):\n  ''\n\n\n  \n  self._checkClosed()\n  return False\n  \n  \n  \n def readline(self,limit=-1):\n  ''\n\n\n\n\n\n\n\n  \n  \n  if hasattr(self,\"peek\"):\n   def nreadahead():\n    readahead=self.peek(1)\n    if not readahead:\n     return 1\n    n=(readahead.find(b\"\\n\")+1)or len(readahead)\n    if limit >=0:\n     n=min(n,limit)\n    return n\n  else :\n   def nreadahead():\n    return 1\n  if limit is None :\n   limit=-1\n  elif not isinstance(limit,int):\n   raise TypeError(\"limit must be an integer\")\n  res=bytearray()\n  while limit <0 or len(res)<limit:\n   b=self.read(nreadahead())\n   if not b:\n    break\n   res +=b\n   if res.endswith(b\"\\n\"):\n    break\n  return bytes(res)\n  \n def __iter__(self):\n  self._checkClosed()\n  return self\n  \n def __next__(self):\n  line=self.readline()\n  if not line:\n   raise StopIteration\n  return line\n  \n def readlines(self,hint=None ):\n  ''\n\n\n\n\n  \n  if hint is None or hint <=0:\n   return list(self)\n  n=0\n  lines=[]\n  for line in self:\n   lines.append(line)\n   n +=len(line)\n   if n >=hint:\n    break\n  return lines\n  \n def writelines(self,lines):\n  self._checkClosed()\n  for line in lines:\n   self.write(line)\n   \n   \n   \n   \n   \nclass RawIOBase(IOBase):\n\n ''\n \n \n \n \n \n \n \n \n \n \n \n def read(self,n=-1):\n  ''\n\n\n\n  \n  if n is None :\n   n=-1\n  if n <0:\n   return self.readall()\n  b=bytearray(n.__index__())\n  n=self.readinto(b)\n  if n is None :\n   return None\n  del b[n:]\n  return bytes(b)\n  \n def readall(self):\n  ''\n  res=bytearray()\n  while True :\n   data=self.read(DEFAULT_BUFFER_SIZE)\n   if not data:\n    break\n   res +=data\n  if res:\n   return bytes(res)\n  else :\n  \n   return data\n   \n def readinto(self,b):\n  ''\n\n\n\n  \n  self._unsupported(\"readinto\")\n  \n def write(self,b):\n  ''\n\n\n  \n  self._unsupported(\"write\")\n  \n  \n  \n  \n  \n  \n  \nclass BufferedIOBase(IOBase):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def read(self,n=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self._unsupported(\"read\")\n  \n def read1(self,n=None ):\n  ''\n\n  \n  self._unsupported(\"read1\")\n  \n def readinto(self,b):\n  ''\n\n\n\n\n\n\n\n\n  \n  \n  data=self.read(len(b))\n  n=len(data)\n  try :\n   b[:n]=data\n  except TypeError as err:\n   import array\n   if not isinstance(b,array.array):\n    raise err\n   b[:n]=array.array('b',data)\n  return n\n  \n def write(self,b):\n  ''\n\n\n\n\n\n\n  \n  self._unsupported(\"write\")\n  \n def detach(self):\n  ''\n\n\n\n\n  \n  self._unsupported(\"detach\")\n  \n  \n  \n  \n  \nclass _BufferedIOMixin(BufferedIOBase):\n\n ''\n\n\n\n\n \n \n def __init__(self,raw):\n  self._raw=raw\n  \n  \n  \n def seek(self,pos,whence=0):\n  new_position=self.raw.seek(pos,whence)\n  if new_position <0:\n   raise IOError(\"seek() returned an invalid position\")\n  return new_position\n  \n def tell(self):\n  pos=self.raw.tell()\n  if pos <0:\n   raise IOError(\"tell() returned an invalid position\")\n  return pos\n  \n def truncate(self,pos=None ):\n \n \n \n  self.flush()\n  \n  if pos is None :\n   pos=self.tell()\n   \n   \n  return self.raw.truncate(pos)\n  \n  \n  \n def flush(self):\n  if self.closed:\n   raise ValueError(\"flush of closed file\")\n  self.raw.flush()\n  \n def close(self):\n  if self.raw is not None and not self.closed:\n   try :\n   \n    self.flush()\n   finally :\n    self.raw.close()\n    \n def detach(self):\n  if self.raw is None :\n   raise ValueError(\"raw stream already detached\")\n  self.flush()\n  raw=self._raw\n  self._raw=None\n  return raw\n  \n  \n  \n def seekable(self):\n  return self.raw.seekable()\n  \n def readable(self):\n  return self.raw.readable()\n  \n def writable(self):\n  return self.raw.writable()\n  \n @property\n def raw(self):\n  return self._raw\n  \n @property\n def closed(self):\n  return self.raw.closed\n  \n @property\n def name(self):\n  return self.raw.name\n  \n @property\n def mode(self):\n  return self.raw.mode\n  \n def __getstate__(self):\n  raise TypeError(\"can not serialize a '{0}' object\"\n  .format(self.__class__.__name__))\n  \n def __repr__(self):\n  clsname=self.__class__.__name__\n  try :\n   name=self.name\n  except AttributeError:\n   return\"<_io.{0}>\".format(clsname)\n  else :\n   return\"<_io.{0} name={1!r}>\".format(clsname,name)\n   \n   \n   \n def fileno(self):\n  return self.raw.fileno()\n  \n def isatty(self):\n  return self.raw.isatty()\n  \n  \nclass BytesIO(BufferedIOBase):\n\n ''\n \n def __init__(self,initial_bytes=None ):\n  buf=bytearray()\n  if initial_bytes is not None :\n   buf +=initial_bytes\n  self._buffer=buf\n  self._pos=0\n  \n def __getstate__(self):\n  if self.closed:\n   raise ValueError(\"__getstate__ on closed file\")\n  return self.__dict__.copy()\n  \n def getvalue(self):\n  ''\n  \n  if self.closed:\n   raise ValueError(\"getvalue on closed file\")\n  return bytes(self._buffer)\n  \n def getbuffer(self):\n  ''\n  \n  return memoryview(self._buffer)\n  \n def read(self,n=None ):\n  if self.closed:\n   raise ValueError(\"read from closed file\")\n  if n is None :\n   n=-1\n  if n <0:\n   n=len(self._buffer)\n  if len(self._buffer)<=self._pos:\n   return b\"\"\n  newpos=min(len(self._buffer),self._pos+n)\n  b=self._buffer[self._pos:newpos]\n  self._pos=newpos\n  return bytes(b)\n  \n def read1(self,n):\n  ''\n  \n  return self.read(n)\n  \n def write(self,b):\n  if self.closed:\n   raise ValueError(\"write to closed file\")\n  if isinstance(b,str):\n   raise TypeError(\"can't write str to binary stream\")\n  n=len(b)\n  if n ==0:\n   return 0\n  pos=self._pos\n  if pos >len(self._buffer):\n  \n  \n   padding=b'\\x00'*(pos -len(self._buffer))\n   self._buffer +=padding\n  self._buffer[pos:pos+n]=b\n  self._pos +=n\n  return n\n  \n def seek(self,pos,whence=0):\n  if self.closed:\n   raise ValueError(\"seek on closed file\")\n  try :\n   pos.__index__\n  except AttributeError as err:\n   raise TypeError(\"an integer is required\")from err\n  if whence ==0:\n   if pos <0:\n    raise ValueError(\"negative seek position %r\"%(pos,))\n   self._pos=pos\n  elif whence ==1:\n   self._pos=max(0,self._pos+pos)\n  elif whence ==2:\n   self._pos=max(0,len(self._buffer)+pos)\n  else :\n   raise ValueError(\"unsupported whence value\")\n  return self._pos\n  \n def tell(self):\n  if self.closed:\n   raise ValueError(\"tell on closed file\")\n  return self._pos\n  \n def truncate(self,pos=None ):\n  if self.closed:\n   raise ValueError(\"truncate on closed file\")\n  if pos is None :\n   pos=self._pos\n  else :\n   try :\n    pos.__index__\n   except AttributeError as err:\n    raise TypeError(\"an integer is required\")from err\n   if pos <0:\n    raise ValueError(\"negative truncate position %r\"%(pos,))\n  del self._buffer[pos:]\n  return pos\n  \n def readable(self):\n  if self.closed:\n   raise ValueError(\"I/O operation on closed file.\")\n  return True\n  \n def writable(self):\n  if self.closed:\n   raise ValueError(\"I/O operation on closed file.\")\n  return True\n  \n def seekable(self):\n  if self.closed:\n   raise ValueError(\"I/O operation on closed file.\")\n  return True\n  \n  \nclass BufferedReader(_BufferedIOMixin):\n\n ''\n\n\n\n\n\n\n \n \n def __init__(self,raw,buffer_size=DEFAULT_BUFFER_SIZE):\n  ''\n  \n  if not raw.readable():\n   raise IOError('\"raw\" argument must be readable.')\n   \n  _BufferedIOMixin.__init__(self,raw)\n  if buffer_size <=0:\n   raise ValueError(\"invalid buffer size\")\n  self.buffer_size=buffer_size\n  self._reset_read_buf()\n  self._read_lock=Lock()\n  \n def _reset_read_buf(self):\n  self._read_buf=b\"\"\n  self._read_pos=0\n  \n def read(self,n=None ):\n  ''\n\n\n\n\n\n  \n  if n is not None and n <-1:\n   raise ValueError(\"invalid number of bytes to read\")\n  with self._read_lock:\n   return self._read_unlocked(n)\n   \n def _read_unlocked(self,n=None ):\n  nodata_val=b\"\"\n  empty_values=(b\"\",None )\n  buf=self._read_buf\n  pos=self._read_pos\n  \n  \n  if n is None or n ==-1:\n   self._reset_read_buf()\n   if hasattr(self.raw,'readall'):\n    chunk=self.raw.readall()\n    if chunk is None :\n     return buf[pos:]or None\n    else :\n     return buf[pos:]+chunk\n   chunks=[buf[pos:]]\n   current_size=0\n   while True :\n   \n    try :\n     chunk=self.raw.read()\n    except InterruptedError:\n     continue\n    if chunk in empty_values:\n     nodata_val=chunk\n     break\n    current_size +=len(chunk)\n    chunks.append(chunk)\n   return b\"\".join(chunks)or nodata_val\n   \n   \n  avail=len(buf)-pos\n  if n <=avail:\n  \n   self._read_pos +=n\n   return buf[pos:pos+n]\n   \n   \n  chunks=[buf[pos:]]\n  wanted=max(self.buffer_size,n)\n  while avail <n:\n   try :\n    chunk=self.raw.read(wanted)\n   except InterruptedError:\n    continue\n   if chunk in empty_values:\n    nodata_val=chunk\n    break\n   avail +=len(chunk)\n   chunks.append(chunk)\n   \n   \n  n=min(n,avail)\n  out=b\"\".join(chunks)\n  self._read_buf=out[n:]\n  self._read_pos=0\n  return out[:n]if out else nodata_val\n  \n def peek(self,n=0):\n  ''\n\n\n\n\n  \n  with self._read_lock:\n   return self._peek_unlocked(n)\n   \n def _peek_unlocked(self,n=0):\n  want=min(n,self.buffer_size)\n  have=len(self._read_buf)-self._read_pos\n  if have <want or have <=0:\n   to_read=self.buffer_size -have\n   while True :\n    try :\n     current=self.raw.read(to_read)\n    except InterruptedError:\n     continue\n    break\n   if current:\n    self._read_buf=self._read_buf[self._read_pos:]+current\n    self._read_pos=0\n  return self._read_buf[self._read_pos:]\n  \n def read1(self,n):\n  ''\n  \n  \n  if n <0:\n   raise ValueError(\"number of bytes to read must be positive\")\n  if n ==0:\n   return b\"\"\n  with self._read_lock:\n   self._peek_unlocked(1)\n   return self._read_unlocked(\n   min(n,len(self._read_buf)-self._read_pos))\n   \n def tell(self):\n  return _BufferedIOMixin.tell(self)-len(self._read_buf)+self._read_pos\n  \n def seek(self,pos,whence=0):\n  if whence not in valid_seek_flags:\n   raise ValueError(\"invalid whence value\")\n  with self._read_lock:\n   if whence ==1:\n    pos -=len(self._read_buf)-self._read_pos\n   pos=_BufferedIOMixin.seek(self,pos,whence)\n   self._reset_read_buf()\n   return pos\n   \nclass BufferedWriter(_BufferedIOMixin):\n\n ''\n\n\n\n\n \n \n def __init__(self,raw,buffer_size=DEFAULT_BUFFER_SIZE):\n  if not raw.writable():\n   raise IOError('\"raw\" argument must be writable.')\n   \n  _BufferedIOMixin.__init__(self,raw)\n  if buffer_size <=0:\n   raise ValueError(\"invalid buffer size\")\n  self.buffer_size=buffer_size\n  self._write_buf=bytearray()\n  self._write_lock=Lock()\n  \n def write(self,b):\n  if self.closed:\n   raise ValueError(\"write to closed file\")\n  if isinstance(b,str):\n   raise TypeError(\"can't write str to binary stream\")\n  with self._write_lock:\n  \n  \n   if len(self._write_buf)>self.buffer_size:\n   \n   \n    self._flush_unlocked()\n   before=len(self._write_buf)\n   self._write_buf.extend(b)\n   written=len(self._write_buf)-before\n   if len(self._write_buf)>self.buffer_size:\n    try :\n     self._flush_unlocked()\n    except BlockingIOError as e:\n     if len(self._write_buf)>self.buffer_size:\n     \n     \n      overage=len(self._write_buf)-self.buffer_size\n      written -=overage\n      self._write_buf=self._write_buf[:self.buffer_size]\n      raise BlockingIOError(e.errno,e.strerror,written)\n   return written\n   \n def truncate(self,pos=None ):\n  with self._write_lock:\n   self._flush_unlocked()\n   if pos is None :\n    pos=self.raw.tell()\n   return self.raw.truncate(pos)\n   \n def flush(self):\n  with self._write_lock:\n   self._flush_unlocked()\n   \n def _flush_unlocked(self):\n  if self.closed:\n   raise ValueError(\"flush of closed file\")\n  while self._write_buf:\n   try :\n    n=self.raw.write(self._write_buf)\n   except InterruptedError:\n    continue\n   except BlockingIOError:\n    raise RuntimeError(\"self.raw should implement RawIOBase: it \"\n    \"should not raise BlockingIOError\")\n   if n is None :\n    raise BlockingIOError(\n    errno.EAGAIN,\n    \"write could not complete without blocking\",0)\n   if n >len(self._write_buf)or n <0:\n    raise IOError(\"write() returned incorrect number of bytes\")\n   del self._write_buf[:n]\n   \n def tell(self):\n  return _BufferedIOMixin.tell(self)+len(self._write_buf)\n  \n def seek(self,pos,whence=0):\n  if whence not in valid_seek_flags:\n   raise ValueError(\"invalid whence value\")\n  with self._write_lock:\n   self._flush_unlocked()\n   return _BufferedIOMixin.seek(self,pos,whence)\n   \n   \nclass BufferedRWPair(BufferedIOBase):\n\n ''\n\n\n\n\n\n\n\n\n \n \n \n \n \n def __init__(self,reader,writer,buffer_size=DEFAULT_BUFFER_SIZE):\n  ''\n\n\n  \n  if not reader.readable():\n   raise IOError('\"reader\" argument must be readable.')\n   \n  if not writer.writable():\n   raise IOError('\"writer\" argument must be writable.')\n   \n  self.reader=BufferedReader(reader,buffer_size)\n  self.writer=BufferedWriter(writer,buffer_size)\n  \n def read(self,n=None ):\n  if n is None :\n   n=-1\n  return self.reader.read(n)\n  \n def readinto(self,b):\n  return self.reader.readinto(b)\n  \n def write(self,b):\n  return self.writer.write(b)\n  \n def peek(self,n=0):\n  return self.reader.peek(n)\n  \n def read1(self,n):\n  return self.reader.read1(n)\n  \n def readable(self):\n  return self.reader.readable()\n  \n def writable(self):\n  return self.writer.writable()\n  \n def flush(self):\n  return self.writer.flush()\n  \n def close(self):\n  self.writer.close()\n  self.reader.close()\n  \n def isatty(self):\n  return self.reader.isatty()or self.writer.isatty()\n  \n @property\n def closed(self):\n  return self.writer.closed\n  \n  \nclass BufferedRandom(BufferedWriter,BufferedReader):\n\n ''\n\n\n\n\n \n \n def __init__(self,raw,buffer_size=DEFAULT_BUFFER_SIZE):\n  raw._checkSeekable()\n  BufferedReader.__init__(self,raw,buffer_size)\n  BufferedWriter.__init__(self,raw,buffer_size)\n  \n def seek(self,pos,whence=0):\n  if whence not in valid_seek_flags:\n   raise ValueError(\"invalid whence value\")\n  self.flush()\n  if self._read_buf:\n  \n   with self._read_lock:\n    self.raw.seek(self._read_pos -len(self._read_buf),1)\n    \n    \n  pos=self.raw.seek(pos,whence)\n  with self._read_lock:\n   self._reset_read_buf()\n  if pos <0:\n   raise IOError(\"seek() returned invalid position\")\n  return pos\n  \n def tell(self):\n  if self._write_buf:\n   return BufferedWriter.tell(self)\n  else :\n   return BufferedReader.tell(self)\n   \n def truncate(self,pos=None ):\n  if pos is None :\n   pos=self.tell()\n   \n  return BufferedWriter.truncate(self,pos)\n  \n def read(self,n=None ):\n  if n is None :\n   n=-1\n  self.flush()\n  return BufferedReader.read(self,n)\n  \n def readinto(self,b):\n  self.flush()\n  return BufferedReader.readinto(self,b)\n  \n def peek(self,n=0):\n  self.flush()\n  return BufferedReader.peek(self,n)\n  \n def read1(self,n):\n  self.flush()\n  return BufferedReader.read1(self,n)\n  \n def write(self,b):\n  if self._read_buf:\n  \n   with self._read_lock:\n    self.raw.seek(self._read_pos -len(self._read_buf),1)\n    self._reset_read_buf()\n  return BufferedWriter.write(self,b)\n  \n  \nclass TextIOBase(IOBase):\n\n ''\n\n\n\n\n \n \n def read(self,n=-1):\n  ''\n\n\n\n\n\n  \n  self._unsupported(\"read\")\n  \n def write(self,s):\n  ''\n  self._unsupported(\"write\")\n  \n def truncate(self,pos=None ):\n  ''\n  self._unsupported(\"truncate\")\n  \n def readline(self):\n  ''\n\n\n  \n  self._unsupported(\"readline\")\n  \n def detach(self):\n  ''\n\n\n\n\n  \n  self._unsupported(\"detach\")\n  \n @property\n def encoding(self):\n  ''\n  return None\n  \n @property\n def newlines(self):\n  ''\n\n\n\n\n  \n  return None\n  \n @property\n def errors(self):\n  ''\n\n  \n  return None\n  \n  \n  \n  \n  \nclass IncrementalNewlineDecoder(codecs.IncrementalDecoder):\n ''\n\n\n\n\n \n def __init__(self,decoder,translate,errors='strict'):\n  codecs.IncrementalDecoder.__init__(self,errors=errors)\n  self.translate=translate\n  self.decoder=decoder\n  self.seennl=0\n  self.pendingcr=False\n  \n def decode(self,input,final=False ):\n \n  if self.decoder is None :\n   output=input\n  else :\n   output=self.decoder.decode(input,final=final)\n  if self.pendingcr and (output or final):\n   output=\"\\r\"+output\n   self.pendingcr=False\n   \n   \n   \n  if output.endswith(\"\\r\")and not final:\n   output=output[:-1]\n   self.pendingcr=True\n   \n   \n  crlf=output.count('\\r\\n')\n  cr=output.count('\\r')-crlf\n  lf=output.count('\\n')-crlf\n  self.seennl |=(lf and self._LF)|(cr and self._CR)  |(crlf and self._CRLF)\n  \n  if self.translate:\n   if crlf:\n    output=output.replace(\"\\r\\n\",\"\\n\")\n   if cr:\n    output=output.replace(\"\\r\",\"\\n\")\n    \n  return output\n  \n def getstate(self):\n  if self.decoder is None :\n   buf=b\"\"\n   flag=0\n  else :\n   buf,flag=self.decoder.getstate()\n  flag <<=1\n  if self.pendingcr:\n   flag |=1\n  return buf,flag\n  \n def setstate(self,state):\n  buf,flag=state\n  self.pendingcr=bool(flag&1)\n  if self.decoder is not None :\n   self.decoder.setstate((buf,flag >>1))\n   \n def reset(self):\n  self.seennl=0\n  self.pendingcr=False\n  if self.decoder is not None :\n   self.decoder.reset()\n   \n _LF=1\n _CR=2\n _CRLF=4\n \n @property\n def newlines(self):\n  return (None ,\n  \"\\n\",\n  \"\\r\",\n  (\"\\r\",\"\\n\"),\n  \"\\r\\n\",\n  (\"\\n\",\"\\r\\n\"),\n  (\"\\r\",\"\\r\\n\"),\n  (\"\\r\",\"\\n\",\"\\r\\n\")\n  )[self.seennl]\n  \n  \nclass TextIOWrapper(TextIOBase):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n _CHUNK_SIZE=2048\n \n \n \n \n def __init__(self,buffer,encoding=None ,errors=None ,newline=None ,\n line_buffering=False ,write_through=False ):\n  if newline is not None and not isinstance(newline,str):\n   raise TypeError(\"illegal newline type: %r\"%(type(newline),))\n  if newline not in (None ,\"\",\"\\n\",\"\\r\",\"\\r\\n\"):\n   raise ValueError(\"illegal newline value: %r\"%(newline,))\n  if encoding is None :\n   try :\n    encoding=os.device_encoding(buffer.fileno())\n   except (AttributeError,UnsupportedOperation):\n    pass\n   if encoding is None :\n    try :\n     import locale\n    except ImportError:\n    \n     encoding=\"ascii\"\n    else :\n     encoding=locale.getpreferredencoding(False )\n     \n  if not isinstance(encoding,str):\n   raise ValueError(\"invalid encoding: %r\"%encoding)\n   \n  if errors is None :\n   errors=\"strict\"\n  else :\n   if not isinstance(errors,str):\n    raise ValueError(\"invalid errors: %r\"%errors)\n    \n  self._buffer=buffer\n  self._line_buffering=line_buffering\n  self._encoding=encoding\n  self._errors=errors\n  self._readuniversal=not newline\n  self._readtranslate=newline is None\n  self._readnl=newline\n  self._writetranslate=newline !=''\n  self._writenl=newline or os.linesep\n  self._encoder=None\n  self._decoder=None\n  self._decoded_chars=''\n  self._decoded_chars_used=0\n  self._snapshot=None\n  self._seekable=self._telling=self.buffer.seekable()\n  self._has_read1=hasattr(self.buffer,'read1')\n  self._b2cratio=0.0\n  \n  if self._seekable and self.writable():\n   position=self.buffer.tell()\n   if position !=0:\n    try :\n     self._get_encoder().setstate(0)\n    except LookupError:\n    \n     pass\n     \n     \n     \n     \n     \n     \n     \n     \n     \n     \n def __repr__(self):\n  result=\"<_io.TextIOWrapper\"\n  try :\n   name=self.name\n  except AttributeError:\n   pass\n  else :\n   result +=\" name={0!r}\".format(name)\n  try :\n   mode=self.mode\n  except AttributeError:\n   pass\n  else :\n   result +=\" mode={0!r}\".format(mode)\n  return result+\" encoding={0!r}>\".format(self.encoding)\n  \n @property\n def encoding(self):\n  return self._encoding\n  \n @property\n def errors(self):\n  return self._errors\n  \n @property\n def line_buffering(self):\n  return self._line_buffering\n  \n @property\n def buffer(self):\n  return self._buffer\n  \n def seekable(self):\n  if self.closed:\n   raise ValueError(\"I/O operation on closed file.\")\n  return self._seekable\n  \n def readable(self):\n  return self.buffer.readable()\n  \n def writable(self):\n  return self.buffer.writable()\n  \n def flush(self):\n  self.buffer.flush()\n  self._telling=self._seekable\n  \n def close(self):\n  if self.buffer is not None and not self.closed:\n   try :\n    self.flush()\n   finally :\n    self.buffer.close()\n    \n @property\n def closed(self):\n  return self.buffer.closed\n  \n @property\n def name(self):\n  return self.buffer.name\n  \n def fileno(self):\n  return self.buffer.fileno()\n  \n def isatty(self):\n  return self.buffer.isatty()\n  \n def write(self,s):\n  ''\n  if self.closed:\n   raise ValueError(\"write to closed file\")\n  if not isinstance(s,str):\n   raise TypeError(\"can't write %s to text stream\"%\n   s.__class__.__name__)\n  length=len(s)\n  haslf=(self._writetranslate or self._line_buffering)and\"\\n\"in s\n  if haslf and self._writetranslate and self._writenl !=\"\\n\":\n   s=s.replace(\"\\n\",self._writenl)\n  encoder=self._encoder or self._get_encoder()\n  \n  b=encoder.encode(s)\n  self.buffer.write(b)\n  if self._line_buffering and (haslf or\"\\r\"in s):\n   self.flush()\n  self._snapshot=None\n  if self._decoder:\n   self._decoder.reset()\n  return length\n  \n def _get_encoder(self):\n  make_encoder=codecs.getincrementalencoder(self._encoding)\n  self._encoder=make_encoder(self._errors)\n  return self._encoder\n  \n def _get_decoder(self):\n  make_decoder=codecs.getincrementaldecoder(self._encoding)\n  decoder=make_decoder(self._errors)\n  if self._readuniversal:\n   decoder=IncrementalNewlineDecoder(decoder,self._readtranslate)\n  self._decoder=decoder\n  return decoder\n  \n  \n  \n  \n def _set_decoded_chars(self,chars):\n  ''\n  self._decoded_chars=chars\n  self._decoded_chars_used=0\n  \n def _get_decoded_chars(self,n=None ):\n  ''\n  offset=self._decoded_chars_used\n  if n is None :\n   chars=self._decoded_chars[offset:]\n  else :\n   chars=self._decoded_chars[offset:offset+n]\n  self._decoded_chars_used +=len(chars)\n  return chars\n  \n def _rewind_decoded_chars(self,n):\n  ''\n  if self._decoded_chars_used <n:\n   raise AssertionError(\"rewind decoded_chars out of bounds\")\n  self._decoded_chars_used -=n\n  \n def _read_chunk(self):\n  ''\n\n  \n  \n  \n  \n  \n  \n  \n  \n  if self._decoder is None :\n   raise ValueError(\"no decoder\")\n   \n  if self._telling:\n  \n  \n  \n   dec_buffer,dec_flags=self._decoder.getstate()\n   \n   \n   \n   \n  if self._has_read1:\n   input_chunk=self.buffer.read1(self._CHUNK_SIZE)\n  else :\n   input_chunk=self.buffer.read(self._CHUNK_SIZE)\n  eof=not input_chunk\n  decoded_chars=self._decoder.decode(input_chunk,eof)\n  self._set_decoded_chars(decoded_chars)\n  if decoded_chars:\n   self._b2cratio=len(input_chunk)/len(self._decoded_chars)\n  else :\n   self._b2cratio=0.0\n   \n  if self._telling:\n  \n  \n   self._snapshot=(dec_flags,dec_buffer+input_chunk)\n   \n  return not eof\n  \n def _pack_cookie(self,position,dec_flags=0,\n bytes_to_feed=0,need_eof=0,chars_to_skip=0):\n \n \n \n \n \n  return (position |(dec_flags <<64)|(bytes_to_feed <<128)|\n  (chars_to_skip <<192)|bool(need_eof)<<256)\n  \n def _unpack_cookie(self,bigint):\n  rest,position=divmod(bigint,1 <<64)\n  rest,dec_flags=divmod(rest,1 <<64)\n  rest,bytes_to_feed=divmod(rest,1 <<64)\n  need_eof,chars_to_skip=divmod(rest,1 <<64)\n  return position,dec_flags,bytes_to_feed,need_eof,chars_to_skip\n  \n def tell(self):\n  if not self._seekable:\n   raise UnsupportedOperation(\"underlying stream is not seekable\")\n  if not self._telling:\n   raise IOError(\"telling position disabled by next() call\")\n  self.flush()\n  position=self.buffer.tell()\n  decoder=self._decoder\n  if decoder is None or self._snapshot is None :\n   if self._decoded_chars:\n   \n    raise AssertionError(\"pending decoded text\")\n   return position\n   \n   \n  dec_flags,next_input=self._snapshot\n  position -=len(next_input)\n  \n  \n  chars_to_skip=self._decoded_chars_used\n  if chars_to_skip ==0:\n  \n   return self._pack_cookie(position,dec_flags)\n   \n   \n   \n  saved_state=decoder.getstate()\n  try :\n  \n  \n  \n  \n  \n  \n  \n   skip_bytes=int(self._b2cratio *chars_to_skip)\n   skip_back=1\n   assert skip_bytes <=len(next_input)\n   while skip_bytes >0:\n    decoder.setstate((b'',dec_flags))\n    \n    n=len(decoder.decode(next_input[:skip_bytes]))\n    if n <=chars_to_skip:\n     b,d=decoder.getstate()\n     if not b:\n     \n      dec_flags=d\n      chars_to_skip -=n\n      break\n      \n     skip_bytes -=len(b)\n     skip_back=1\n    else :\n    \n     skip_bytes -=skip_back\n     skip_back=skip_back *2\n   else :\n    skip_bytes=0\n    decoder.setstate((b'',dec_flags))\n    \n    \n   start_pos=position+skip_bytes\n   start_flags=dec_flags\n   if chars_to_skip ==0:\n   \n    return self._pack_cookie(start_pos,start_flags)\n    \n    \n    \n    \n    \n   bytes_fed=0\n   need_eof=0\n   \n   chars_decoded=0\n   for i in range(skip_bytes,len(next_input)):\n    bytes_fed +=1\n    chars_decoded +=len(decoder.decode(next_input[i:i+1]))\n    dec_buffer,dec_flags=decoder.getstate()\n    if not dec_buffer and chars_decoded <=chars_to_skip:\n    \n     start_pos +=bytes_fed\n     chars_to_skip -=chars_decoded\n     start_flags,bytes_fed,chars_decoded=dec_flags,0,0\n    if chars_decoded >=chars_to_skip:\n     break\n   else :\n   \n    chars_decoded +=len(decoder.decode(b'',final=True ))\n    need_eof=1\n    if chars_decoded <chars_to_skip:\n     raise IOError(\"can't reconstruct logical file position\")\n     \n     \n   return self._pack_cookie(\n   start_pos,start_flags,bytes_fed,need_eof,chars_to_skip)\n  finally :\n   decoder.setstate(saved_state)\n   \n def truncate(self,pos=None ):\n  self.flush()\n  if pos is None :\n   pos=self.tell()\n  return self.buffer.truncate(pos)\n  \n def detach(self):\n  if self.buffer is None :\n   raise ValueError(\"buffer is already detached\")\n  self.flush()\n  buffer=self._buffer\n  self._buffer=None\n  return buffer\n  \n def seek(self,cookie,whence=0):\n  if self.closed:\n   raise ValueError(\"tell on closed file\")\n  if not self._seekable:\n   raise UnsupportedOperation(\"underlying stream is not seekable\")\n  if whence ==1:\n   if cookie !=0:\n    raise UnsupportedOperation(\"can't do nonzero cur-relative seeks\")\n    \n    \n   whence=0\n   cookie=self.tell()\n  if whence ==2:\n   if cookie !=0:\n    raise UnsupportedOperation(\"can't do nonzero end-relative seeks\")\n   self.flush()\n   position=self.buffer.seek(0,2)\n   self._set_decoded_chars('')\n   self._snapshot=None\n   if self._decoder:\n    self._decoder.reset()\n   return position\n  if whence !=0:\n   raise ValueError(\"unsupported whence (%r)\"%(whence,))\n  if cookie <0:\n   raise ValueError(\"negative seek position %r\"%(cookie,))\n  self.flush()\n  \n  \n  \n  start_pos,dec_flags,bytes_to_feed,need_eof,chars_to_skip=  self._unpack_cookie(cookie)\n  \n  \n  self.buffer.seek(start_pos)\n  self._set_decoded_chars('')\n  self._snapshot=None\n  \n  \n  if cookie ==0 and self._decoder:\n   self._decoder.reset()\n  elif self._decoder or dec_flags or chars_to_skip:\n   self._decoder=self._decoder or self._get_decoder()\n   self._decoder.setstate((b'',dec_flags))\n   self._snapshot=(dec_flags,b'')\n   \n  if chars_to_skip:\n  \n   input_chunk=self.buffer.read(bytes_to_feed)\n   self._set_decoded_chars(\n   self._decoder.decode(input_chunk,need_eof))\n   self._snapshot=(dec_flags,input_chunk)\n   \n   \n   if len(self._decoded_chars)<chars_to_skip:\n    raise IOError(\"can't restore logical file position\")\n   self._decoded_chars_used=chars_to_skip\n   \n   \n  try :\n   encoder=self._encoder or self._get_encoder()\n  except LookupError:\n  \n   pass\n  else :\n   if cookie !=0:\n    encoder.setstate(0)\n   else :\n    encoder.reset()\n  return cookie\n  \n def read(self,n=None ):\n  self._checkReadable()\n  if n is None :\n   n=-1\n  decoder=self._decoder or self._get_decoder()\n  try :\n   n.__index__\n  except AttributeError as err:\n   raise TypeError(\"an integer is required\")from err\n  if n <0:\n  \n   result=(self._get_decoded_chars()+\n   decoder.decode(self.buffer.read(),final=True ))\n   self._set_decoded_chars('')\n   self._snapshot=None\n   return result\n  else :\n  \n   eof=False\n   result=self._get_decoded_chars(n)\n   while len(result)<n and not eof:\n    eof=not self._read_chunk()\n    result +=self._get_decoded_chars(n -len(result))\n   return result\n   \n def __next__(self):\n  self._telling=False\n  line=self.readline()\n  if not line:\n   self._snapshot=None\n   self._telling=self._seekable\n   raise StopIteration\n  return line\n  \n def readline(self,limit=None ):\n  if self.closed:\n   raise ValueError(\"read from closed file\")\n  if limit is None :\n   limit=-1\n  elif not isinstance(limit,int):\n   raise TypeError(\"limit must be an integer\")\n   \n   \n  line=self._get_decoded_chars()\n  \n  start=0\n  \n  if not self._decoder:\n   self._get_decoder()\n   \n  pos=endpos=None\n  while True :\n   if self._readtranslate:\n   \n    pos=line.find('\\n',start)\n    if pos >=0:\n     endpos=pos+1\n     break\n    else :\n     start=len(line)\n     \n   elif self._readuniversal:\n   \n   \n   \n   \n    nlpos=line.find(\"\\n\",start)\n    crpos=line.find(\"\\r\",start)\n    if crpos ==-1:\n     if nlpos ==-1:\n     \n      start=len(line)\n     else :\n     \n      endpos=nlpos+1\n      break\n    elif nlpos ==-1:\n    \n     endpos=crpos+1\n     break\n    elif nlpos <crpos:\n    \n     endpos=nlpos+1\n     break\n    elif nlpos ==crpos+1:\n    \n     endpos=crpos+2\n     break\n    else :\n    \n     endpos=crpos+1\n     break\n   else :\n   \n    pos=line.find(self._readnl)\n    if pos >=0:\n     endpos=pos+len(self._readnl)\n     break\n     \n   if limit >=0 and len(line)>=limit:\n    endpos=limit\n    break\n    \n    \n   while self._read_chunk():\n    if self._decoded_chars:\n     break\n   if self._decoded_chars:\n    line +=self._get_decoded_chars()\n   else :\n   \n    self._set_decoded_chars('')\n    self._snapshot=None\n    return line\n    \n  if limit >=0 and endpos >limit:\n   endpos=limit\n   \n   \n  self._rewind_decoded_chars(len(line)-endpos)\n  return line[:endpos]\n  \n @property\n def newlines(self):\n  return self._decoder.newlines if self._decoder else None\n  \n  \nclass StringIO(TextIOWrapper):\n ''\n\n\n\n \n \n def __init__(self,initial_value=\"\",newline=\"\\n\"):\n  super(StringIO,self).__init__(BytesIO(),\n  encoding=\"utf-8\",\n  errors=\"strict\",\n  newline=newline)\n  \n  \n  if newline is None :\n   self._writetranslate=False\n  if initial_value is not None :\n   if not isinstance(initial_value,str):\n    raise TypeError(\"initial_value must be str or None, not {0}\"\n    .format(type(initial_value).__name__))\n    initial_value=str(initial_value)\n   self.write(initial_value)\n   self.seek(0)\n   \n def getvalue(self):\n  self.flush()\n  return self.buffer.getvalue().decode(self._encoding,self._errors)\n  \n def __repr__(self):\n \n \n  return object.__repr__(self)\n  \n @property\n def errors(self):\n  return None\n  \n @property\n def encoding(self):\n  return None\n  \n def detach(self):\n \n  self._unsupported(\"detach\")\n"], "xml": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"dom\",\"parsers\",\"sax\",\"etree\"]\n", 1], "xml.dom.expatbuilder": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfrom xml.dom import xmlbuilder,minidom,Node\nfrom xml.dom import EMPTY_NAMESPACE,EMPTY_PREFIX,XMLNS_NAMESPACE\nfrom xml.parsers import expat\nfrom xml.dom.minidom import _append_child,_set_attribute_node\nfrom xml.dom.NodeFilter import NodeFilter\n\nTEXT_NODE=Node.TEXT_NODE\nCDATA_SECTION_NODE=Node.CDATA_SECTION_NODE\nDOCUMENT_NODE=Node.DOCUMENT_NODE\n\nFILTER_ACCEPT=xmlbuilder.DOMBuilderFilter.FILTER_ACCEPT\nFILTER_REJECT=xmlbuilder.DOMBuilderFilter.FILTER_REJECT\nFILTER_SKIP=xmlbuilder.DOMBuilderFilter.FILTER_SKIP\nFILTER_INTERRUPT=xmlbuilder.DOMBuilderFilter.FILTER_INTERRUPT\n\ntheDOMImplementation=minidom.getDOMImplementation()\n\n\n_typeinfo_map={\n\"CDATA\":minidom.TypeInfo(None ,\"cdata\"),\n\"ENUM\":minidom.TypeInfo(None ,\"enumeration\"),\n\"ENTITY\":minidom.TypeInfo(None ,\"entity\"),\n\"ENTITIES\":minidom.TypeInfo(None ,\"entities\"),\n\"ID\":minidom.TypeInfo(None ,\"id\"),\n\"IDREF\":minidom.TypeInfo(None ,\"idref\"),\n\"IDREFS\":minidom.TypeInfo(None ,\"idrefs\"),\n\"NMTOKEN\":minidom.TypeInfo(None ,\"nmtoken\"),\n\"NMTOKENS\":minidom.TypeInfo(None ,\"nmtokens\"),\n}\n\nclass ElementInfo(object):\n __slots__='_attr_info','_model','tagName'\n \n def __init__(self,tagName,model=None ):\n  self.tagName=tagName\n  self._attr_info=[]\n  self._model=model\n  \n def __getstate__(self):\n  return self._attr_info,self._model,self.tagName\n  \n def __setstate__(self,state):\n  self._attr_info,self._model,self.tagName=state\n  \n def getAttributeType(self,aname):\n  for info in self._attr_info:\n   if info[1]==aname:\n    t=info[-2]\n    if t[0]==\"(\":\n     return _typeinfo_map[\"ENUM\"]\n    else :\n     return _typeinfo_map[info[-2]]\n  return minidom._no_type\n  \n def getAttributeTypeNS(self,namespaceURI,localName):\n  return minidom._no_type\n  \n def isElementContent(self):\n  if self._model:\n   type=self._model[0]\n   return type not in (expat.model.XML_CTYPE_ANY,\n   expat.model.XML_CTYPE_MIXED)\n  else :\n   return False\n   \n def isEmpty(self):\n  if self._model:\n   return self._model[0]==expat.model.XML_CTYPE_EMPTY\n  else :\n   return False\n   \n def isId(self,aname):\n  for info in self._attr_info:\n   if info[1]==aname:\n    return info[-2]==\"ID\"\n  return False\n  \n def isIdNS(self,euri,ename,auri,aname):\n \n  return self.isId((auri,aname))\n  \ndef _intern(builder,s):\n return builder._intern_setdefault(s,s)\n \ndef _parse_ns_name(builder,name):\n assert' 'in name\n parts=name.split(' ')\n intern=builder._intern_setdefault\n if len(parts)==3:\n  uri,localname,prefix=parts\n  prefix=intern(prefix,prefix)\n  qname=\"%s:%s\"%(prefix,localname)\n  qname=intern(qname,qname)\n  localname=intern(localname,localname)\n else :\n  uri,localname=parts\n  prefix=EMPTY_PREFIX\n  qname=localname=intern(localname,localname)\n return intern(uri,uri),localname,prefix,qname\n \n \nclass ExpatBuilder:\n ''\n \n \n def __init__(self,options=None ):\n  if options is None :\n   options=xmlbuilder.Options()\n  self._options=options\n  if self._options.filter is not None :\n   self._filter=FilterVisibilityController(self._options.filter)\n  else :\n   self._filter=None\n   \n   \n   self._finish_start_element=id\n  self._parser=None\n  self.reset()\n  \n def createParser(self):\n  ''\n  return expat.ParserCreate()\n  \n def getParser(self):\n  ''\n  if not self._parser:\n   self._parser=self.createParser()\n   self._intern_setdefault=self._parser.intern.setdefault\n   self._parser.buffer_text=True\n   self._parser.ordered_attributes=True\n   self._parser.specified_attributes=True\n   self.install(self._parser)\n  return self._parser\n  \n def reset(self):\n  ''\n  self.document=theDOMImplementation.createDocument(\n  EMPTY_NAMESPACE,None ,None )\n  self.curNode=self.document\n  self._elem_info=self.document._elem_info\n  self._cdata=False\n  \n def install(self,parser):\n  ''\n  \n  parser.StartDoctypeDeclHandler=self.start_doctype_decl_handler\n  parser.StartElementHandler=self.first_element_handler\n  parser.EndElementHandler=self.end_element_handler\n  parser.ProcessingInstructionHandler=self.pi_handler\n  if self._options.entities:\n   parser.EntityDeclHandler=self.entity_decl_handler\n  parser.NotationDeclHandler=self.notation_decl_handler\n  if self._options.comments:\n   parser.CommentHandler=self.comment_handler\n  if self._options.cdata_sections:\n   parser.StartCdataSectionHandler=self.start_cdata_section_handler\n   parser.EndCdataSectionHandler=self.end_cdata_section_handler\n   parser.CharacterDataHandler=self.character_data_handler_cdata\n  else :\n   parser.CharacterDataHandler=self.character_data_handler\n  parser.ExternalEntityRefHandler=self.external_entity_ref_handler\n  parser.XmlDeclHandler=self.xml_decl_handler\n  parser.ElementDeclHandler=self.element_decl_handler\n  parser.AttlistDeclHandler=self.attlist_decl_handler\n  \n def parseFile(self,file):\n  ''\n  \n  parser=self.getParser()\n  first_buffer=True\n  try :\n   while 1:\n    buffer=file.read(16 *1024)\n    if not buffer:\n     break\n    parser.Parse(buffer,0)\n    if first_buffer and self.document.documentElement:\n     self._setup_subset(buffer)\n    first_buffer=False\n   parser.Parse(\"\",True )\n  except ParseEscape:\n   pass\n  doc=self.document\n  self.reset()\n  self._parser=None\n  return doc\n  \n def parseString(self,string):\n  ''\n  parser=self.getParser()\n  try :\n   parser.Parse(string,True )\n   self._setup_subset(string)\n  except ParseEscape:\n   pass\n  doc=self.document\n  self.reset()\n  self._parser=None\n  return doc\n  \n def _setup_subset(self,buffer):\n  ''\n  if self.document.doctype:\n   extractor=InternalSubsetExtractor()\n   extractor.parseString(buffer)\n   subset=extractor.getSubset()\n   self.document.doctype.internalSubset=subset\n   \n def start_doctype_decl_handler(self,doctypeName,systemId,publicId,\n has_internal_subset):\n  doctype=self.document.implementation.createDocumentType(\n  doctypeName,publicId,systemId)\n  doctype.ownerDocument=self.document\n  _append_child(self.document,doctype)\n  self.document.doctype=doctype\n  if self._filter and self._filter.acceptNode(doctype)==FILTER_REJECT:\n   self.document.doctype=None\n   del self.document.childNodes[-1]\n   doctype=None\n   self._parser.EntityDeclHandler=None\n   self._parser.NotationDeclHandler=None\n  if has_internal_subset:\n   if doctype is not None :\n    doctype.entities._seq=[]\n    doctype.notations._seq=[]\n   self._parser.CommentHandler=None\n   self._parser.ProcessingInstructionHandler=None\n   self._parser.EndDoctypeDeclHandler=self.end_doctype_decl_handler\n   \n def end_doctype_decl_handler(self):\n  if self._options.comments:\n   self._parser.CommentHandler=self.comment_handler\n  self._parser.ProcessingInstructionHandler=self.pi_handler\n  if not (self._elem_info or self._filter):\n   self._finish_end_element=id\n   \n def pi_handler(self,target,data):\n  node=self.document.createProcessingInstruction(target,data)\n  _append_child(self.curNode,node)\n  if self._filter and self._filter.acceptNode(node)==FILTER_REJECT:\n   self.curNode.removeChild(node)\n   \n def character_data_handler_cdata(self,data):\n  childNodes=self.curNode.childNodes\n  if self._cdata:\n   if (self._cdata_continue\n   and childNodes[-1].nodeType ==CDATA_SECTION_NODE):\n    childNodes[-1].appendData(data)\n    return\n   node=self.document.createCDATASection(data)\n   self._cdata_continue=True\n  elif childNodes and childNodes[-1].nodeType ==TEXT_NODE:\n   node=childNodes[-1]\n   value=node.data+data\n   node.data=value\n   return\n  else :\n   node=minidom.Text()\n   node.data=data\n   node.ownerDocument=self.document\n  _append_child(self.curNode,node)\n  \n def character_data_handler(self,data):\n  childNodes=self.curNode.childNodes\n  if childNodes and childNodes[-1].nodeType ==TEXT_NODE:\n   node=childNodes[-1]\n   node.data=node.data+data\n   return\n  node=minidom.Text()\n  node.data=node.data+data\n  node.ownerDocument=self.document\n  _append_child(self.curNode,node)\n  \n def entity_decl_handler(self,entityName,is_parameter_entity,value,\n base,systemId,publicId,notationName):\n  if is_parameter_entity:\n  \n   return\n  if not self._options.entities:\n   return\n  node=self.document._create_entity(entityName,publicId,\n  systemId,notationName)\n  if value is not None :\n  \n  \n   child=self.document.createTextNode(value)\n   node.childNodes.append(child)\n  self.document.doctype.entities._seq.append(node)\n  if self._filter and self._filter.acceptNode(node)==FILTER_REJECT:\n   del self.document.doctype.entities._seq[-1]\n   \n def notation_decl_handler(self,notationName,base,systemId,publicId):\n  node=self.document._create_notation(notationName,publicId,systemId)\n  self.document.doctype.notations._seq.append(node)\n  if self._filter and self._filter.acceptNode(node)==FILTER_ACCEPT:\n   del self.document.doctype.notations._seq[-1]\n   \n def comment_handler(self,data):\n  node=self.document.createComment(data)\n  _append_child(self.curNode,node)\n  if self._filter and self._filter.acceptNode(node)==FILTER_REJECT:\n   self.curNode.removeChild(node)\n   \n def start_cdata_section_handler(self):\n  self._cdata=True\n  self._cdata_continue=False\n  \n def end_cdata_section_handler(self):\n  self._cdata=False\n  self._cdata_continue=False\n  \n def external_entity_ref_handler(self,context,base,systemId,publicId):\n  return 1\n  \n def first_element_handler(self,name,attributes):\n  if self._filter is None and not self._elem_info:\n   self._finish_end_element=id\n  self.getParser().StartElementHandler=self.start_element_handler\n  self.start_element_handler(name,attributes)\n  \n def start_element_handler(self,name,attributes):\n  node=self.document.createElement(name)\n  _append_child(self.curNode,node)\n  self.curNode=node\n  \n  if attributes:\n   for i in range(0,len(attributes),2):\n    a=minidom.Attr(attributes[i],EMPTY_NAMESPACE,\n    None ,EMPTY_PREFIX)\n    value=attributes[i+1]\n    a.value=value\n    a.ownerDocument=self.document\n    _set_attribute_node(node,a)\n    \n  if node is not self.document.documentElement:\n   self._finish_start_element(node)\n   \n def _finish_start_element(self,node):\n  if self._filter:\n  \n  \n   if node is self.document.documentElement:\n    return\n   filt=self._filter.startContainer(node)\n   if filt ==FILTER_REJECT:\n   \n    Rejecter(self)\n   elif filt ==FILTER_SKIP:\n   \n   \n    Skipper(self)\n   else :\n    return\n   self.curNode=node.parentNode\n   node.parentNode.removeChild(node)\n   node.unlink()\n   \n   \n   \n   \n def end_element_handler(self,name):\n  curNode=self.curNode\n  self.curNode=curNode.parentNode\n  self._finish_end_element(curNode)\n  \n def _finish_end_element(self,curNode):\n  info=self._elem_info.get(curNode.tagName)\n  if info:\n   self._handle_white_text_nodes(curNode,info)\n  if self._filter:\n   if curNode is self.document.documentElement:\n    return\n   if self._filter.acceptNode(curNode)==FILTER_REJECT:\n    self.curNode.removeChild(curNode)\n    curNode.unlink()\n    \n def _handle_white_text_nodes(self,node,info):\n  if (self._options.whitespace_in_element_content\n  or not info.isElementContent()):\n   return\n   \n   \n   \n   \n  L=[]\n  for child in node.childNodes:\n   if child.nodeType ==TEXT_NODE and not child.data.strip():\n    L.append(child)\n    \n    \n  for child in L:\n   node.removeChild(child)\n   \n def element_decl_handler(self,name,model):\n  info=self._elem_info.get(name)\n  if info is None :\n   self._elem_info[name]=ElementInfo(name,model)\n  else :\n   assert info._model is None\n   info._model=model\n   \n def attlist_decl_handler(self,elem,name,type,default,required):\n  info=self._elem_info.get(elem)\n  if info is None :\n   info=ElementInfo(elem)\n   self._elem_info[elem]=info\n  info._attr_info.append(\n  [None ,name,None ,None ,default,0,type,required])\n  \n def xml_decl_handler(self,version,encoding,standalone):\n  self.document.version=version\n  self.document.encoding=encoding\n  \n  if standalone >=0:\n   if standalone:\n    self.document.standalone=True\n   else :\n    self.document.standalone=False\n    \n    \n    \n    \n_ALLOWED_FILTER_RETURNS=(FILTER_ACCEPT,FILTER_REJECT,FILTER_SKIP)\n\nclass FilterVisibilityController(object):\n ''\n \n \n __slots__='filter',\n \n def __init__(self,filter):\n  self.filter=filter\n  \n def startContainer(self,node):\n  mask=self._nodetype_mask[node.nodeType]\n  if self.filter.whatToShow&mask:\n   val=self.filter.startContainer(node)\n   if val ==FILTER_INTERRUPT:\n    raise ParseEscape\n   if val not in _ALLOWED_FILTER_RETURNS:\n    raise ValueError(\n    \"startContainer() returned illegal value: \"+repr(val))\n   return val\n  else :\n   return FILTER_ACCEPT\n   \n def acceptNode(self,node):\n  mask=self._nodetype_mask[node.nodeType]\n  if self.filter.whatToShow&mask:\n   val=self.filter.acceptNode(node)\n   if val ==FILTER_INTERRUPT:\n    raise ParseEscape\n   if val ==FILTER_SKIP:\n   \n    parent=node.parentNode\n    for child in node.childNodes[:]:\n     parent.appendChild(child)\n     \n    return FILTER_REJECT\n   if val not in _ALLOWED_FILTER_RETURNS:\n    raise ValueError(\n    \"acceptNode() returned illegal value: \"+repr(val))\n   return val\n  else :\n   return FILTER_ACCEPT\n   \n _nodetype_mask={\n Node.ELEMENT_NODE:NodeFilter.SHOW_ELEMENT,\n Node.ATTRIBUTE_NODE:NodeFilter.SHOW_ATTRIBUTE,\n Node.TEXT_NODE:NodeFilter.SHOW_TEXT,\n Node.CDATA_SECTION_NODE:NodeFilter.SHOW_CDATA_SECTION,\n Node.ENTITY_REFERENCE_NODE:NodeFilter.SHOW_ENTITY_REFERENCE,\n Node.ENTITY_NODE:NodeFilter.SHOW_ENTITY,\n Node.PROCESSING_INSTRUCTION_NODE:NodeFilter.SHOW_PROCESSING_INSTRUCTION,\n Node.COMMENT_NODE:NodeFilter.SHOW_COMMENT,\n Node.DOCUMENT_NODE:NodeFilter.SHOW_DOCUMENT,\n Node.DOCUMENT_TYPE_NODE:NodeFilter.SHOW_DOCUMENT_TYPE,\n Node.DOCUMENT_FRAGMENT_NODE:NodeFilter.SHOW_DOCUMENT_FRAGMENT,\n Node.NOTATION_NODE:NodeFilter.SHOW_NOTATION,\n }\n \n \nclass FilterCrutch(object):\n __slots__='_builder','_level','_old_start','_old_end'\n \n def __init__(self,builder):\n  self._level=0\n  self._builder=builder\n  parser=builder._parser\n  self._old_start=parser.StartElementHandler\n  self._old_end=parser.EndElementHandler\n  parser.StartElementHandler=self.start_element_handler\n  parser.EndElementHandler=self.end_element_handler\n  \nclass Rejecter(FilterCrutch):\n __slots__=()\n \n def __init__(self,builder):\n  FilterCrutch.__init__(self,builder)\n  parser=builder._parser\n  for name in (\"ProcessingInstructionHandler\",\n  \"CommentHandler\",\n  \"CharacterDataHandler\",\n  \"StartCdataSectionHandler\",\n  \"EndCdataSectionHandler\",\n  \"ExternalEntityRefHandler\",\n  ):\n   setattr(parser,name,None )\n   \n def start_element_handler(self,*args):\n  self._level=self._level+1\n  \n def end_element_handler(self,*args):\n  if self._level ==0:\n  \n   parser=self._builder._parser\n   self._builder.install(parser)\n   parser.StartElementHandler=self._old_start\n   parser.EndElementHandler=self._old_end\n  else :\n   self._level=self._level -1\n   \nclass Skipper(FilterCrutch):\n __slots__=()\n \n def start_element_handler(self,*args):\n  node=self._builder.curNode\n  self._old_start(*args)\n  if self._builder.curNode is not node:\n   self._level=self._level+1\n   \n def end_element_handler(self,*args):\n  if self._level ==0:\n  \n  \n   self._builder._parser.StartElementHandler=self._old_start\n   self._builder._parser.EndElementHandler=self._old_end\n   self._builder=None\n  else :\n   self._level=self._level -1\n   self._old_end(*args)\n   \n   \n   \n   \n   \n_FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID=\"http://xml.python.org/entities/fragment-builder/internal\"\n\n_FRAGMENT_BUILDER_TEMPLATE=(\n'''\\\n<!DOCTYPE wrapper\n  %%s [\n  <!ENTITY fragment-builder-internal\n    SYSTEM \"%s\">\n%%s\n]>\n<wrapper %%s\n>&fragment-builder-internal;</wrapper>'''\n%_FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID)\n\n\nclass FragmentBuilder(ExpatBuilder):\n ''\n\n\n\n\n\n \n \n def __init__(self,context,options=None ):\n  if context.nodeType ==DOCUMENT_NODE:\n   self.originalDocument=context\n   self.context=context\n  else :\n   self.originalDocument=context.ownerDocument\n   self.context=context\n  ExpatBuilder.__init__(self,options)\n  \n def reset(self):\n  ExpatBuilder.reset(self)\n  self.fragment=None\n  \n def parseFile(self,file):\n  ''\n  \n  return self.parseString(file.read())\n  \n def parseString(self,string):\n  ''\n  \n  self._source=string\n  parser=self.getParser()\n  doctype=self.originalDocument.doctype\n  ident=\"\"\n  if doctype:\n   subset=doctype.internalSubset or self._getDeclarations()\n   if doctype.publicId:\n    ident=('PUBLIC \"%s\" \"%s\"'\n    %(doctype.publicId,doctype.systemId))\n   elif doctype.systemId:\n    ident='SYSTEM \"%s\"'%doctype.systemId\n  else :\n   subset=\"\"\n  nsattrs=self._getNSattrs()\n  document=_FRAGMENT_BUILDER_TEMPLATE %(ident,subset,nsattrs)\n  try :\n   parser.Parse(document,1)\n  except :\n   self.reset()\n   raise\n  fragment=self.fragment\n  self.reset()\n  \n  return fragment\n  \n def _getDeclarations(self):\n  ''\n\n\n\n  \n  doctype=self.context.ownerDocument.doctype\n  s=\"\"\n  if doctype:\n   for i in range(doctype.notations.length):\n    notation=doctype.notations.item(i)\n    if s:\n     s=s+\"\\n  \"\n    s=\"%s<!NOTATION %s\"%(s,notation.nodeName)\n    if notation.publicId:\n     s='%s PUBLIC \"%s\"\\n             \"%s\">'     %(s,notation.publicId,notation.systemId)\n    else :\n     s='%s SYSTEM \"%s\">'%(s,notation.systemId)\n   for i in range(doctype.entities.length):\n    entity=doctype.entities.item(i)\n    if s:\n     s=s+\"\\n  \"\n    s=\"%s<!ENTITY %s\"%(s,entity.nodeName)\n    if entity.publicId:\n     s='%s PUBLIC \"%s\"\\n             \"%s\"'     %(s,entity.publicId,entity.systemId)\n    elif entity.systemId:\n     s='%s SYSTEM \"%s\"'%(s,entity.systemId)\n    else :\n     s='%s \"%s\"'%(s,entity.firstChild.data)\n    if entity.notationName:\n     s=\"%s NOTATION %s\"%(s,entity.notationName)\n    s=s+\">\"\n  return s\n  \n def _getNSattrs(self):\n  return\"\"\n  \n def external_entity_ref_handler(self,context,base,systemId,publicId):\n  if systemId ==_FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID:\n  \n  \n   old_document=self.document\n   old_cur_node=self.curNode\n   parser=self._parser.ExternalEntityParserCreate(context)\n   \n   self.document=self.originalDocument\n   self.fragment=self.document.createDocumentFragment()\n   self.curNode=self.fragment\n   try :\n    parser.Parse(self._source,1)\n   finally :\n    self.curNode=old_cur_node\n    self.document=old_document\n    self._source=None\n   return -1\n  else :\n   return ExpatBuilder.external_entity_ref_handler(\n   self,context,base,systemId,publicId)\n   \n   \nclass Namespaces:\n ''\n \n def _initNamespaces(self):\n \n \n  self._ns_ordered_prefixes=[]\n  \n def createParser(self):\n  ''\n  parser=expat.ParserCreate(namespace_separator=\" \")\n  parser.namespace_prefixes=True\n  return parser\n  \n def install(self,parser):\n  ''\n  ExpatBuilder.install(self,parser)\n  if self._options.namespace_declarations:\n   parser.StartNamespaceDeclHandler=(\n   self.start_namespace_decl_handler)\n   \n def start_namespace_decl_handler(self,prefix,uri):\n  ''\n  self._ns_ordered_prefixes.append((prefix,uri))\n  \n def start_element_handler(self,name,attributes):\n  if' 'in name:\n   uri,localname,prefix,qname=_parse_ns_name(self,name)\n  else :\n   uri=EMPTY_NAMESPACE\n   qname=name\n   localname=None\n   prefix=EMPTY_PREFIX\n  node=minidom.Element(qname,uri,prefix,localname)\n  node.ownerDocument=self.document\n  _append_child(self.curNode,node)\n  self.curNode=node\n  \n  if self._ns_ordered_prefixes:\n   for prefix,uri in self._ns_ordered_prefixes:\n    if prefix:\n     a=minidom.Attr(_intern(self,'xmlns:'+prefix),\n     XMLNS_NAMESPACE,prefix,\"xmlns\")\n    else :\n     a=minidom.Attr(\"xmlns\",XMLNS_NAMESPACE,\n     \"xmlns\",EMPTY_PREFIX)\n    a.value=uri\n    a.ownerDocument=self.document\n    _set_attribute_node(node,a)\n   del self._ns_ordered_prefixes[:]\n   \n  if attributes:\n   node._ensure_attributes()\n   _attrs=node._attrs\n   _attrsNS=node._attrsNS\n   for i in range(0,len(attributes),2):\n    aname=attributes[i]\n    value=attributes[i+1]\n    if' 'in aname:\n     uri,localname,prefix,qname=_parse_ns_name(self,aname)\n     a=minidom.Attr(qname,uri,localname,prefix)\n     _attrs[qname]=a\n     _attrsNS[(uri,localname)]=a\n    else :\n     a=minidom.Attr(aname,EMPTY_NAMESPACE,\n     aname,EMPTY_PREFIX)\n     _attrs[aname]=a\n     _attrsNS[(EMPTY_NAMESPACE,aname)]=a\n    a.ownerDocument=self.document\n    a.value=value\n    a.ownerElement=node\n    \n if __debug__:\n \n \n \n \n \n  def end_element_handler(self,name):\n   curNode=self.curNode\n   if' 'in name:\n    uri,localname,prefix,qname=_parse_ns_name(self,name)\n    assert (curNode.namespaceURI ==uri\n    and curNode.localName ==localname\n    and curNode.prefix ==prefix),    \"element stack messed up! (namespace)\"\n   else :\n    assert curNode.nodeName ==name,    \"element stack messed up - bad nodeName\"\n    assert curNode.namespaceURI ==EMPTY_NAMESPACE,    \"element stack messed up - bad namespaceURI\"\n   self.curNode=curNode.parentNode\n   self._finish_end_element(curNode)\n   \n   \nclass ExpatBuilderNS(Namespaces,ExpatBuilder):\n ''\n \n def reset(self):\n  ExpatBuilder.reset(self)\n  self._initNamespaces()\n  \n  \nclass FragmentBuilderNS(Namespaces,FragmentBuilder):\n ''\n \n def reset(self):\n  FragmentBuilder.reset(self)\n  self._initNamespaces()\n  \n def _getNSattrs(self):\n  ''\n  \n  \n  \n  \n  \n  \n  attrs=\"\"\n  context=self.context\n  L=[]\n  while context:\n   if hasattr(context,'_ns_prefix_uri'):\n    for prefix,uri in context._ns_prefix_uri.items():\n    \n     if prefix in L:\n      continue\n     L.append(prefix)\n     if prefix:\n      declname=\"xmlns:\"+prefix\n     else :\n      declname=\"xmlns\"\n     if attrs:\n      attrs=\"%s\\n    %s='%s'\"%(attrs,declname,uri)\n     else :\n      attrs=\" %s='%s'\"%(declname,uri)\n   context=context.parentNode\n  return attrs\n  \n  \nclass ParseEscape(Exception):\n ''\n pass\n \nclass InternalSubsetExtractor(ExpatBuilder):\n ''\n \n subset=None\n \n def getSubset(self):\n  ''\n  return self.subset\n  \n def parseFile(self,file):\n  try :\n   ExpatBuilder.parseFile(self,file)\n  except ParseEscape:\n   pass\n   \n def parseString(self,string):\n  try :\n   ExpatBuilder.parseString(self,string)\n  except ParseEscape:\n   pass\n   \n def install(self,parser):\n  parser.StartDoctypeDeclHandler=self.start_doctype_decl_handler\n  parser.StartElementHandler=self.start_element_handler\n  \n def start_doctype_decl_handler(self,name,publicId,systemId,\n has_internal_subset):\n  if has_internal_subset:\n   parser=self.getParser()\n   self.subset=[]\n   parser.DefaultHandler=self.subset.append\n   parser.EndDoctypeDeclHandler=self.end_doctype_decl_handler\n  else :\n   raise ParseEscape()\n   \n def end_doctype_decl_handler(self):\n  s=''.join(self.subset).replace('\\r\\n','\\n').replace('\\r','\\n')\n  self.subset=s\n  raise ParseEscape()\n  \n def start_element_handler(self,name,attrs):\n  raise ParseEscape()\n  \n  \ndef parse(file,namespaces=True ):\n ''\n\n\n \n if namespaces:\n  builder=ExpatBuilderNS()\n else :\n  builder=ExpatBuilder()\n  \n if isinstance(file,str):\n  fp=open(file,'rb')\n  try :\n   result=builder.parseFile(fp)\n  finally :\n   fp.close()\n else :\n  result=builder.parseFile(file)\n return result\n \n \ndef parseString(string,namespaces=True ):\n ''\n\n \n if namespaces:\n  builder=ExpatBuilderNS()\n else :\n  builder=ExpatBuilder()\n return builder.parseString(string)\n \n \ndef parseFragment(file,context,namespaces=True ):\n ''\n\n\n\n\n \n if namespaces:\n  builder=FragmentBuilderNS(context)\n else :\n  builder=FragmentBuilder(context)\n  \n if isinstance(file,str):\n  fp=open(file,'rb')\n  try :\n   result=builder.parseFile(fp)\n  finally :\n   fp.close()\n else :\n  result=builder.parseFile(file)\n return result\n \n \ndef parseFragmentString(string,context,namespaces=True ):\n ''\n\n\n \n if namespaces:\n  builder=FragmentBuilderNS(context)\n else :\n  builder=FragmentBuilder(context)\n return builder.parseString(string)\n \n \ndef makeBuilder(options):\n ''\n if options.namespaces:\n  return ExpatBuilderNS(options)\n else :\n  return ExpatBuilder(options)\n"], "encodings.tis_620": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='tis-620',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\ufffe'\n'\\u0e01'\n'\\u0e02'\n'\\u0e03'\n'\\u0e04'\n'\\u0e05'\n'\\u0e06'\n'\\u0e07'\n'\\u0e08'\n'\\u0e09'\n'\\u0e0a'\n'\\u0e0b'\n'\\u0e0c'\n'\\u0e0d'\n'\\u0e0e'\n'\\u0e0f'\n'\\u0e10'\n'\\u0e11'\n'\\u0e12'\n'\\u0e13'\n'\\u0e14'\n'\\u0e15'\n'\\u0e16'\n'\\u0e17'\n'\\u0e18'\n'\\u0e19'\n'\\u0e1a'\n'\\u0e1b'\n'\\u0e1c'\n'\\u0e1d'\n'\\u0e1e'\n'\\u0e1f'\n'\\u0e20'\n'\\u0e21'\n'\\u0e22'\n'\\u0e23'\n'\\u0e24'\n'\\u0e25'\n'\\u0e26'\n'\\u0e27'\n'\\u0e28'\n'\\u0e29'\n'\\u0e2a'\n'\\u0e2b'\n'\\u0e2c'\n'\\u0e2d'\n'\\u0e2e'\n'\\u0e2f'\n'\\u0e30'\n'\\u0e31'\n'\\u0e32'\n'\\u0e33'\n'\\u0e34'\n'\\u0e35'\n'\\u0e36'\n'\\u0e37'\n'\\u0e38'\n'\\u0e39'\n'\\u0e3a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0e3f'\n'\\u0e40'\n'\\u0e41'\n'\\u0e42'\n'\\u0e43'\n'\\u0e44'\n'\\u0e45'\n'\\u0e46'\n'\\u0e47'\n'\\u0e48'\n'\\u0e49'\n'\\u0e4a'\n'\\u0e4b'\n'\\u0e4c'\n'\\u0e4d'\n'\\u0e4e'\n'\\u0e4f'\n'\\u0e50'\n'\\u0e51'\n'\\u0e52'\n'\\u0e53'\n'\\u0e54'\n'\\u0e55'\n'\\u0e56'\n'\\u0e57'\n'\\u0e58'\n'\\u0e59'\n'\\u0e5a'\n'\\u0e5b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "difflib": [".py", "#! /usr/bin/env python3\n\n\"\"\"\nModule difflib -- helpers for computing deltas between objects.\n\nFunction get_close_matches(word, possibilities, n=3, cutoff=0.6):\n    Use SequenceMatcher to return list of the best \"good enough\" matches.\n\nFunction context_diff(a, b):\n    For two lists of strings, return a delta in context diff format.\n\nFunction ndiff(a, b):\n    Return a delta: the difference between `a` and `b` (lists of strings).\n\nFunction restore(delta, which):\n    Return one of the two sequences that generated an ndiff delta.\n\nFunction unified_diff(a, b):\n    For two lists of strings, return a delta in unified diff format.\n\nClass SequenceMatcher:\n    A flexible class for comparing pairs of sequences of any type.\n\nClass Differ:\n    For producing human-readable deltas from sequences of lines of text.\n\nClass HtmlDiff:\n    For producing HTML side by side comparison with change highlights.\n\"\"\"\n\n__all__=['get_close_matches','ndiff','restore','SequenceMatcher',\n'Differ','IS_CHARACTER_JUNK','IS_LINE_JUNK','context_diff',\n'unified_diff','HtmlDiff','Match']\n\nimport warnings\nimport heapq\nfrom collections import namedtuple as _namedtuple\n\nMatch=_namedtuple('Match','a b size')\n\ndef _calculate_ratio(matches,length):\n if length:\n  return 2.0 *matches /length\n return 1.0\n \nclass SequenceMatcher:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,isjunk=None ,a='',b='',autojunk=True ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  self.isjunk=isjunk\n  self.a=self.b=None\n  self.autojunk=autojunk\n  self.set_seqs(a,b)\n  \n def set_seqs(self,a,b):\n  ''\n\n\n\n\n\n  \n  \n  self.set_seq1(a)\n  self.set_seq2(b)\n  \n def set_seq1(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if a is self.a:\n   return\n  self.a=a\n  self.matching_blocks=self.opcodes=None\n  \n def set_seq2(self,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if b is self.b:\n   return\n  self.b=b\n  self.matching_blocks=self.opcodes=None\n  self.fullbcount=None\n  self.__chain_b()\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def __chain_b(self):\n \n \n \n \n \n \n \n \n \n \n  b=self.b\n  self.b2j=b2j={}\n  \n  for i,elt in enumerate(b):\n   indices=b2j.setdefault(elt,[])\n   indices.append(i)\n   \n   \n  self.bjunk=junk=set()\n  isjunk=self.isjunk\n  if isjunk:\n   for elt in b2j.keys():\n    if isjunk(elt):\n     junk.add(elt)\n   for elt in junk:\n    del b2j[elt]\n    \n    \n  self.bpopular=popular=set()\n  n=len(b)\n  if self.autojunk and n >=200:\n   ntest=n //100+1\n   for elt,idxs in b2j.items():\n    if len(idxs)>ntest:\n     popular.add(elt)\n   for elt in popular:\n    del b2j[elt]\n    \n def isbjunk(self,item):\n  ''\n  warnings.warn(\"'SequenceMatcher().isbjunk(item)' is deprecated;\\n\"\n  \"use 'item in SMinstance.bjunk' instead.\",\n  DeprecationWarning,2)\n  return item in self.bjunk\n  \n def isbpopular(self,item):\n  ''\n  warnings.warn(\"'SequenceMatcher().isbpopular(item)' is deprecated;\\n\"\n  \"use 'item in SMinstance.bpopular' instead.\",\n  DeprecationWarning,2)\n  return item in self.bpopular\n  \n def find_longest_match(self,alo,ahi,blo,bhi):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  a,b,b2j,isbjunk=self.a,self.b,self.b2j,self.bjunk.__contains__\n  besti,bestj,bestsize=alo,blo,0\n  \n  \n  \n  j2len={}\n  nothing=[]\n  for i in range(alo,ahi):\n  \n  \n   j2lenget=j2len.get\n   newj2len={}\n   for j in b2j.get(a[i],nothing):\n   \n    if j <blo:\n     continue\n    if j >=bhi:\n     break\n    k=newj2len[j]=j2lenget(j -1,0)+1\n    if k >bestsize:\n     besti,bestj,bestsize=i -k+1,j -k+1,k\n   j2len=newj2len\n   \n   \n   \n   \n   \n  while besti >alo and bestj >blo and  not isbjunk(b[bestj -1])and  a[besti -1]==b[bestj -1]:\n   besti,bestj,bestsize=besti -1,bestj -1,bestsize+1\n  while besti+bestsize <ahi and bestj+bestsize <bhi and  not isbjunk(b[bestj+bestsize])and  a[besti+bestsize]==b[bestj+bestsize]:\n   bestsize +=1\n   \n   \n   \n   \n   \n   \n   \n   \n  while besti >alo and bestj >blo and  isbjunk(b[bestj -1])and  a[besti -1]==b[bestj -1]:\n   besti,bestj,bestsize=besti -1,bestj -1,bestsize+1\n  while besti+bestsize <ahi and bestj+bestsize <bhi and  isbjunk(b[bestj+bestsize])and  a[besti+bestsize]==b[bestj+bestsize]:\n   bestsize=bestsize+1\n   \n  return Match(besti,bestj,bestsize)\n  \n def get_matching_blocks(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if self.matching_blocks is not None :\n   return self.matching_blocks\n  la,lb=len(self.a),len(self.b)\n  \n  \n  \n  \n  \n  \n  \n  queue=[(0,la,0,lb)]\n  matching_blocks=[]\n  while queue:\n   alo,ahi,blo,bhi=queue.pop()\n   i,j,k=x=self.find_longest_match(alo,ahi,blo,bhi)\n   \n   \n   \n   if k:\n    matching_blocks.append(x)\n    if alo <i and blo <j:\n     queue.append((alo,i,blo,j))\n    if i+k <ahi and j+k <bhi:\n     queue.append((i+k,ahi,j+k,bhi))\n  matching_blocks.sort()\n  \n  \n  \n  \n  i1=j1=k1=0\n  non_adjacent=[]\n  for i2,j2,k2 in matching_blocks:\n  \n   if i1+k1 ==i2 and j1+k1 ==j2:\n   \n   \n   \n    k1 +=k2\n   else :\n   \n   \n   \n    if k1:\n     non_adjacent.append((i1,j1,k1))\n    i1,j1,k1=i2,j2,k2\n  if k1:\n   non_adjacent.append((i1,j1,k1))\n   \n  non_adjacent.append((la,lb,0))\n  self.matching_blocks=non_adjacent\n  return map(Match._make,self.matching_blocks)\n  \n def get_opcodes(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if self.opcodes is not None :\n   return self.opcodes\n  i=j=0\n  self.opcodes=answer=[]\n  for ai,bj,size in self.get_matching_blocks():\n  \n  \n  \n  \n  \n   tag=''\n   if i <ai and j <bj:\n    tag='replace'\n   elif i <ai:\n    tag='delete'\n   elif j <bj:\n    tag='insert'\n   if tag:\n    answer.append((tag,i,ai,j,bj))\n   i,j=ai+size,bj+size\n   \n   \n   if size:\n    answer.append(('equal',ai,i,bj,j))\n  return answer\n  \n def get_grouped_opcodes(self,n=3):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  codes=self.get_opcodes()\n  if not codes:\n   codes=[(\"equal\",0,1,0,1)]\n   \n  if codes[0][0]=='equal':\n   tag,i1,i2,j1,j2=codes[0]\n   codes[0]=tag,max(i1,i2 -n),i2,max(j1,j2 -n),j2\n  if codes[-1][0]=='equal':\n   tag,i1,i2,j1,j2=codes[-1]\n   codes[-1]=tag,i1,min(i2,i1+n),j1,min(j2,j1+n)\n   \n  nn=n+n\n  group=[]\n  for tag,i1,i2,j1,j2 in codes:\n  \n  \n   if tag =='equal'and i2 -i1 >nn:\n    group.append((tag,i1,min(i2,i1+n),j1,min(j2,j1+n)))\n    yield group\n    group=[]\n    i1,j1=max(i1,i2 -n),max(j1,j2 -n)\n   group.append((tag,i1,i2,j1,j2))\n  if group and not (len(group)==1 and group[0][0]=='equal'):\n   yield group\n   \n def ratio(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  matches=sum(triple[-1]for triple in self.get_matching_blocks())\n  return _calculate_ratio(matches,len(self.a)+len(self.b))\n  \n def quick_ratio(self):\n  ''\n\n\n\n  \n  \n  \n  \n  \n  if self.fullbcount is None :\n   self.fullbcount=fullbcount={}\n   for elt in self.b:\n    fullbcount[elt]=fullbcount.get(elt,0)+1\n  fullbcount=self.fullbcount\n  \n  \n  avail={}\n  availhas,matches=avail.__contains__,0\n  for elt in self.a:\n   if availhas(elt):\n    numb=avail[elt]\n   else :\n    numb=fullbcount.get(elt,0)\n   avail[elt]=numb -1\n   if numb >0:\n    matches=matches+1\n  return _calculate_ratio(matches,len(self.a)+len(self.b))\n  \n def real_quick_ratio(self):\n  ''\n\n\n\n  \n  \n  la,lb=len(self.a),len(self.b)\n  \n  \n  return _calculate_ratio(min(la,lb),la+lb)\n  \ndef get_close_matches(word,possibilities,n=3,cutoff=0.6):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not n >0:\n  raise ValueError(\"n must be > 0: %r\"%(n,))\n if not 0.0 <=cutoff <=1.0:\n  raise ValueError(\"cutoff must be in [0.0, 1.0]: %r\"%(cutoff,))\n result=[]\n s=SequenceMatcher()\n s.set_seq2(word)\n for x in possibilities:\n  s.set_seq1(x)\n  if s.real_quick_ratio()>=cutoff and  s.quick_ratio()>=cutoff and  s.ratio()>=cutoff:\n   result.append((s.ratio(),x))\n   \n   \n result=heapq.nlargest(n,result)\n \n return [x for score,x in result]\n \ndef _count_leading(line,ch):\n ''\n\n\n\n\n\n\n \n \n i,n=0,len(line)\n while i <n and line[i]==ch:\n  i +=1\n return i\n \nclass Differ:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,linejunk=None ,charjunk=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  self.linejunk=linejunk\n  self.charjunk=charjunk\n  \n def compare(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  cruncher=SequenceMatcher(self.linejunk,a,b)\n  for tag,alo,ahi,blo,bhi in cruncher.get_opcodes():\n   if tag =='replace':\n    g=self._fancy_replace(a,alo,ahi,b,blo,bhi)\n   elif tag =='delete':\n    g=self._dump('-',a,alo,ahi)\n   elif tag =='insert':\n    g=self._dump('+',b,blo,bhi)\n   elif tag =='equal':\n    g=self._dump(' ',a,alo,ahi)\n   else :\n    raise ValueError('unknown tag %r'%(tag,))\n    \n   for line in g:\n    yield line\n    \n def _dump(self,tag,x,lo,hi):\n  ''\n  for i in range(lo,hi):\n   yield'%s %s'%(tag,x[i])\n   \n def _plain_replace(self,a,alo,ahi,b,blo,bhi):\n  assert alo <ahi and blo <bhi\n  \n  \n  if bhi -blo <ahi -alo:\n   first=self._dump('+',b,blo,bhi)\n   second=self._dump('-',a,alo,ahi)\n  else :\n   first=self._dump('-',a,alo,ahi)\n   second=self._dump('+',b,blo,bhi)\n   \n  for g in first,second:\n   for line in g:\n    yield line\n    \n def _fancy_replace(self,a,alo,ahi,b,blo,bhi):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  best_ratio,cutoff=0.74,0.75\n  cruncher=SequenceMatcher(self.charjunk)\n  eqi,eqj=None ,None\n  \n  \n  \n  \n  for j in range(blo,bhi):\n   bj=b[j]\n   cruncher.set_seq2(bj)\n   for i in range(alo,ahi):\n    ai=a[i]\n    if ai ==bj:\n     if eqi is None :\n      eqi,eqj=i,j\n     continue\n    cruncher.set_seq1(ai)\n    \n    \n    \n    \n    \n    \n    if cruncher.real_quick_ratio()>best_ratio and    cruncher.quick_ratio()>best_ratio and    cruncher.ratio()>best_ratio:\n     best_ratio,best_i,best_j=cruncher.ratio(),i,j\n  if best_ratio <cutoff:\n  \n   if eqi is None :\n   \n    for line in self._plain_replace(a,alo,ahi,b,blo,bhi):\n     yield line\n    return\n    \n   best_i,best_j,best_ratio=eqi,eqj,1.0\n  else :\n  \n   eqi=None\n   \n   \n   \n   \n   \n  for line in self._fancy_helper(a,alo,best_i,b,blo,best_j):\n   yield line\n   \n   \n  aelt,belt=a[best_i],b[best_j]\n  if eqi is None :\n  \n   atags=btags=\"\"\n   cruncher.set_seqs(aelt,belt)\n   for tag,ai1,ai2,bj1,bj2 in cruncher.get_opcodes():\n    la,lb=ai2 -ai1,bj2 -bj1\n    if tag =='replace':\n     atags +='^'*la\n     btags +='^'*lb\n    elif tag =='delete':\n     atags +='-'*la\n    elif tag =='insert':\n     btags +='+'*lb\n    elif tag =='equal':\n     atags +=' '*la\n     btags +=' '*lb\n    else :\n     raise ValueError('unknown tag %r'%(tag,))\n   for line in self._qformat(aelt,belt,atags,btags):\n    yield line\n  else :\n  \n   yield'  '+aelt\n   \n   \n  for line in self._fancy_helper(a,best_i+1,ahi,b,best_j+1,bhi):\n   yield line\n   \n def _fancy_helper(self,a,alo,ahi,b,blo,bhi):\n  g=[]\n  if alo <ahi:\n   if blo <bhi:\n    g=self._fancy_replace(a,alo,ahi,b,blo,bhi)\n   else :\n    g=self._dump('-',a,alo,ahi)\n  elif blo <bhi:\n   g=self._dump('+',b,blo,bhi)\n   \n  for line in g:\n   yield line\n   \n def _qformat(self,aline,bline,atags,btags):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  common=min(_count_leading(aline,\"\\t\"),\n  _count_leading(bline,\"\\t\"))\n  common=min(common,_count_leading(atags[:common],\" \"))\n  common=min(common,_count_leading(btags[:common],\" \"))\n  atags=atags[common:].rstrip()\n  btags=btags[common:].rstrip()\n  \n  yield\"- \"+aline\n  if atags:\n   yield\"? %s%s\\n\"%(\"\\t\"*common,atags)\n   \n  yield\"+ \"+bline\n  if btags:\n   yield\"? %s%s\\n\"%(\"\\t\"*common,btags)\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \nimport re\n\ndef IS_LINE_JUNK(line,pat=re.compile(r\"\\s*#?\\s*$\").match):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n return pat(line)is not None\n \ndef IS_CHARACTER_JUNK(ch,ws=\" \\t\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n return ch in ws\n \n \n \n \n \n \ndef _format_range_unified(start,stop):\n ''\n \n beginning=start+1\n length=stop -start\n if length ==1:\n  return'{}'.format(beginning)\n if not length:\n  beginning -=1\n return'{},{}'.format(beginning,length)\n \ndef unified_diff(a,b,fromfile='',tofile='',fromfiledate='',\ntofiledate='',n=3,lineterm='\\n'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n started=False\n for group in SequenceMatcher(None ,a,b).get_grouped_opcodes(n):\n  if not started:\n   started=True\n   fromdate='\\t{}'.format(fromfiledate)if fromfiledate else''\n   todate='\\t{}'.format(tofiledate)if tofiledate else''\n   yield'--- {}{}{}'.format(fromfile,fromdate,lineterm)\n   yield'+++ {}{}{}'.format(tofile,todate,lineterm)\n   \n  first,last=group[0],group[-1]\n  file1_range=_format_range_unified(first[1],last[2])\n  file2_range=_format_range_unified(first[3],last[4])\n  yield'@@ -{} +{} @@{}'.format(file1_range,file2_range,lineterm)\n  \n  for tag,i1,i2,j1,j2 in group:\n   if tag =='equal':\n    for line in a[i1:i2]:\n     yield' '+line\n    continue\n   if tag in {'replace','delete'}:\n    for line in a[i1:i2]:\n     yield'-'+line\n   if tag in {'replace','insert'}:\n    for line in b[j1:j2]:\n     yield'+'+line\n     \n     \n     \n     \n     \n     \ndef _format_range_context(start,stop):\n ''\n \n beginning=start+1\n length=stop -start\n if not length:\n  beginning -=1\n if length <=1:\n  return'{}'.format(beginning)\n return'{},{}'.format(beginning,beginning+length -1)\n \n \ndef context_diff(a,b,fromfile='',tofile='',\nfromfiledate='',tofiledate='',n=3,lineterm='\\n'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n prefix=dict(insert='+ ',delete='- ',replace='! ',equal='  ')\n started=False\n for group in SequenceMatcher(None ,a,b).get_grouped_opcodes(n):\n  if not started:\n   started=True\n   fromdate='\\t{}'.format(fromfiledate)if fromfiledate else''\n   todate='\\t{}'.format(tofiledate)if tofiledate else''\n   yield'*** {}{}{}'.format(fromfile,fromdate,lineterm)\n   yield'--- {}{}{}'.format(tofile,todate,lineterm)\n   \n  first,last=group[0],group[-1]\n  yield'***************'+lineterm\n  \n  file1_range=_format_range_context(first[1],last[2])\n  yield'*** {} ****{}'.format(file1_range,lineterm)\n  \n  if any(tag in {'replace','delete'}for tag,_,_,_,_ in group):\n   for tag,i1,i2,_,_ in group:\n    if tag !='insert':\n     for line in a[i1:i2]:\n      yield prefix[tag]+line\n      \n  file2_range=_format_range_context(first[3],last[4])\n  yield'--- {} ----{}'.format(file2_range,lineterm)\n  \n  if any(tag in {'replace','insert'}for tag,_,_,_,_ in group):\n   for tag,_,_,j1,j2 in group:\n    if tag !='delete':\n     for line in b[j1:j2]:\n      yield prefix[tag]+line\n      \ndef ndiff(a,b,linejunk=None ,charjunk=IS_CHARACTER_JUNK):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return Differ(linejunk,charjunk).compare(a,b)\n \ndef _mdiff(fromlines,tolines,context=None ,linejunk=None ,\ncharjunk=IS_CHARACTER_JUNK):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n import re\n \n \n change_re=re.compile('(\\++|\\-+|\\^+)')\n \n \n diff_lines_iterator=ndiff(fromlines,tolines,linejunk,charjunk)\n \n def _make_line(lines,format_key,side,num_lines=[0,0]):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  num_lines[side]+=1\n  \n  \n  if format_key is None :\n   return (num_lines[side],lines.pop(0)[2:])\n   \n  if format_key =='?':\n   text,markers=lines.pop(0),lines.pop(0)\n   \n   sub_info=[]\n   def record_sub_info(match_object,sub_info=sub_info):\n    sub_info.append([match_object.group(1)[0],match_object.span()])\n    return match_object.group(1)\n   change_re.sub(record_sub_info,markers)\n   \n   \n   for key,(begin,end)in sub_info[::-1]:\n    text=text[0:begin]+'\\0'+key+text[begin:end]+'\\1'+text[end:]\n   text=text[2:]\n   \n  else :\n   text=lines.pop(0)[2:]\n   \n   \n   if not text:\n    text=' '\n    \n   text='\\0'+format_key+text+'\\1'\n   \n   \n   \n  return (num_lines[side],text)\n  \n def _line_iterator():\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  lines=[]\n  num_blanks_pending,num_blanks_to_yield=0,0\n  while True :\n  \n  \n  \n   while len(lines)<4:\n    try :\n     lines.append(next(diff_lines_iterator))\n    except StopIteration:\n     lines.append('X')\n   s=''.join([line[0]for line in lines])\n   if s.startswith('X'):\n   \n   \n   \n    num_blanks_to_yield=num_blanks_pending\n   elif s.startswith('-?+?'):\n   \n    yield _make_line(lines,'?',0),_make_line(lines,'?',1),True\n    continue\n   elif s.startswith('--++'):\n   \n   \n    num_blanks_pending -=1\n    yield _make_line(lines,'-',0),None ,True\n    continue\n   elif s.startswith(('--?+','--+','- ')):\n   \n   \n    from_line,to_line=_make_line(lines,'-',0),None\n    num_blanks_to_yield,num_blanks_pending=num_blanks_pending -1,0\n   elif s.startswith('-+?'):\n   \n    yield _make_line(lines,None ,0),_make_line(lines,'?',1),True\n    continue\n   elif s.startswith('-?+'):\n   \n    yield _make_line(lines,'?',0),_make_line(lines,None ,1),True\n    continue\n   elif s.startswith('-'):\n   \n    num_blanks_pending -=1\n    yield _make_line(lines,'-',0),None ,True\n    continue\n   elif s.startswith('+--'):\n   \n   \n    num_blanks_pending +=1\n    yield None ,_make_line(lines,'+',1),True\n    continue\n   elif s.startswith(('+ ','+-')):\n   \n    from_line,to_line=None ,_make_line(lines,'+',1)\n    num_blanks_to_yield,num_blanks_pending=num_blanks_pending+1,0\n   elif s.startswith('+'):\n   \n    num_blanks_pending +=1\n    yield None ,_make_line(lines,'+',1),True\n    continue\n   elif s.startswith(' '):\n   \n    yield _make_line(lines[:],None ,0),_make_line(lines,None ,1),False\n    continue\n    \n    \n   while (num_blanks_to_yield <0):\n    num_blanks_to_yield +=1\n    yield None ,('','\\n'),True\n   while (num_blanks_to_yield >0):\n    num_blanks_to_yield -=1\n    yield ('','\\n'),None ,True\n   if s.startswith('X'):\n    raise StopIteration\n   else :\n    yield from_line,to_line,True\n    \n def _line_pair_iterator():\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  line_iterator=_line_iterator()\n  fromlines,tolines=[],[]\n  while True :\n  \n   while (len(fromlines)==0 or len(tolines)==0):\n    from_line,to_line,found_diff=next(line_iterator)\n    if from_line is not None :\n     fromlines.append((from_line,found_diff))\n    if to_line is not None :\n     tolines.append((to_line,found_diff))\n     \n   from_line,fromDiff=fromlines.pop(0)\n   to_line,to_diff=tolines.pop(0)\n   yield (from_line,to_line,fromDiff or to_diff)\n   \n   \n   \n line_pair_iterator=_line_pair_iterator()\n if context is None :\n  while True :\n   yield next(line_pair_iterator)\n   \n   \n else :\n  context +=1\n  lines_to_write=0\n  while True :\n  \n  \n  \n   index,contextLines=0,[None ]*(context)\n   found_diff=False\n   while (found_diff is False ):\n    from_line,to_line,found_diff=next(line_pair_iterator)\n    i=index %context\n    contextLines[i]=(from_line,to_line,found_diff)\n    index +=1\n    \n    \n   if index >context:\n    yield None ,None ,None\n    lines_to_write=context\n   else :\n    lines_to_write=index\n    index=0\n   while (lines_to_write):\n    i=index %context\n    index +=1\n    yield contextLines[i]\n    lines_to_write -=1\n    \n   lines_to_write=context -1\n   while (lines_to_write):\n    from_line,to_line,found_diff=next(line_pair_iterator)\n    \n    if found_diff:\n     lines_to_write=context -1\n    else :\n     lines_to_write -=1\n    yield from_line,to_line,found_diff\n    \n    \n_file_template=\"\"\"\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n          \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n\n<html>\n\n<head>\n    <meta http-equiv=\"Content-Type\"\n          content=\"text/html; charset=ISO-8859-1\" />\n    <title></title>\n    <style type=\"text/css\">%(styles)s\n    </style>\n</head>\n\n<body>\n    %(table)s%(legend)s\n</body>\n\n</html>\"\"\"\n\n_styles=\"\"\"\n        table.diff {font-family:Courier; border:medium;}\n        .diff_header {background-color:#e0e0e0}\n        td.diff_header {text-align:right}\n        .diff_next {background-color:#c0c0c0}\n        .diff_add {background-color:#aaffaa}\n        .diff_chg {background-color:#ffff77}\n        .diff_sub {background-color:#ffaaaa}\"\"\"\n\n_table_template=\"\"\"\n    <table class=\"diff\" id=\"difflib_chg_%(prefix)s_top\"\n           cellspacing=\"0\" cellpadding=\"0\" rules=\"groups\" >\n        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>\n        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>\n        %(header_row)s\n        <tbody>\n%(data_rows)s        </tbody>\n    </table>\"\"\"\n\n_legend=\"\"\"\n    <table class=\"diff\" summary=\"Legends\">\n        <tr> <th colspan=\"2\"> Legends </th> </tr>\n        <tr> <td> <table border=\"\" summary=\"Colors\">\n                      <tr><th> Colors </th> </tr>\n                      <tr><td class=\"diff_add\">&nbsp;Added&nbsp;</td></tr>\n                      <tr><td class=\"diff_chg\">Changed</td> </tr>\n                      <tr><td class=\"diff_sub\">Deleted</td> </tr>\n                  </table></td>\n             <td> <table border=\"\" summary=\"Links\">\n                      <tr><th colspan=\"2\"> Links </th> </tr>\n                      <tr><td>(f)irst change</td> </tr>\n                      <tr><td>(n)ext change</td> </tr>\n                      <tr><td>(t)op</td> </tr>\n                  </table></td> </tr>\n    </table>\"\"\"\n\nclass HtmlDiff(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n _file_template=_file_template\n _styles=_styles\n _table_template=_table_template\n _legend=_legend\n _default_prefix=0\n \n def __init__(self,tabsize=8,wrapcolumn=None ,linejunk=None ,\n charjunk=IS_CHARACTER_JUNK):\n  ''\n\n\n\n\n\n\n\n\n  \n  self._tabsize=tabsize\n  self._wrapcolumn=wrapcolumn\n  self._linejunk=linejunk\n  self._charjunk=charjunk\n  \n def make_file(self,fromlines,tolines,fromdesc='',todesc='',context=False ,\n numlines=5):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  return self._file_template %dict(\n  styles=self._styles,\n  legend=self._legend,\n  table=self.make_table(fromlines,tolines,fromdesc,todesc,\n  context=context,numlines=numlines))\n  \n def _tab_newline_replace(self,fromlines,tolines):\n  ''\n\n\n\n\n\n\n\n  \n  def expand_tabs(line):\n  \n   line=line.replace(' ','\\0')\n   \n   line=line.expandtabs(self._tabsize)\n   \n   \n   line=line.replace(' ','\\t')\n   return line.replace('\\0',' ').rstrip('\\n')\n  fromlines=[expand_tabs(line)for line in fromlines]\n  tolines=[expand_tabs(line)for line in tolines]\n  return fromlines,tolines\n  \n def _split_line(self,data_list,line_num,text):\n  ''\n\n\n\n\n\n\n  \n  \n  if not line_num:\n   data_list.append((line_num,text))\n   return\n   \n   \n  size=len(text)\n  max=self._wrapcolumn\n  if (size <=max)or ((size -(text.count('\\0')*3))<=max):\n   data_list.append((line_num,text))\n   return\n   \n   \n   \n  i=0\n  n=0\n  mark=''\n  while n <max and i <size:\n   if text[i]=='\\0':\n    i +=1\n    mark=text[i]\n    i +=1\n   elif text[i]=='\\1':\n    i +=1\n    mark=''\n   else :\n    i +=1\n    n +=1\n    \n    \n  line1=text[:i]\n  line2=text[i:]\n  \n  \n  \n  \n  if mark:\n   line1=line1+'\\1'\n   line2='\\0'+mark+line2\n   \n   \n  data_list.append((line_num,line1))\n  \n  \n  self._split_line(data_list,'>',line2)\n  \n def _line_wrapper(self,diffs):\n  ''\n  \n  \n  for fromdata,todata,flag in diffs:\n  \n   if flag is None :\n    yield fromdata,todata,flag\n    continue\n   (fromline,fromtext),(toline,totext)=fromdata,todata\n   \n   \n   fromlist,tolist=[],[]\n   self._split_line(fromlist,fromline,fromtext)\n   self._split_line(tolist,toline,totext)\n   \n   \n   while fromlist or tolist:\n    if fromlist:\n     fromdata=fromlist.pop(0)\n    else :\n     fromdata=('',' ')\n    if tolist:\n     todata=tolist.pop(0)\n    else :\n     todata=('',' ')\n    yield fromdata,todata,flag\n    \n def _collect_lines(self,diffs):\n  ''\n\n\n\n  \n  \n  fromlist,tolist,flaglist=[],[],[]\n  \n  for fromdata,todata,flag in diffs:\n   try :\n   \n    fromlist.append(self._format_line(0,flag,*fromdata))\n    tolist.append(self._format_line(1,flag,*todata))\n   except TypeError:\n   \n    fromlist.append(None )\n    tolist.append(None )\n   flaglist.append(flag)\n  return fromlist,tolist,flaglist\n  \n def _format_line(self,side,flag,linenum,text):\n  ''\n\n\n\n\n\n  \n  try :\n   linenum='%d'%linenum\n   id=' id=\"%s%s\"'%(self._prefix[side],linenum)\n  except TypeError:\n  \n   id=''\n   \n  text=text.replace(\"&\",\"&amp;\").replace(\">\",\"&gt;\").replace(\"<\",\"&lt;\")\n  \n  \n  text=text.replace(' ','&nbsp;').rstrip()\n  \n  return'<td class=\"diff_header\"%s>%s</td><td nowrap=\"nowrap\">%s</td>'  %(id,linenum,text)\n  \n def _make_prefix(self):\n  ''\n  \n  \n  \n  fromprefix=\"from%d_\"%HtmlDiff._default_prefix\n  toprefix=\"to%d_\"%HtmlDiff._default_prefix\n  HtmlDiff._default_prefix +=1\n  \n  self._prefix=[fromprefix,toprefix]\n  \n def _convert_flags(self,fromlist,tolist,flaglist,context,numlines):\n  ''\n  \n  \n  toprefix=self._prefix[1]\n  \n  \n  next_id=['']*len(flaglist)\n  next_href=['']*len(flaglist)\n  num_chg,in_change=0,False\n  last=0\n  for i,flag in enumerate(flaglist):\n   if flag:\n    if not in_change:\n     in_change=True\n     last=i\n     \n     \n     \n     i=max([0,i -numlines])\n     next_id[i]=' id=\"difflib_chg_%s_%d\"'%(toprefix,num_chg)\n     \n     \n     num_chg +=1\n     next_href[last]='<a href=\"#difflib_chg_%s_%d\">n</a>'%(\n     toprefix,num_chg)\n   else :\n    in_change=False\n    \n  if not flaglist:\n   flaglist=[False ]\n   next_id=['']\n   next_href=['']\n   last=0\n   if context:\n    fromlist=['<td></td><td>&nbsp;No Differences Found&nbsp;</td>']\n    tolist=fromlist\n   else :\n    fromlist=tolist=['<td></td><td>&nbsp;Empty File&nbsp;</td>']\n    \n  if not flaglist[0]:\n   next_href[0]='<a href=\"#difflib_chg_%s_0\">f</a>'%toprefix\n   \n  next_href[last]='<a href=\"#difflib_chg_%s_top\">t</a>'%(toprefix)\n  \n  return fromlist,tolist,flaglist,next_href,next_id\n  \n def make_table(self,fromlines,tolines,fromdesc='',todesc='',context=False ,\n numlines=5):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  self._make_prefix()\n  \n  \n  \n  fromlines,tolines=self._tab_newline_replace(fromlines,tolines)\n  \n  \n  if context:\n   context_lines=numlines\n  else :\n   context_lines=None\n  diffs=_mdiff(fromlines,tolines,context_lines,linejunk=self._linejunk,\n  charjunk=self._charjunk)\n  \n  \n  if self._wrapcolumn:\n   diffs=self._line_wrapper(diffs)\n   \n   \n  fromlist,tolist,flaglist=self._collect_lines(diffs)\n  \n  \n  fromlist,tolist,flaglist,next_href,next_id=self._convert_flags(\n  fromlist,tolist,flaglist,context,numlines)\n  \n  s=[]\n  fmt='            <tr><td class=\"diff_next\"%s>%s</td>%s'+  '<td class=\"diff_next\">%s</td>%s</tr>\\n'\n  for i in range(len(flaglist)):\n   if flaglist[i]is None :\n   \n   \n    if i >0:\n     s.append('        </tbody>        \\n        <tbody>\\n')\n   else :\n    s.append(fmt %(next_id[i],next_href[i],fromlist[i],\n    next_href[i],tolist[i]))\n  if fromdesc or todesc:\n   header_row='<thead><tr>%s%s%s%s</tr></thead>'%(\n   '<th class=\"diff_next\"><br /></th>',\n   '<th colspan=\"2\" class=\"diff_header\">%s</th>'%fromdesc,\n   '<th class=\"diff_next\"><br /></th>',\n   '<th colspan=\"2\" class=\"diff_header\">%s</th>'%todesc)\n  else :\n   header_row=''\n   \n  table=self._table_template %dict(\n  data_rows=''.join(s),\n  header_row=header_row,\n  prefix=self._prefix[1])\n  \n  return table.replace('\\0+','<span class=\"diff_add\">').  replace('\\0-','<span class=\"diff_sub\">').  replace('\\0^','<span class=\"diff_chg\">').  replace('\\1','</span>').  replace('\\t','&nbsp;')\n  \ndel re\n\ndef restore(delta,which):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n  tag={1:\"- \",2:\"+ \"}[int(which)]\n except KeyError:\n  raise ValueError('unknown delta choice (must be 1 or 2): %r'\n  %which)\n prefixes=(\"  \",tag)\n for line in delta:\n  if line[:2]in prefixes:\n   yield line[2:]\n   \ndef _test():\n import doctest,difflib\n return doctest.testmod(difflib)\n \nif __name__ ==\"__main__\":\n _test()\n"], "urllib": [".py", "", 1], "calendar": [".py", "''\n\n\n\n\n\n\nimport sys\nimport datetime\nimport locale as _locale\n\n__all__=[\"IllegalMonthError\",\"IllegalWeekdayError\",\"setfirstweekday\",\n\"firstweekday\",\"isleap\",\"leapdays\",\"weekday\",\"monthrange\",\n\"monthcalendar\",\"prmonth\",\"month\",\"prcal\",\"calendar\",\n\"timegm\",\"month_name\",\"month_abbr\",\"day_name\",\"day_abbr\"]\n\n\nerror=ValueError\n\n\nclass IllegalMonthError(ValueError):\n def __init__(self,month):\n  self.month=month\n def __str__(self):\n  return\"bad month number %r; must be 1-12\"%self.month\n  \n  \nclass IllegalWeekdayError(ValueError):\n def __init__(self,weekday):\n  self.weekday=weekday\n def __str__(self):\n  return\"bad weekday number %r; must be 0 (Monday) to 6 (Sunday)\"%self.weekday\n  \n  \n  \nJanuary=1\nFebruary=2\n\n\nmdays=[0,31,28,31,30,31,30,31,31,30,31,30,31]\n\n\n\n\n\n\nclass _localized_month:\n\n _months=[datetime.date(2001,i+1,1).strftime for i in range(12)]\n _months.insert(0,lambda x:\"\")\n \n def __init__(self,format):\n  self.format=format\n  \n def __getitem__(self,i):\n  funcs=self._months[i]\n  if isinstance(i,slice):\n   return [f(self.format)for f in funcs]\n  else :\n   return funcs(self.format)\n   \n def __len__(self):\n  return 13\n  \n  \nclass _localized_day:\n\n\n _days=[datetime.date(2001,1,i+1).strftime for i in range(7)]\n \n def __init__(self,format):\n  self.format=format\n  \n def __getitem__(self,i):\n  funcs=self._days[i]\n  if isinstance(i,slice):\n   return [f(self.format)for f in funcs]\n  else :\n   return funcs(self.format)\n   \n def __len__(self):\n  return 7\n  \n  \n  \nday_name=_localized_day('%A')\nday_abbr=_localized_day('%a')\n\n\nmonth_name=_localized_month('%B')\nmonth_abbr=_localized_month('%b')\n\n\n(MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY)=range(7)\n\n\ndef isleap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \n \ndef leapdays(y1,y2):\n ''\n \n y1 -=1\n y2 -=1\n return (y2 //4 -y1 //4)-(y2 //100 -y1 //100)+(y2 //400 -y1 //400)\n \n \ndef weekday(year,month,day):\n ''\n \n return datetime.date(year,month,day).weekday()\n \n \ndef monthrange(year,month):\n ''\n \n if not 1 <=month <=12:\n  raise IllegalMonthError(month)\n day1=weekday(year,month,1)\n ndays=mdays[month]+(month ==February and isleap(year))\n return day1,ndays\n \n \nclass Calendar(object):\n ''\n\n\n \n \n def __init__(self,firstweekday=0):\n  self.firstweekday=firstweekday\n  \n def getfirstweekday(self):\n  return self._firstweekday %7\n  \n def setfirstweekday(self,firstweekday):\n  self._firstweekday=firstweekday\n  \n firstweekday=property(getfirstweekday,setfirstweekday)\n \n def iterweekdays(self):\n  ''\n\n\n  \n  for i in range(self.firstweekday,self.firstweekday+7):\n   yield i %7\n   \n def itermonthdates(self,year,month):\n  ''\n\n\n\n  \n  date=datetime.date(year,month,1)\n  \n  days=(date.weekday()-self.firstweekday)%7\n  date -=datetime.timedelta(days=days)\n  oneday=datetime.timedelta(days=1)\n  while True :\n   yield date\n   try :\n    date +=oneday\n   except OverflowError:\n   \n    break\n   if date.month !=month and date.weekday()==self.firstweekday:\n    break\n    \n def itermonthdays2(self,year,month):\n  ''\n\n\n  \n  for date in self.itermonthdates(year,month):\n   if date.month !=month:\n    yield (0,date.weekday())\n   else :\n    yield (date.day,date.weekday())\n    \n def itermonthdays(self,year,month):\n  ''\n\n\n  \n  for date in self.itermonthdates(year,month):\n   if date.month !=month:\n    yield 0\n   else :\n    yield date.day\n    \n def monthdatescalendar(self,year,month):\n  ''\n\n\n  \n  dates=list(self.itermonthdates(year,month))\n  return [dates[i:i+7]for i in range(0,len(dates),7)]\n  \n def monthdays2calendar(self,year,month):\n  ''\n\n\n\n\n  \n  days=list(self.itermonthdays2(year,month))\n  return [days[i:i+7]for i in range(0,len(days),7)]\n  \n def monthdayscalendar(self,year,month):\n  ''\n\n\n  \n  days=list(self.itermonthdays(year,month))\n  return [days[i:i+7]for i in range(0,len(days),7)]\n  \n def yeardatescalendar(self,year,width=3):\n  ''\n\n\n\n\n  \n  months=[\n  self.monthdatescalendar(year,i)\n  for i in range(January,January+12)\n  ]\n  return [months[i:i+width]for i in range(0,len(months),width)]\n  \n def yeardays2calendar(self,year,width=3):\n  ''\n\n\n\n\n  \n  months=[\n  self.monthdays2calendar(year,i)\n  for i in range(January,January+12)\n  ]\n  return [months[i:i+width]for i in range(0,len(months),width)]\n  \n def yeardayscalendar(self,year,width=3):\n  ''\n\n\n\n  \n  months=[\n  self.monthdayscalendar(year,i)\n  for i in range(January,January+12)\n  ]\n  return [months[i:i+width]for i in range(0,len(months),width)]\n  \n  \nclass TextCalendar(Calendar):\n ''\n\n\n \n \n def prweek(self,theweek,width):\n  ''\n\n  \n  print(self.formatweek(theweek,width),end=' ')\n  \n def formatday(self,day,weekday,width):\n  ''\n\n  \n  if day ==0:\n   s=''\n  else :\n   s='%2i'%day\n  return s.center(width)\n  \n def formatweek(self,theweek,width):\n  ''\n\n  \n  return' '.join(self.formatday(d,wd,width)for (d,wd)in theweek)\n  \n def formatweekday(self,day,width):\n  ''\n\n  \n  if width >=9:\n   names=day_name\n  else :\n   names=day_abbr\n  return names[day][:width].center(width)\n  \n def formatweekheader(self,width):\n  ''\n\n  \n  return' '.join(self.formatweekday(i,width)for i in self.iterweekdays())\n  \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n  ''\n\n  \n  s=month_name[themonth]\n  if withyear:\n   s=\"%s %r\"%(s,theyear)\n  return s.center(width)\n  \n def prmonth(self,theyear,themonth,w=0,l=0):\n  ''\n\n  \n  print(self.formatmonth(theyear,themonth,w,l),end=' ')\n  \n def formatmonth(self,theyear,themonth,w=0,l=0):\n  ''\n\n  \n  w=max(2,w)\n  l=max(1,l)\n  s=self.formatmonthname(theyear,themonth,7 *(w+1)-1)\n  s=s.rstrip()\n  s +='\\n'*l\n  s +=self.formatweekheader(w).rstrip()\n  s +='\\n'*l\n  for week in self.monthdays2calendar(theyear,themonth):\n   s +=self.formatweek(week,w).rstrip()\n   s +='\\n'*l\n  return s\n  \n def formatyear(self,theyear,w=2,l=1,c=6,m=3):\n  ''\n\n  \n  w=max(2,w)\n  l=max(1,l)\n  c=max(2,c)\n  colwidth=(w+1)*7 -1\n  v=[]\n  a=v.append\n  a(repr(theyear).center(colwidth *m+c *(m -1)).rstrip())\n  a('\\n'*l)\n  header=self.formatweekheader(w)\n  for (i,row)in enumerate(self.yeardays2calendar(theyear,m)):\n  \n   months=range(m *i+1,min(m *(i+1)+1,13))\n   a('\\n'*l)\n   names=(self.formatmonthname(theyear,k,colwidth,False )\n   for k in months)\n   a(formatstring(names,colwidth,c).rstrip())\n   a('\\n'*l)\n   headers=(header for k in months)\n   a(formatstring(headers,colwidth,c).rstrip())\n   a('\\n'*l)\n   \n   height=max(len(cal)for cal in row)\n   for j in range(height):\n    weeks=[]\n    for cal in row:\n     if j >=len(cal):\n      weeks.append('')\n     else :\n      weeks.append(self.formatweek(cal[j],w))\n    a(formatstring(weeks,colwidth,c).rstrip())\n    a('\\n'*l)\n  return''.join(v)\n  \n def pryear(self,theyear,w=0,l=0,c=6,m=3):\n  ''\n  print(self.formatyear(theyear,w,l,c,m))\n  \n  \nclass HTMLCalendar(Calendar):\n ''\n\n \n \n \n cssclasses=[\"mon\",\"tue\",\"wed\",\"thu\",\"fri\",\"sat\",\"sun\"]\n \n def formatday(self,day,weekday):\n  ''\n\n  \n  if day ==0:\n   return'<td class=\"noday\">&nbsp;</td>'\n  else :\n   return'<td class=\"%s\">%d</td>'%(self.cssclasses[weekday],day)\n   \n def formatweek(self,theweek):\n  ''\n\n  \n  s=''.join(self.formatday(d,wd)for (d,wd)in theweek)\n  return'<tr>%s</tr>'%s\n  \n def formatweekday(self,day):\n  ''\n\n  \n  return'<th class=\"%s\">%s</th>'%(self.cssclasses[day],day_abbr[day])\n  \n def formatweekheader(self):\n  ''\n\n  \n  s=''.join(self.formatweekday(i)for i in self.iterweekdays())\n  return'<tr>%s</tr>'%s\n  \n def formatmonthname(self,theyear,themonth,withyear=True ):\n  ''\n\n  \n  if withyear:\n   s='%s %s'%(month_name[themonth],theyear)\n  else :\n   s='%s'%month_name[themonth]\n  return'<tr><th colspan=\"7\" class=\"month\">%s</th></tr>'%s\n  \n def formatmonth(self,theyear,themonth,withyear=True ):\n  ''\n\n  \n  v=[]\n  a=v.append\n  a('<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"month\">')\n  a('\\n')\n  a(self.formatmonthname(theyear,themonth,withyear=withyear))\n  a('\\n')\n  a(self.formatweekheader())\n  a('\\n')\n  for week in self.monthdays2calendar(theyear,themonth):\n   a(self.formatweek(week))\n   a('\\n')\n  a('</table>')\n  a('\\n')\n  return''.join(v)\n  \n def formatyear(self,theyear,width=3):\n  ''\n\n  \n  v=[]\n  a=v.append\n  width=max(width,1)\n  a('<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"year\">')\n  a('\\n')\n  a('<tr><th colspan=\"%d\" class=\"year\">%s</th></tr>'%(width,theyear))\n  for i in range(January,January+12,width):\n  \n   months=range(i,min(i+width,13))\n   a('<tr>')\n   for m in months:\n    a('<td>')\n    a(self.formatmonth(theyear,m,withyear=False ))\n    a('</td>')\n   a('</tr>')\n  a('</table>')\n  return''.join(v)\n  \n def formatyearpage(self,theyear,width=3,css='calendar.css',encoding=None ):\n  ''\n\n  \n  if encoding is None :\n   encoding=sys.getdefaultencoding()\n  v=[]\n  a=v.append\n  a('<?xml version=\"1.0\" encoding=\"%s\"?>\\n'%encoding)\n  a('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\n')\n  a('<html>\\n')\n  a('<head>\\n')\n  a('<meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\" />\\n'%encoding)\n  if css is not None :\n   a('<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\" />\\n'%css)\n  a('<title>Calendar for %d</title>\\n'%theyear)\n  a('</head>\\n')\n  a('<body>\\n')\n  a(self.formatyear(theyear,width))\n  a('</body>\\n')\n  a('</html>\\n')\n  return''.join(v).encode(encoding,\"xmlcharrefreplace\")\n  \n  \nclass different_locale:\n def __init__(self,locale):\n  self.locale=locale\n  \n def __enter__(self):\n  self.oldlocale=_locale.getlocale(_locale.LC_TIME)\n  _locale.setlocale(_locale.LC_TIME,self.locale)\n  \n def __exit__(self,*args):\n  _locale.setlocale(_locale.LC_TIME,self.oldlocale)\n  \n  \nclass LocaleTextCalendar(TextCalendar):\n ''\n\n\n\n\n \n \n def __init__(self,firstweekday=0,locale=None ):\n  TextCalendar.__init__(self,firstweekday)\n  if locale is None :\n   locale=_locale.getdefaultlocale()\n  self.locale=locale\n  \n def formatweekday(self,day,width):\n  with different_locale(self.locale):\n   if width >=9:\n    names=day_name\n   else :\n    names=day_abbr\n   name=names[day]\n   return name[:width].center(width)\n   \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n  with different_locale(self.locale):\n   s=month_name[themonth]\n   if withyear:\n    s=\"%s %r\"%(s,theyear)\n   return s.center(width)\n   \n   \nclass LocaleHTMLCalendar(HTMLCalendar):\n ''\n\n\n\n\n \n def __init__(self,firstweekday=0,locale=None ):\n  HTMLCalendar.__init__(self,firstweekday)\n  if locale is None :\n   locale=_locale.getdefaultlocale()\n  self.locale=locale\n  \n def formatweekday(self,day):\n  with different_locale(self.locale):\n   s=day_abbr[day]\n   return'<th class=\"%s\">%s</th>'%(self.cssclasses[day],s)\n   \n def formatmonthname(self,theyear,themonth,withyear=True ):\n  with different_locale(self.locale):\n   s=month_name[themonth]\n   if withyear:\n    s='%s %s'%(s,theyear)\n   return'<tr><th colspan=\"7\" class=\"month\">%s</th></tr>'%s\n   \n   \n   \nc=TextCalendar()\n\nfirstweekday=c.getfirstweekday\n\ndef setfirstweekday(firstweekday):\n if not MONDAY <=firstweekday <=SUNDAY:\n  raise IllegalWeekdayError(firstweekday)\n c.firstweekday=firstweekday\n \nmonthcalendar=c.monthdayscalendar\nprweek=c.prweek\nweek=c.formatweek\nweekheader=c.formatweekheader\nprmonth=c.prmonth\nmonth=c.formatmonth\ncalendar=c.formatyear\nprcal=c.pryear\n\n\n\n_colwidth=7 *3 -1\n_spacing=6\n\n\ndef format(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n print(formatstring(cols,colwidth,spacing))\n \n \ndef formatstring(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n spacing *=' '\n return spacing.join(c.center(colwidth)for c in cols)\n \n \nEPOCH=1970\n_EPOCH_ORD=datetime.date(EPOCH,1,1).toordinal()\n\n\ndef timegm(tuple):\n ''\n year,month,day,hour,minute,second=tuple[:6]\n days=datetime.date(year,month,1).toordinal()-_EPOCH_ORD+day -1\n hours=days *24+hour\n minutes=hours *60+minute\n seconds=minutes *60+second\n return seconds\n \n \ndef main(args):\n import optparse\n parser=optparse.OptionParser(usage=\"usage: %prog [options] [year [month]]\")\n parser.add_option(\n \"-w\",\"--width\",\n dest=\"width\",type=\"int\",default=2,\n help=\"width of date column (default 2, text only)\"\n )\n parser.add_option(\n \"-l\",\"--lines\",\n dest=\"lines\",type=\"int\",default=1,\n help=\"number of lines for each week (default 1, text only)\"\n )\n parser.add_option(\n \"-s\",\"--spacing\",\n dest=\"spacing\",type=\"int\",default=6,\n help=\"spacing between months (default 6, text only)\"\n )\n parser.add_option(\n \"-m\",\"--months\",\n dest=\"months\",type=\"int\",default=3,\n help=\"months per row (default 3, text only)\"\n )\n parser.add_option(\n \"-c\",\"--css\",\n dest=\"css\",default=\"calendar.css\",\n help=\"CSS to use for page (html only)\"\n )\n parser.add_option(\n \"-L\",\"--locale\",\n dest=\"locale\",default=None ,\n help=\"locale to be used from month and weekday names\"\n )\n parser.add_option(\n \"-e\",\"--encoding\",\n dest=\"encoding\",default=None ,\n help=\"Encoding to use for output.\"\n )\n parser.add_option(\n \"-t\",\"--type\",\n dest=\"type\",default=\"text\",\n choices=(\"text\",\"html\"),\n help=\"output type (text or html)\"\n )\n \n (options,args)=parser.parse_args(args)\n \n if options.locale and not options.encoding:\n  parser.error(\"if --locale is specified --encoding is required\")\n  sys.exit(1)\n  \n locale=options.locale,options.encoding\n \n if options.type ==\"html\":\n  if options.locale:\n   cal=LocaleHTMLCalendar(locale=locale)\n  else :\n   cal=HTMLCalendar()\n  encoding=options.encoding\n  if encoding is None :\n   encoding=sys.getdefaultencoding()\n  optdict=dict(encoding=encoding,css=options.css)\n  write=sys.stdout.buffer.write\n  if len(args)==1:\n   write(cal.formatyearpage(datetime.date.today().year,**optdict))\n  elif len(args)==2:\n   write(cal.formatyearpage(int(args[1]),**optdict))\n  else :\n   parser.error(\"incorrect number of arguments\")\n   sys.exit(1)\n else :\n  if options.locale:\n   cal=LocaleTextCalendar(locale=locale)\n  else :\n   cal=TextCalendar()\n  optdict=dict(w=options.width,l=options.lines)\n  if len(args)!=3:\n   optdict[\"c\"]=options.spacing\n   optdict[\"m\"]=options.months\n  if len(args)==1:\n   result=cal.formatyear(datetime.date.today().year,**optdict)\n  elif len(args)==2:\n   result=cal.formatyear(int(args[1]),**optdict)\n  elif len(args)==3:\n   result=cal.formatmonth(int(args[1]),int(args[2]),**optdict)\n  else :\n   parser.error(\"incorrect number of arguments\")\n   sys.exit(1)\n  write=sys.stdout.write\n  if options.encoding:\n   result=result.encode(options.encoding)\n   write=sys.stdout.buffer.write\n  write(result)\n  \n  \nif __name__ ==\"__main__\":\n main(sys.argv)\n"], "genericpath": [".py", "''\n\n\n\n\nimport os\nimport stat\n\n__all__=['commonprefix','exists','getatime','getctime','getmtime',\n'getsize','isdir','isfile']\n\n\n\n\ndef exists(path):\n ''\n try :\n  os.stat(path)\n except os.error:\n  return False\n return True\n \n \n \n \ndef isfile(path):\n ''\n try :\n  st=os.stat(path)\n except os.error:\n  return False\n return stat.S_ISREG(st.st_mode)\n \n \n \n \n \ndef isdir(s):\n ''\n try :\n  st=os.stat(s)\n except os.error:\n  return False\n return stat.S_ISDIR(st.st_mode)\n \n \ndef getsize(filename):\n ''\n return os.stat(filename).st_size\n \n \ndef getmtime(filename):\n ''\n return os.stat(filename).st_mtime\n \n \ndef getatime(filename):\n ''\n return os.stat(filename).st_atime\n \n \ndef getctime(filename):\n ''\n return os.stat(filename).st_ctime\n \n \n \ndef commonprefix(m):\n ''\n if not m:return''\n s1=min(m)\n s2=max(m)\n for i,c in enumerate(s1):\n  if c !=s2[i]:\n   return s1[:i]\n return s1\n \n \n \n \n \n \n \n \ndef _splitext(p,sep,altsep,extsep):\n ''\n\n\n \n \n \n sepIndex=p.rfind(sep)\n if altsep:\n  altsepIndex=p.rfind(altsep)\n  sepIndex=max(sepIndex,altsepIndex)\n  \n dotIndex=p.rfind(extsep)\n if dotIndex >sepIndex:\n \n  filenameIndex=sepIndex+1\n  while filenameIndex <dotIndex:\n   if p[filenameIndex:filenameIndex+1]!=extsep:\n    return p[:dotIndex],p[dotIndex:]\n   filenameIndex +=1\n   \n return p,p[:0]\n"], "html.entities": [".py", "''\n\n\nname2codepoint={\n'AElig':0x00c6,\n'Aacute':0x00c1,\n'Acirc':0x00c2,\n'Agrave':0x00c0,\n'Alpha':0x0391,\n'Aring':0x00c5,\n'Atilde':0x00c3,\n'Auml':0x00c4,\n'Beta':0x0392,\n'Ccedil':0x00c7,\n'Chi':0x03a7,\n'Dagger':0x2021,\n'Delta':0x0394,\n'ETH':0x00d0,\n'Eacute':0x00c9,\n'Ecirc':0x00ca,\n'Egrave':0x00c8,\n'Epsilon':0x0395,\n'Eta':0x0397,\n'Euml':0x00cb,\n'Gamma':0x0393,\n'Iacute':0x00cd,\n'Icirc':0x00ce,\n'Igrave':0x00cc,\n'Iota':0x0399,\n'Iuml':0x00cf,\n'Kappa':0x039a,\n'Lambda':0x039b,\n'Mu':0x039c,\n'Ntilde':0x00d1,\n'Nu':0x039d,\n'OElig':0x0152,\n'Oacute':0x00d3,\n'Ocirc':0x00d4,\n'Ograve':0x00d2,\n'Omega':0x03a9,\n'Omicron':0x039f,\n'Oslash':0x00d8,\n'Otilde':0x00d5,\n'Ouml':0x00d6,\n'Phi':0x03a6,\n'Pi':0x03a0,\n'Prime':0x2033,\n'Psi':0x03a8,\n'Rho':0x03a1,\n'Scaron':0x0160,\n'Sigma':0x03a3,\n'THORN':0x00de,\n'Tau':0x03a4,\n'Theta':0x0398,\n'Uacute':0x00da,\n'Ucirc':0x00db,\n'Ugrave':0x00d9,\n'Upsilon':0x03a5,\n'Uuml':0x00dc,\n'Xi':0x039e,\n'Yacute':0x00dd,\n'Yuml':0x0178,\n'Zeta':0x0396,\n'aacute':0x00e1,\n'acirc':0x00e2,\n'acute':0x00b4,\n'aelig':0x00e6,\n'agrave':0x00e0,\n'alefsym':0x2135,\n'alpha':0x03b1,\n'amp':0x0026,\n'and':0x2227,\n'ang':0x2220,\n'aring':0x00e5,\n'asymp':0x2248,\n'atilde':0x00e3,\n'auml':0x00e4,\n'bdquo':0x201e,\n'beta':0x03b2,\n'brvbar':0x00a6,\n'bull':0x2022,\n'cap':0x2229,\n'ccedil':0x00e7,\n'cedil':0x00b8,\n'cent':0x00a2,\n'chi':0x03c7,\n'circ':0x02c6,\n'clubs':0x2663,\n'cong':0x2245,\n'copy':0x00a9,\n'crarr':0x21b5,\n'cup':0x222a,\n'curren':0x00a4,\n'dArr':0x21d3,\n'dagger':0x2020,\n'darr':0x2193,\n'deg':0x00b0,\n'delta':0x03b4,\n'diams':0x2666,\n'divide':0x00f7,\n'eacute':0x00e9,\n'ecirc':0x00ea,\n'egrave':0x00e8,\n'empty':0x2205,\n'emsp':0x2003,\n'ensp':0x2002,\n'epsilon':0x03b5,\n'equiv':0x2261,\n'eta':0x03b7,\n'eth':0x00f0,\n'euml':0x00eb,\n'euro':0x20ac,\n'exist':0x2203,\n'fnof':0x0192,\n'forall':0x2200,\n'frac12':0x00bd,\n'frac14':0x00bc,\n'frac34':0x00be,\n'frasl':0x2044,\n'gamma':0x03b3,\n'ge':0x2265,\n'gt':0x003e,\n'hArr':0x21d4,\n'harr':0x2194,\n'hearts':0x2665,\n'hellip':0x2026,\n'iacute':0x00ed,\n'icirc':0x00ee,\n'iexcl':0x00a1,\n'igrave':0x00ec,\n'image':0x2111,\n'infin':0x221e,\n'int':0x222b,\n'iota':0x03b9,\n'iquest':0x00bf,\n'isin':0x2208,\n'iuml':0x00ef,\n'kappa':0x03ba,\n'lArr':0x21d0,\n'lambda':0x03bb,\n'lang':0x2329,\n'laquo':0x00ab,\n'larr':0x2190,\n'lceil':0x2308,\n'ldquo':0x201c,\n'le':0x2264,\n'lfloor':0x230a,\n'lowast':0x2217,\n'loz':0x25ca,\n'lrm':0x200e,\n'lsaquo':0x2039,\n'lsquo':0x2018,\n'lt':0x003c,\n'macr':0x00af,\n'mdash':0x2014,\n'micro':0x00b5,\n'middot':0x00b7,\n'minus':0x2212,\n'mu':0x03bc,\n'nabla':0x2207,\n'nbsp':0x00a0,\n'ndash':0x2013,\n'ne':0x2260,\n'ni':0x220b,\n'not':0x00ac,\n'notin':0x2209,\n'nsub':0x2284,\n'ntilde':0x00f1,\n'nu':0x03bd,\n'oacute':0x00f3,\n'ocirc':0x00f4,\n'oelig':0x0153,\n'ograve':0x00f2,\n'oline':0x203e,\n'omega':0x03c9,\n'omicron':0x03bf,\n'oplus':0x2295,\n'or':0x2228,\n'ordf':0x00aa,\n'ordm':0x00ba,\n'oslash':0x00f8,\n'otilde':0x00f5,\n'otimes':0x2297,\n'ouml':0x00f6,\n'para':0x00b6,\n'part':0x2202,\n'permil':0x2030,\n'perp':0x22a5,\n'phi':0x03c6,\n'pi':0x03c0,\n'piv':0x03d6,\n'plusmn':0x00b1,\n'pound':0x00a3,\n'prime':0x2032,\n'prod':0x220f,\n'prop':0x221d,\n'psi':0x03c8,\n'quot':0x0022,\n'rArr':0x21d2,\n'radic':0x221a,\n'rang':0x232a,\n'raquo':0x00bb,\n'rarr':0x2192,\n'rceil':0x2309,\n'rdquo':0x201d,\n'real':0x211c,\n'reg':0x00ae,\n'rfloor':0x230b,\n'rho':0x03c1,\n'rlm':0x200f,\n'rsaquo':0x203a,\n'rsquo':0x2019,\n'sbquo':0x201a,\n'scaron':0x0161,\n'sdot':0x22c5,\n'sect':0x00a7,\n'shy':0x00ad,\n'sigma':0x03c3,\n'sigmaf':0x03c2,\n'sim':0x223c,\n'spades':0x2660,\n'sub':0x2282,\n'sube':0x2286,\n'sum':0x2211,\n'sup':0x2283,\n'sup1':0x00b9,\n'sup2':0x00b2,\n'sup3':0x00b3,\n'supe':0x2287,\n'szlig':0x00df,\n'tau':0x03c4,\n'there4':0x2234,\n'theta':0x03b8,\n'thetasym':0x03d1,\n'thinsp':0x2009,\n'thorn':0x00fe,\n'tilde':0x02dc,\n'times':0x00d7,\n'trade':0x2122,\n'uArr':0x21d1,\n'uacute':0x00fa,\n'uarr':0x2191,\n'ucirc':0x00fb,\n'ugrave':0x00f9,\n'uml':0x00a8,\n'upsih':0x03d2,\n'upsilon':0x03c5,\n'uuml':0x00fc,\n'weierp':0x2118,\n'xi':0x03be,\n'yacute':0x00fd,\n'yen':0x00a5,\n'yuml':0x00ff,\n'zeta':0x03b6,\n'zwj':0x200d,\n'zwnj':0x200c,\n}\n\n\n\nhtml5={\n'Aacute':'\\xc1',\n'aacute':'\\xe1',\n'Aacute;':'\\xc1',\n'aacute;':'\\xe1',\n'Abreve;':'\\u0102',\n'abreve;':'\\u0103',\n'ac;':'\\u223e',\n'acd;':'\\u223f',\n'acE;':'\\u223e\\u0333',\n'Acirc':'\\xc2',\n'acirc':'\\xe2',\n'Acirc;':'\\xc2',\n'acirc;':'\\xe2',\n'acute':'\\xb4',\n'acute;':'\\xb4',\n'Acy;':'\\u0410',\n'acy;':'\\u0430',\n'AElig':'\\xc6',\n'aelig':'\\xe6',\n'AElig;':'\\xc6',\n'aelig;':'\\xe6',\n'af;':'\\u2061',\n'Afr;':'\\U0001d504',\n'afr;':'\\U0001d51e',\n'Agrave':'\\xc0',\n'agrave':'\\xe0',\n'Agrave;':'\\xc0',\n'agrave;':'\\xe0',\n'alefsym;':'\\u2135',\n'aleph;':'\\u2135',\n'Alpha;':'\\u0391',\n'alpha;':'\\u03b1',\n'Amacr;':'\\u0100',\n'amacr;':'\\u0101',\n'amalg;':'\\u2a3f',\n'AMP':'&',\n'amp':'&',\n'AMP;':'&',\n'amp;':'&',\n'And;':'\\u2a53',\n'and;':'\\u2227',\n'andand;':'\\u2a55',\n'andd;':'\\u2a5c',\n'andslope;':'\\u2a58',\n'andv;':'\\u2a5a',\n'ang;':'\\u2220',\n'ange;':'\\u29a4',\n'angle;':'\\u2220',\n'angmsd;':'\\u2221',\n'angmsdaa;':'\\u29a8',\n'angmsdab;':'\\u29a9',\n'angmsdac;':'\\u29aa',\n'angmsdad;':'\\u29ab',\n'angmsdae;':'\\u29ac',\n'angmsdaf;':'\\u29ad',\n'angmsdag;':'\\u29ae',\n'angmsdah;':'\\u29af',\n'angrt;':'\\u221f',\n'angrtvb;':'\\u22be',\n'angrtvbd;':'\\u299d',\n'angsph;':'\\u2222',\n'angst;':'\\xc5',\n'angzarr;':'\\u237c',\n'Aogon;':'\\u0104',\n'aogon;':'\\u0105',\n'Aopf;':'\\U0001d538',\n'aopf;':'\\U0001d552',\n'ap;':'\\u2248',\n'apacir;':'\\u2a6f',\n'apE;':'\\u2a70',\n'ape;':'\\u224a',\n'apid;':'\\u224b',\n'apos;':\"'\",\n'ApplyFunction;':'\\u2061',\n'approx;':'\\u2248',\n'approxeq;':'\\u224a',\n'Aring':'\\xc5',\n'aring':'\\xe5',\n'Aring;':'\\xc5',\n'aring;':'\\xe5',\n'Ascr;':'\\U0001d49c',\n'ascr;':'\\U0001d4b6',\n'Assign;':'\\u2254',\n'ast;':'*',\n'asymp;':'\\u2248',\n'asympeq;':'\\u224d',\n'Atilde':'\\xc3',\n'atilde':'\\xe3',\n'Atilde;':'\\xc3',\n'atilde;':'\\xe3',\n'Auml':'\\xc4',\n'auml':'\\xe4',\n'Auml;':'\\xc4',\n'auml;':'\\xe4',\n'awconint;':'\\u2233',\n'awint;':'\\u2a11',\n'backcong;':'\\u224c',\n'backepsilon;':'\\u03f6',\n'backprime;':'\\u2035',\n'backsim;':'\\u223d',\n'backsimeq;':'\\u22cd',\n'Backslash;':'\\u2216',\n'Barv;':'\\u2ae7',\n'barvee;':'\\u22bd',\n'Barwed;':'\\u2306',\n'barwed;':'\\u2305',\n'barwedge;':'\\u2305',\n'bbrk;':'\\u23b5',\n'bbrktbrk;':'\\u23b6',\n'bcong;':'\\u224c',\n'Bcy;':'\\u0411',\n'bcy;':'\\u0431',\n'bdquo;':'\\u201e',\n'becaus;':'\\u2235',\n'Because;':'\\u2235',\n'because;':'\\u2235',\n'bemptyv;':'\\u29b0',\n'bepsi;':'\\u03f6',\n'bernou;':'\\u212c',\n'Bernoullis;':'\\u212c',\n'Beta;':'\\u0392',\n'beta;':'\\u03b2',\n'beth;':'\\u2136',\n'between;':'\\u226c',\n'Bfr;':'\\U0001d505',\n'bfr;':'\\U0001d51f',\n'bigcap;':'\\u22c2',\n'bigcirc;':'\\u25ef',\n'bigcup;':'\\u22c3',\n'bigodot;':'\\u2a00',\n'bigoplus;':'\\u2a01',\n'bigotimes;':'\\u2a02',\n'bigsqcup;':'\\u2a06',\n'bigstar;':'\\u2605',\n'bigtriangledown;':'\\u25bd',\n'bigtriangleup;':'\\u25b3',\n'biguplus;':'\\u2a04',\n'bigvee;':'\\u22c1',\n'bigwedge;':'\\u22c0',\n'bkarow;':'\\u290d',\n'blacklozenge;':'\\u29eb',\n'blacksquare;':'\\u25aa',\n'blacktriangle;':'\\u25b4',\n'blacktriangledown;':'\\u25be',\n'blacktriangleleft;':'\\u25c2',\n'blacktriangleright;':'\\u25b8',\n'blank;':'\\u2423',\n'blk12;':'\\u2592',\n'blk14;':'\\u2591',\n'blk34;':'\\u2593',\n'block;':'\\u2588',\n'bne;':'=\\u20e5',\n'bnequiv;':'\\u2261\\u20e5',\n'bNot;':'\\u2aed',\n'bnot;':'\\u2310',\n'Bopf;':'\\U0001d539',\n'bopf;':'\\U0001d553',\n'bot;':'\\u22a5',\n'bottom;':'\\u22a5',\n'bowtie;':'\\u22c8',\n'boxbox;':'\\u29c9',\n'boxDL;':'\\u2557',\n'boxDl;':'\\u2556',\n'boxdL;':'\\u2555',\n'boxdl;':'\\u2510',\n'boxDR;':'\\u2554',\n'boxDr;':'\\u2553',\n'boxdR;':'\\u2552',\n'boxdr;':'\\u250c',\n'boxH;':'\\u2550',\n'boxh;':'\\u2500',\n'boxHD;':'\\u2566',\n'boxHd;':'\\u2564',\n'boxhD;':'\\u2565',\n'boxhd;':'\\u252c',\n'boxHU;':'\\u2569',\n'boxHu;':'\\u2567',\n'boxhU;':'\\u2568',\n'boxhu;':'\\u2534',\n'boxminus;':'\\u229f',\n'boxplus;':'\\u229e',\n'boxtimes;':'\\u22a0',\n'boxUL;':'\\u255d',\n'boxUl;':'\\u255c',\n'boxuL;':'\\u255b',\n'boxul;':'\\u2518',\n'boxUR;':'\\u255a',\n'boxUr;':'\\u2559',\n'boxuR;':'\\u2558',\n'boxur;':'\\u2514',\n'boxV;':'\\u2551',\n'boxv;':'\\u2502',\n'boxVH;':'\\u256c',\n'boxVh;':'\\u256b',\n'boxvH;':'\\u256a',\n'boxvh;':'\\u253c',\n'boxVL;':'\\u2563',\n'boxVl;':'\\u2562',\n'boxvL;':'\\u2561',\n'boxvl;':'\\u2524',\n'boxVR;':'\\u2560',\n'boxVr;':'\\u255f',\n'boxvR;':'\\u255e',\n'boxvr;':'\\u251c',\n'bprime;':'\\u2035',\n'Breve;':'\\u02d8',\n'breve;':'\\u02d8',\n'brvbar':'\\xa6',\n'brvbar;':'\\xa6',\n'Bscr;':'\\u212c',\n'bscr;':'\\U0001d4b7',\n'bsemi;':'\\u204f',\n'bsim;':'\\u223d',\n'bsime;':'\\u22cd',\n'bsol;':'\\\\',\n'bsolb;':'\\u29c5',\n'bsolhsub;':'\\u27c8',\n'bull;':'\\u2022',\n'bullet;':'\\u2022',\n'bump;':'\\u224e',\n'bumpE;':'\\u2aae',\n'bumpe;':'\\u224f',\n'Bumpeq;':'\\u224e',\n'bumpeq;':'\\u224f',\n'Cacute;':'\\u0106',\n'cacute;':'\\u0107',\n'Cap;':'\\u22d2',\n'cap;':'\\u2229',\n'capand;':'\\u2a44',\n'capbrcup;':'\\u2a49',\n'capcap;':'\\u2a4b',\n'capcup;':'\\u2a47',\n'capdot;':'\\u2a40',\n'CapitalDifferentialD;':'\\u2145',\n'caps;':'\\u2229\\ufe00',\n'caret;':'\\u2041',\n'caron;':'\\u02c7',\n'Cayleys;':'\\u212d',\n'ccaps;':'\\u2a4d',\n'Ccaron;':'\\u010c',\n'ccaron;':'\\u010d',\n'Ccedil':'\\xc7',\n'ccedil':'\\xe7',\n'Ccedil;':'\\xc7',\n'ccedil;':'\\xe7',\n'Ccirc;':'\\u0108',\n'ccirc;':'\\u0109',\n'Cconint;':'\\u2230',\n'ccups;':'\\u2a4c',\n'ccupssm;':'\\u2a50',\n'Cdot;':'\\u010a',\n'cdot;':'\\u010b',\n'cedil':'\\xb8',\n'cedil;':'\\xb8',\n'Cedilla;':'\\xb8',\n'cemptyv;':'\\u29b2',\n'cent':'\\xa2',\n'cent;':'\\xa2',\n'CenterDot;':'\\xb7',\n'centerdot;':'\\xb7',\n'Cfr;':'\\u212d',\n'cfr;':'\\U0001d520',\n'CHcy;':'\\u0427',\n'chcy;':'\\u0447',\n'check;':'\\u2713',\n'checkmark;':'\\u2713',\n'Chi;':'\\u03a7',\n'chi;':'\\u03c7',\n'cir;':'\\u25cb',\n'circ;':'\\u02c6',\n'circeq;':'\\u2257',\n'circlearrowleft;':'\\u21ba',\n'circlearrowright;':'\\u21bb',\n'circledast;':'\\u229b',\n'circledcirc;':'\\u229a',\n'circleddash;':'\\u229d',\n'CircleDot;':'\\u2299',\n'circledR;':'\\xae',\n'circledS;':'\\u24c8',\n'CircleMinus;':'\\u2296',\n'CirclePlus;':'\\u2295',\n'CircleTimes;':'\\u2297',\n'cirE;':'\\u29c3',\n'cire;':'\\u2257',\n'cirfnint;':'\\u2a10',\n'cirmid;':'\\u2aef',\n'cirscir;':'\\u29c2',\n'ClockwiseContourIntegral;':'\\u2232',\n'CloseCurlyDoubleQuote;':'\\u201d',\n'CloseCurlyQuote;':'\\u2019',\n'clubs;':'\\u2663',\n'clubsuit;':'\\u2663',\n'Colon;':'\\u2237',\n'colon;':':',\n'Colone;':'\\u2a74',\n'colone;':'\\u2254',\n'coloneq;':'\\u2254',\n'comma;':',',\n'commat;':'@',\n'comp;':'\\u2201',\n'compfn;':'\\u2218',\n'complement;':'\\u2201',\n'complexes;':'\\u2102',\n'cong;':'\\u2245',\n'congdot;':'\\u2a6d',\n'Congruent;':'\\u2261',\n'Conint;':'\\u222f',\n'conint;':'\\u222e',\n'ContourIntegral;':'\\u222e',\n'Copf;':'\\u2102',\n'copf;':'\\U0001d554',\n'coprod;':'\\u2210',\n'Coproduct;':'\\u2210',\n'COPY':'\\xa9',\n'copy':'\\xa9',\n'COPY;':'\\xa9',\n'copy;':'\\xa9',\n'copysr;':'\\u2117',\n'CounterClockwiseContourIntegral;':'\\u2233',\n'crarr;':'\\u21b5',\n'Cross;':'\\u2a2f',\n'cross;':'\\u2717',\n'Cscr;':'\\U0001d49e',\n'cscr;':'\\U0001d4b8',\n'csub;':'\\u2acf',\n'csube;':'\\u2ad1',\n'csup;':'\\u2ad0',\n'csupe;':'\\u2ad2',\n'ctdot;':'\\u22ef',\n'cudarrl;':'\\u2938',\n'cudarrr;':'\\u2935',\n'cuepr;':'\\u22de',\n'cuesc;':'\\u22df',\n'cularr;':'\\u21b6',\n'cularrp;':'\\u293d',\n'Cup;':'\\u22d3',\n'cup;':'\\u222a',\n'cupbrcap;':'\\u2a48',\n'CupCap;':'\\u224d',\n'cupcap;':'\\u2a46',\n'cupcup;':'\\u2a4a',\n'cupdot;':'\\u228d',\n'cupor;':'\\u2a45',\n'cups;':'\\u222a\\ufe00',\n'curarr;':'\\u21b7',\n'curarrm;':'\\u293c',\n'curlyeqprec;':'\\u22de',\n'curlyeqsucc;':'\\u22df',\n'curlyvee;':'\\u22ce',\n'curlywedge;':'\\u22cf',\n'curren':'\\xa4',\n'curren;':'\\xa4',\n'curvearrowleft;':'\\u21b6',\n'curvearrowright;':'\\u21b7',\n'cuvee;':'\\u22ce',\n'cuwed;':'\\u22cf',\n'cwconint;':'\\u2232',\n'cwint;':'\\u2231',\n'cylcty;':'\\u232d',\n'Dagger;':'\\u2021',\n'dagger;':'\\u2020',\n'daleth;':'\\u2138',\n'Darr;':'\\u21a1',\n'dArr;':'\\u21d3',\n'darr;':'\\u2193',\n'dash;':'\\u2010',\n'Dashv;':'\\u2ae4',\n'dashv;':'\\u22a3',\n'dbkarow;':'\\u290f',\n'dblac;':'\\u02dd',\n'Dcaron;':'\\u010e',\n'dcaron;':'\\u010f',\n'Dcy;':'\\u0414',\n'dcy;':'\\u0434',\n'DD;':'\\u2145',\n'dd;':'\\u2146',\n'ddagger;':'\\u2021',\n'ddarr;':'\\u21ca',\n'DDotrahd;':'\\u2911',\n'ddotseq;':'\\u2a77',\n'deg':'\\xb0',\n'deg;':'\\xb0',\n'Del;':'\\u2207',\n'Delta;':'\\u0394',\n'delta;':'\\u03b4',\n'demptyv;':'\\u29b1',\n'dfisht;':'\\u297f',\n'Dfr;':'\\U0001d507',\n'dfr;':'\\U0001d521',\n'dHar;':'\\u2965',\n'dharl;':'\\u21c3',\n'dharr;':'\\u21c2',\n'DiacriticalAcute;':'\\xb4',\n'DiacriticalDot;':'\\u02d9',\n'DiacriticalDoubleAcute;':'\\u02dd',\n'DiacriticalGrave;':'`',\n'DiacriticalTilde;':'\\u02dc',\n'diam;':'\\u22c4',\n'Diamond;':'\\u22c4',\n'diamond;':'\\u22c4',\n'diamondsuit;':'\\u2666',\n'diams;':'\\u2666',\n'die;':'\\xa8',\n'DifferentialD;':'\\u2146',\n'digamma;':'\\u03dd',\n'disin;':'\\u22f2',\n'div;':'\\xf7',\n'divide':'\\xf7',\n'divide;':'\\xf7',\n'divideontimes;':'\\u22c7',\n'divonx;':'\\u22c7',\n'DJcy;':'\\u0402',\n'djcy;':'\\u0452',\n'dlcorn;':'\\u231e',\n'dlcrop;':'\\u230d',\n'dollar;':'$',\n'Dopf;':'\\U0001d53b',\n'dopf;':'\\U0001d555',\n'Dot;':'\\xa8',\n'dot;':'\\u02d9',\n'DotDot;':'\\u20dc',\n'doteq;':'\\u2250',\n'doteqdot;':'\\u2251',\n'DotEqual;':'\\u2250',\n'dotminus;':'\\u2238',\n'dotplus;':'\\u2214',\n'dotsquare;':'\\u22a1',\n'doublebarwedge;':'\\u2306',\n'DoubleContourIntegral;':'\\u222f',\n'DoubleDot;':'\\xa8',\n'DoubleDownArrow;':'\\u21d3',\n'DoubleLeftArrow;':'\\u21d0',\n'DoubleLeftRightArrow;':'\\u21d4',\n'DoubleLeftTee;':'\\u2ae4',\n'DoubleLongLeftArrow;':'\\u27f8',\n'DoubleLongLeftRightArrow;':'\\u27fa',\n'DoubleLongRightArrow;':'\\u27f9',\n'DoubleRightArrow;':'\\u21d2',\n'DoubleRightTee;':'\\u22a8',\n'DoubleUpArrow;':'\\u21d1',\n'DoubleUpDownArrow;':'\\u21d5',\n'DoubleVerticalBar;':'\\u2225',\n'DownArrow;':'\\u2193',\n'Downarrow;':'\\u21d3',\n'downarrow;':'\\u2193',\n'DownArrowBar;':'\\u2913',\n'DownArrowUpArrow;':'\\u21f5',\n'DownBreve;':'\\u0311',\n'downdownarrows;':'\\u21ca',\n'downharpoonleft;':'\\u21c3',\n'downharpoonright;':'\\u21c2',\n'DownLeftRightVector;':'\\u2950',\n'DownLeftTeeVector;':'\\u295e',\n'DownLeftVector;':'\\u21bd',\n'DownLeftVectorBar;':'\\u2956',\n'DownRightTeeVector;':'\\u295f',\n'DownRightVector;':'\\u21c1',\n'DownRightVectorBar;':'\\u2957',\n'DownTee;':'\\u22a4',\n'DownTeeArrow;':'\\u21a7',\n'drbkarow;':'\\u2910',\n'drcorn;':'\\u231f',\n'drcrop;':'\\u230c',\n'Dscr;':'\\U0001d49f',\n'dscr;':'\\U0001d4b9',\n'DScy;':'\\u0405',\n'dscy;':'\\u0455',\n'dsol;':'\\u29f6',\n'Dstrok;':'\\u0110',\n'dstrok;':'\\u0111',\n'dtdot;':'\\u22f1',\n'dtri;':'\\u25bf',\n'dtrif;':'\\u25be',\n'duarr;':'\\u21f5',\n'duhar;':'\\u296f',\n'dwangle;':'\\u29a6',\n'DZcy;':'\\u040f',\n'dzcy;':'\\u045f',\n'dzigrarr;':'\\u27ff',\n'Eacute':'\\xc9',\n'eacute':'\\xe9',\n'Eacute;':'\\xc9',\n'eacute;':'\\xe9',\n'easter;':'\\u2a6e',\n'Ecaron;':'\\u011a',\n'ecaron;':'\\u011b',\n'ecir;':'\\u2256',\n'Ecirc':'\\xca',\n'ecirc':'\\xea',\n'Ecirc;':'\\xca',\n'ecirc;':'\\xea',\n'ecolon;':'\\u2255',\n'Ecy;':'\\u042d',\n'ecy;':'\\u044d',\n'eDDot;':'\\u2a77',\n'Edot;':'\\u0116',\n'eDot;':'\\u2251',\n'edot;':'\\u0117',\n'ee;':'\\u2147',\n'efDot;':'\\u2252',\n'Efr;':'\\U0001d508',\n'efr;':'\\U0001d522',\n'eg;':'\\u2a9a',\n'Egrave':'\\xc8',\n'egrave':'\\xe8',\n'Egrave;':'\\xc8',\n'egrave;':'\\xe8',\n'egs;':'\\u2a96',\n'egsdot;':'\\u2a98',\n'el;':'\\u2a99',\n'Element;':'\\u2208',\n'elinters;':'\\u23e7',\n'ell;':'\\u2113',\n'els;':'\\u2a95',\n'elsdot;':'\\u2a97',\n'Emacr;':'\\u0112',\n'emacr;':'\\u0113',\n'empty;':'\\u2205',\n'emptyset;':'\\u2205',\n'EmptySmallSquare;':'\\u25fb',\n'emptyv;':'\\u2205',\n'EmptyVerySmallSquare;':'\\u25ab',\n'emsp13;':'\\u2004',\n'emsp14;':'\\u2005',\n'emsp;':'\\u2003',\n'ENG;':'\\u014a',\n'eng;':'\\u014b',\n'ensp;':'\\u2002',\n'Eogon;':'\\u0118',\n'eogon;':'\\u0119',\n'Eopf;':'\\U0001d53c',\n'eopf;':'\\U0001d556',\n'epar;':'\\u22d5',\n'eparsl;':'\\u29e3',\n'eplus;':'\\u2a71',\n'epsi;':'\\u03b5',\n'Epsilon;':'\\u0395',\n'epsilon;':'\\u03b5',\n'epsiv;':'\\u03f5',\n'eqcirc;':'\\u2256',\n'eqcolon;':'\\u2255',\n'eqsim;':'\\u2242',\n'eqslantgtr;':'\\u2a96',\n'eqslantless;':'\\u2a95',\n'Equal;':'\\u2a75',\n'equals;':'=',\n'EqualTilde;':'\\u2242',\n'equest;':'\\u225f',\n'Equilibrium;':'\\u21cc',\n'equiv;':'\\u2261',\n'equivDD;':'\\u2a78',\n'eqvparsl;':'\\u29e5',\n'erarr;':'\\u2971',\n'erDot;':'\\u2253',\n'Escr;':'\\u2130',\n'escr;':'\\u212f',\n'esdot;':'\\u2250',\n'Esim;':'\\u2a73',\n'esim;':'\\u2242',\n'Eta;':'\\u0397',\n'eta;':'\\u03b7',\n'ETH':'\\xd0',\n'eth':'\\xf0',\n'ETH;':'\\xd0',\n'eth;':'\\xf0',\n'Euml':'\\xcb',\n'euml':'\\xeb',\n'Euml;':'\\xcb',\n'euml;':'\\xeb',\n'euro;':'\\u20ac',\n'excl;':'!',\n'exist;':'\\u2203',\n'Exists;':'\\u2203',\n'expectation;':'\\u2130',\n'ExponentialE;':'\\u2147',\n'exponentiale;':'\\u2147',\n'fallingdotseq;':'\\u2252',\n'Fcy;':'\\u0424',\n'fcy;':'\\u0444',\n'female;':'\\u2640',\n'ffilig;':'\\ufb03',\n'fflig;':'\\ufb00',\n'ffllig;':'\\ufb04',\n'Ffr;':'\\U0001d509',\n'ffr;':'\\U0001d523',\n'filig;':'\\ufb01',\n'FilledSmallSquare;':'\\u25fc',\n'FilledVerySmallSquare;':'\\u25aa',\n'fjlig;':'fj',\n'flat;':'\\u266d',\n'fllig;':'\\ufb02',\n'fltns;':'\\u25b1',\n'fnof;':'\\u0192',\n'Fopf;':'\\U0001d53d',\n'fopf;':'\\U0001d557',\n'ForAll;':'\\u2200',\n'forall;':'\\u2200',\n'fork;':'\\u22d4',\n'forkv;':'\\u2ad9',\n'Fouriertrf;':'\\u2131',\n'fpartint;':'\\u2a0d',\n'frac12':'\\xbd',\n'frac12;':'\\xbd',\n'frac13;':'\\u2153',\n'frac14':'\\xbc',\n'frac14;':'\\xbc',\n'frac15;':'\\u2155',\n'frac16;':'\\u2159',\n'frac18;':'\\u215b',\n'frac23;':'\\u2154',\n'frac25;':'\\u2156',\n'frac34':'\\xbe',\n'frac34;':'\\xbe',\n'frac35;':'\\u2157',\n'frac38;':'\\u215c',\n'frac45;':'\\u2158',\n'frac56;':'\\u215a',\n'frac58;':'\\u215d',\n'frac78;':'\\u215e',\n'frasl;':'\\u2044',\n'frown;':'\\u2322',\n'Fscr;':'\\u2131',\n'fscr;':'\\U0001d4bb',\n'gacute;':'\\u01f5',\n'Gamma;':'\\u0393',\n'gamma;':'\\u03b3',\n'Gammad;':'\\u03dc',\n'gammad;':'\\u03dd',\n'gap;':'\\u2a86',\n'Gbreve;':'\\u011e',\n'gbreve;':'\\u011f',\n'Gcedil;':'\\u0122',\n'Gcirc;':'\\u011c',\n'gcirc;':'\\u011d',\n'Gcy;':'\\u0413',\n'gcy;':'\\u0433',\n'Gdot;':'\\u0120',\n'gdot;':'\\u0121',\n'gE;':'\\u2267',\n'ge;':'\\u2265',\n'gEl;':'\\u2a8c',\n'gel;':'\\u22db',\n'geq;':'\\u2265',\n'geqq;':'\\u2267',\n'geqslant;':'\\u2a7e',\n'ges;':'\\u2a7e',\n'gescc;':'\\u2aa9',\n'gesdot;':'\\u2a80',\n'gesdoto;':'\\u2a82',\n'gesdotol;':'\\u2a84',\n'gesl;':'\\u22db\\ufe00',\n'gesles;':'\\u2a94',\n'Gfr;':'\\U0001d50a',\n'gfr;':'\\U0001d524',\n'Gg;':'\\u22d9',\n'gg;':'\\u226b',\n'ggg;':'\\u22d9',\n'gimel;':'\\u2137',\n'GJcy;':'\\u0403',\n'gjcy;':'\\u0453',\n'gl;':'\\u2277',\n'gla;':'\\u2aa5',\n'glE;':'\\u2a92',\n'glj;':'\\u2aa4',\n'gnap;':'\\u2a8a',\n'gnapprox;':'\\u2a8a',\n'gnE;':'\\u2269',\n'gne;':'\\u2a88',\n'gneq;':'\\u2a88',\n'gneqq;':'\\u2269',\n'gnsim;':'\\u22e7',\n'Gopf;':'\\U0001d53e',\n'gopf;':'\\U0001d558',\n'grave;':'`',\n'GreaterEqual;':'\\u2265',\n'GreaterEqualLess;':'\\u22db',\n'GreaterFullEqual;':'\\u2267',\n'GreaterGreater;':'\\u2aa2',\n'GreaterLess;':'\\u2277',\n'GreaterSlantEqual;':'\\u2a7e',\n'GreaterTilde;':'\\u2273',\n'Gscr;':'\\U0001d4a2',\n'gscr;':'\\u210a',\n'gsim;':'\\u2273',\n'gsime;':'\\u2a8e',\n'gsiml;':'\\u2a90',\n'GT':'>',\n'gt':'>',\n'GT;':'>',\n'Gt;':'\\u226b',\n'gt;':'>',\n'gtcc;':'\\u2aa7',\n'gtcir;':'\\u2a7a',\n'gtdot;':'\\u22d7',\n'gtlPar;':'\\u2995',\n'gtquest;':'\\u2a7c',\n'gtrapprox;':'\\u2a86',\n'gtrarr;':'\\u2978',\n'gtrdot;':'\\u22d7',\n'gtreqless;':'\\u22db',\n'gtreqqless;':'\\u2a8c',\n'gtrless;':'\\u2277',\n'gtrsim;':'\\u2273',\n'gvertneqq;':'\\u2269\\ufe00',\n'gvnE;':'\\u2269\\ufe00',\n'Hacek;':'\\u02c7',\n'hairsp;':'\\u200a',\n'half;':'\\xbd',\n'hamilt;':'\\u210b',\n'HARDcy;':'\\u042a',\n'hardcy;':'\\u044a',\n'hArr;':'\\u21d4',\n'harr;':'\\u2194',\n'harrcir;':'\\u2948',\n'harrw;':'\\u21ad',\n'Hat;':'^',\n'hbar;':'\\u210f',\n'Hcirc;':'\\u0124',\n'hcirc;':'\\u0125',\n'hearts;':'\\u2665',\n'heartsuit;':'\\u2665',\n'hellip;':'\\u2026',\n'hercon;':'\\u22b9',\n'Hfr;':'\\u210c',\n'hfr;':'\\U0001d525',\n'HilbertSpace;':'\\u210b',\n'hksearow;':'\\u2925',\n'hkswarow;':'\\u2926',\n'hoarr;':'\\u21ff',\n'homtht;':'\\u223b',\n'hookleftarrow;':'\\u21a9',\n'hookrightarrow;':'\\u21aa',\n'Hopf;':'\\u210d',\n'hopf;':'\\U0001d559',\n'horbar;':'\\u2015',\n'HorizontalLine;':'\\u2500',\n'Hscr;':'\\u210b',\n'hscr;':'\\U0001d4bd',\n'hslash;':'\\u210f',\n'Hstrok;':'\\u0126',\n'hstrok;':'\\u0127',\n'HumpDownHump;':'\\u224e',\n'HumpEqual;':'\\u224f',\n'hybull;':'\\u2043',\n'hyphen;':'\\u2010',\n'Iacute':'\\xcd',\n'iacute':'\\xed',\n'Iacute;':'\\xcd',\n'iacute;':'\\xed',\n'ic;':'\\u2063',\n'Icirc':'\\xce',\n'icirc':'\\xee',\n'Icirc;':'\\xce',\n'icirc;':'\\xee',\n'Icy;':'\\u0418',\n'icy;':'\\u0438',\n'Idot;':'\\u0130',\n'IEcy;':'\\u0415',\n'iecy;':'\\u0435',\n'iexcl':'\\xa1',\n'iexcl;':'\\xa1',\n'iff;':'\\u21d4',\n'Ifr;':'\\u2111',\n'ifr;':'\\U0001d526',\n'Igrave':'\\xcc',\n'igrave':'\\xec',\n'Igrave;':'\\xcc',\n'igrave;':'\\xec',\n'ii;':'\\u2148',\n'iiiint;':'\\u2a0c',\n'iiint;':'\\u222d',\n'iinfin;':'\\u29dc',\n'iiota;':'\\u2129',\n'IJlig;':'\\u0132',\n'ijlig;':'\\u0133',\n'Im;':'\\u2111',\n'Imacr;':'\\u012a',\n'imacr;':'\\u012b',\n'image;':'\\u2111',\n'ImaginaryI;':'\\u2148',\n'imagline;':'\\u2110',\n'imagpart;':'\\u2111',\n'imath;':'\\u0131',\n'imof;':'\\u22b7',\n'imped;':'\\u01b5',\n'Implies;':'\\u21d2',\n'in;':'\\u2208',\n'incare;':'\\u2105',\n'infin;':'\\u221e',\n'infintie;':'\\u29dd',\n'inodot;':'\\u0131',\n'Int;':'\\u222c',\n'int;':'\\u222b',\n'intcal;':'\\u22ba',\n'integers;':'\\u2124',\n'Integral;':'\\u222b',\n'intercal;':'\\u22ba',\n'Intersection;':'\\u22c2',\n'intlarhk;':'\\u2a17',\n'intprod;':'\\u2a3c',\n'InvisibleComma;':'\\u2063',\n'InvisibleTimes;':'\\u2062',\n'IOcy;':'\\u0401',\n'iocy;':'\\u0451',\n'Iogon;':'\\u012e',\n'iogon;':'\\u012f',\n'Iopf;':'\\U0001d540',\n'iopf;':'\\U0001d55a',\n'Iota;':'\\u0399',\n'iota;':'\\u03b9',\n'iprod;':'\\u2a3c',\n'iquest':'\\xbf',\n'iquest;':'\\xbf',\n'Iscr;':'\\u2110',\n'iscr;':'\\U0001d4be',\n'isin;':'\\u2208',\n'isindot;':'\\u22f5',\n'isinE;':'\\u22f9',\n'isins;':'\\u22f4',\n'isinsv;':'\\u22f3',\n'isinv;':'\\u2208',\n'it;':'\\u2062',\n'Itilde;':'\\u0128',\n'itilde;':'\\u0129',\n'Iukcy;':'\\u0406',\n'iukcy;':'\\u0456',\n'Iuml':'\\xcf',\n'iuml':'\\xef',\n'Iuml;':'\\xcf',\n'iuml;':'\\xef',\n'Jcirc;':'\\u0134',\n'jcirc;':'\\u0135',\n'Jcy;':'\\u0419',\n'jcy;':'\\u0439',\n'Jfr;':'\\U0001d50d',\n'jfr;':'\\U0001d527',\n'jmath;':'\\u0237',\n'Jopf;':'\\U0001d541',\n'jopf;':'\\U0001d55b',\n'Jscr;':'\\U0001d4a5',\n'jscr;':'\\U0001d4bf',\n'Jsercy;':'\\u0408',\n'jsercy;':'\\u0458',\n'Jukcy;':'\\u0404',\n'jukcy;':'\\u0454',\n'Kappa;':'\\u039a',\n'kappa;':'\\u03ba',\n'kappav;':'\\u03f0',\n'Kcedil;':'\\u0136',\n'kcedil;':'\\u0137',\n'Kcy;':'\\u041a',\n'kcy;':'\\u043a',\n'Kfr;':'\\U0001d50e',\n'kfr;':'\\U0001d528',\n'kgreen;':'\\u0138',\n'KHcy;':'\\u0425',\n'khcy;':'\\u0445',\n'KJcy;':'\\u040c',\n'kjcy;':'\\u045c',\n'Kopf;':'\\U0001d542',\n'kopf;':'\\U0001d55c',\n'Kscr;':'\\U0001d4a6',\n'kscr;':'\\U0001d4c0',\n'lAarr;':'\\u21da',\n'Lacute;':'\\u0139',\n'lacute;':'\\u013a',\n'laemptyv;':'\\u29b4',\n'lagran;':'\\u2112',\n'Lambda;':'\\u039b',\n'lambda;':'\\u03bb',\n'Lang;':'\\u27ea',\n'lang;':'\\u27e8',\n'langd;':'\\u2991',\n'langle;':'\\u27e8',\n'lap;':'\\u2a85',\n'Laplacetrf;':'\\u2112',\n'laquo':'\\xab',\n'laquo;':'\\xab',\n'Larr;':'\\u219e',\n'lArr;':'\\u21d0',\n'larr;':'\\u2190',\n'larrb;':'\\u21e4',\n'larrbfs;':'\\u291f',\n'larrfs;':'\\u291d',\n'larrhk;':'\\u21a9',\n'larrlp;':'\\u21ab',\n'larrpl;':'\\u2939',\n'larrsim;':'\\u2973',\n'larrtl;':'\\u21a2',\n'lat;':'\\u2aab',\n'lAtail;':'\\u291b',\n'latail;':'\\u2919',\n'late;':'\\u2aad',\n'lates;':'\\u2aad\\ufe00',\n'lBarr;':'\\u290e',\n'lbarr;':'\\u290c',\n'lbbrk;':'\\u2772',\n'lbrace;':'{',\n'lbrack;':'[',\n'lbrke;':'\\u298b',\n'lbrksld;':'\\u298f',\n'lbrkslu;':'\\u298d',\n'Lcaron;':'\\u013d',\n'lcaron;':'\\u013e',\n'Lcedil;':'\\u013b',\n'lcedil;':'\\u013c',\n'lceil;':'\\u2308',\n'lcub;':'{',\n'Lcy;':'\\u041b',\n'lcy;':'\\u043b',\n'ldca;':'\\u2936',\n'ldquo;':'\\u201c',\n'ldquor;':'\\u201e',\n'ldrdhar;':'\\u2967',\n'ldrushar;':'\\u294b',\n'ldsh;':'\\u21b2',\n'lE;':'\\u2266',\n'le;':'\\u2264',\n'LeftAngleBracket;':'\\u27e8',\n'LeftArrow;':'\\u2190',\n'Leftarrow;':'\\u21d0',\n'leftarrow;':'\\u2190',\n'LeftArrowBar;':'\\u21e4',\n'LeftArrowRightArrow;':'\\u21c6',\n'leftarrowtail;':'\\u21a2',\n'LeftCeiling;':'\\u2308',\n'LeftDoubleBracket;':'\\u27e6',\n'LeftDownTeeVector;':'\\u2961',\n'LeftDownVector;':'\\u21c3',\n'LeftDownVectorBar;':'\\u2959',\n'LeftFloor;':'\\u230a',\n'leftharpoondown;':'\\u21bd',\n'leftharpoonup;':'\\u21bc',\n'leftleftarrows;':'\\u21c7',\n'LeftRightArrow;':'\\u2194',\n'Leftrightarrow;':'\\u21d4',\n'leftrightarrow;':'\\u2194',\n'leftrightarrows;':'\\u21c6',\n'leftrightharpoons;':'\\u21cb',\n'leftrightsquigarrow;':'\\u21ad',\n'LeftRightVector;':'\\u294e',\n'LeftTee;':'\\u22a3',\n'LeftTeeArrow;':'\\u21a4',\n'LeftTeeVector;':'\\u295a',\n'leftthreetimes;':'\\u22cb',\n'LeftTriangle;':'\\u22b2',\n'LeftTriangleBar;':'\\u29cf',\n'LeftTriangleEqual;':'\\u22b4',\n'LeftUpDownVector;':'\\u2951',\n'LeftUpTeeVector;':'\\u2960',\n'LeftUpVector;':'\\u21bf',\n'LeftUpVectorBar;':'\\u2958',\n'LeftVector;':'\\u21bc',\n'LeftVectorBar;':'\\u2952',\n'lEg;':'\\u2a8b',\n'leg;':'\\u22da',\n'leq;':'\\u2264',\n'leqq;':'\\u2266',\n'leqslant;':'\\u2a7d',\n'les;':'\\u2a7d',\n'lescc;':'\\u2aa8',\n'lesdot;':'\\u2a7f',\n'lesdoto;':'\\u2a81',\n'lesdotor;':'\\u2a83',\n'lesg;':'\\u22da\\ufe00',\n'lesges;':'\\u2a93',\n'lessapprox;':'\\u2a85',\n'lessdot;':'\\u22d6',\n'lesseqgtr;':'\\u22da',\n'lesseqqgtr;':'\\u2a8b',\n'LessEqualGreater;':'\\u22da',\n'LessFullEqual;':'\\u2266',\n'LessGreater;':'\\u2276',\n'lessgtr;':'\\u2276',\n'LessLess;':'\\u2aa1',\n'lesssim;':'\\u2272',\n'LessSlantEqual;':'\\u2a7d',\n'LessTilde;':'\\u2272',\n'lfisht;':'\\u297c',\n'lfloor;':'\\u230a',\n'Lfr;':'\\U0001d50f',\n'lfr;':'\\U0001d529',\n'lg;':'\\u2276',\n'lgE;':'\\u2a91',\n'lHar;':'\\u2962',\n'lhard;':'\\u21bd',\n'lharu;':'\\u21bc',\n'lharul;':'\\u296a',\n'lhblk;':'\\u2584',\n'LJcy;':'\\u0409',\n'ljcy;':'\\u0459',\n'Ll;':'\\u22d8',\n'll;':'\\u226a',\n'llarr;':'\\u21c7',\n'llcorner;':'\\u231e',\n'Lleftarrow;':'\\u21da',\n'llhard;':'\\u296b',\n'lltri;':'\\u25fa',\n'Lmidot;':'\\u013f',\n'lmidot;':'\\u0140',\n'lmoust;':'\\u23b0',\n'lmoustache;':'\\u23b0',\n'lnap;':'\\u2a89',\n'lnapprox;':'\\u2a89',\n'lnE;':'\\u2268',\n'lne;':'\\u2a87',\n'lneq;':'\\u2a87',\n'lneqq;':'\\u2268',\n'lnsim;':'\\u22e6',\n'loang;':'\\u27ec',\n'loarr;':'\\u21fd',\n'lobrk;':'\\u27e6',\n'LongLeftArrow;':'\\u27f5',\n'Longleftarrow;':'\\u27f8',\n'longleftarrow;':'\\u27f5',\n'LongLeftRightArrow;':'\\u27f7',\n'Longleftrightarrow;':'\\u27fa',\n'longleftrightarrow;':'\\u27f7',\n'longmapsto;':'\\u27fc',\n'LongRightArrow;':'\\u27f6',\n'Longrightarrow;':'\\u27f9',\n'longrightarrow;':'\\u27f6',\n'looparrowleft;':'\\u21ab',\n'looparrowright;':'\\u21ac',\n'lopar;':'\\u2985',\n'Lopf;':'\\U0001d543',\n'lopf;':'\\U0001d55d',\n'loplus;':'\\u2a2d',\n'lotimes;':'\\u2a34',\n'lowast;':'\\u2217',\n'lowbar;':'_',\n'LowerLeftArrow;':'\\u2199',\n'LowerRightArrow;':'\\u2198',\n'loz;':'\\u25ca',\n'lozenge;':'\\u25ca',\n'lozf;':'\\u29eb',\n'lpar;':'(',\n'lparlt;':'\\u2993',\n'lrarr;':'\\u21c6',\n'lrcorner;':'\\u231f',\n'lrhar;':'\\u21cb',\n'lrhard;':'\\u296d',\n'lrm;':'\\u200e',\n'lrtri;':'\\u22bf',\n'lsaquo;':'\\u2039',\n'Lscr;':'\\u2112',\n'lscr;':'\\U0001d4c1',\n'Lsh;':'\\u21b0',\n'lsh;':'\\u21b0',\n'lsim;':'\\u2272',\n'lsime;':'\\u2a8d',\n'lsimg;':'\\u2a8f',\n'lsqb;':'[',\n'lsquo;':'\\u2018',\n'lsquor;':'\\u201a',\n'Lstrok;':'\\u0141',\n'lstrok;':'\\u0142',\n'LT':'<',\n'lt':'<',\n'LT;':'<',\n'Lt;':'\\u226a',\n'lt;':'<',\n'ltcc;':'\\u2aa6',\n'ltcir;':'\\u2a79',\n'ltdot;':'\\u22d6',\n'lthree;':'\\u22cb',\n'ltimes;':'\\u22c9',\n'ltlarr;':'\\u2976',\n'ltquest;':'\\u2a7b',\n'ltri;':'\\u25c3',\n'ltrie;':'\\u22b4',\n'ltrif;':'\\u25c2',\n'ltrPar;':'\\u2996',\n'lurdshar;':'\\u294a',\n'luruhar;':'\\u2966',\n'lvertneqq;':'\\u2268\\ufe00',\n'lvnE;':'\\u2268\\ufe00',\n'macr':'\\xaf',\n'macr;':'\\xaf',\n'male;':'\\u2642',\n'malt;':'\\u2720',\n'maltese;':'\\u2720',\n'Map;':'\\u2905',\n'map;':'\\u21a6',\n'mapsto;':'\\u21a6',\n'mapstodown;':'\\u21a7',\n'mapstoleft;':'\\u21a4',\n'mapstoup;':'\\u21a5',\n'marker;':'\\u25ae',\n'mcomma;':'\\u2a29',\n'Mcy;':'\\u041c',\n'mcy;':'\\u043c',\n'mdash;':'\\u2014',\n'mDDot;':'\\u223a',\n'measuredangle;':'\\u2221',\n'MediumSpace;':'\\u205f',\n'Mellintrf;':'\\u2133',\n'Mfr;':'\\U0001d510',\n'mfr;':'\\U0001d52a',\n'mho;':'\\u2127',\n'micro':'\\xb5',\n'micro;':'\\xb5',\n'mid;':'\\u2223',\n'midast;':'*',\n'midcir;':'\\u2af0',\n'middot':'\\xb7',\n'middot;':'\\xb7',\n'minus;':'\\u2212',\n'minusb;':'\\u229f',\n'minusd;':'\\u2238',\n'minusdu;':'\\u2a2a',\n'MinusPlus;':'\\u2213',\n'mlcp;':'\\u2adb',\n'mldr;':'\\u2026',\n'mnplus;':'\\u2213',\n'models;':'\\u22a7',\n'Mopf;':'\\U0001d544',\n'mopf;':'\\U0001d55e',\n'mp;':'\\u2213',\n'Mscr;':'\\u2133',\n'mscr;':'\\U0001d4c2',\n'mstpos;':'\\u223e',\n'Mu;':'\\u039c',\n'mu;':'\\u03bc',\n'multimap;':'\\u22b8',\n'mumap;':'\\u22b8',\n'nabla;':'\\u2207',\n'Nacute;':'\\u0143',\n'nacute;':'\\u0144',\n'nang;':'\\u2220\\u20d2',\n'nap;':'\\u2249',\n'napE;':'\\u2a70\\u0338',\n'napid;':'\\u224b\\u0338',\n'napos;':'\\u0149',\n'napprox;':'\\u2249',\n'natur;':'\\u266e',\n'natural;':'\\u266e',\n'naturals;':'\\u2115',\n'nbsp':'\\xa0',\n'nbsp;':'\\xa0',\n'nbump;':'\\u224e\\u0338',\n'nbumpe;':'\\u224f\\u0338',\n'ncap;':'\\u2a43',\n'Ncaron;':'\\u0147',\n'ncaron;':'\\u0148',\n'Ncedil;':'\\u0145',\n'ncedil;':'\\u0146',\n'ncong;':'\\u2247',\n'ncongdot;':'\\u2a6d\\u0338',\n'ncup;':'\\u2a42',\n'Ncy;':'\\u041d',\n'ncy;':'\\u043d',\n'ndash;':'\\u2013',\n'ne;':'\\u2260',\n'nearhk;':'\\u2924',\n'neArr;':'\\u21d7',\n'nearr;':'\\u2197',\n'nearrow;':'\\u2197',\n'nedot;':'\\u2250\\u0338',\n'NegativeMediumSpace;':'\\u200b',\n'NegativeThickSpace;':'\\u200b',\n'NegativeThinSpace;':'\\u200b',\n'NegativeVeryThinSpace;':'\\u200b',\n'nequiv;':'\\u2262',\n'nesear;':'\\u2928',\n'nesim;':'\\u2242\\u0338',\n'NestedGreaterGreater;':'\\u226b',\n'NestedLessLess;':'\\u226a',\n'NewLine;':'\\n',\n'nexist;':'\\u2204',\n'nexists;':'\\u2204',\n'Nfr;':'\\U0001d511',\n'nfr;':'\\U0001d52b',\n'ngE;':'\\u2267\\u0338',\n'nge;':'\\u2271',\n'ngeq;':'\\u2271',\n'ngeqq;':'\\u2267\\u0338',\n'ngeqslant;':'\\u2a7e\\u0338',\n'nges;':'\\u2a7e\\u0338',\n'nGg;':'\\u22d9\\u0338',\n'ngsim;':'\\u2275',\n'nGt;':'\\u226b\\u20d2',\n'ngt;':'\\u226f',\n'ngtr;':'\\u226f',\n'nGtv;':'\\u226b\\u0338',\n'nhArr;':'\\u21ce',\n'nharr;':'\\u21ae',\n'nhpar;':'\\u2af2',\n'ni;':'\\u220b',\n'nis;':'\\u22fc',\n'nisd;':'\\u22fa',\n'niv;':'\\u220b',\n'NJcy;':'\\u040a',\n'njcy;':'\\u045a',\n'nlArr;':'\\u21cd',\n'nlarr;':'\\u219a',\n'nldr;':'\\u2025',\n'nlE;':'\\u2266\\u0338',\n'nle;':'\\u2270',\n'nLeftarrow;':'\\u21cd',\n'nleftarrow;':'\\u219a',\n'nLeftrightarrow;':'\\u21ce',\n'nleftrightarrow;':'\\u21ae',\n'nleq;':'\\u2270',\n'nleqq;':'\\u2266\\u0338',\n'nleqslant;':'\\u2a7d\\u0338',\n'nles;':'\\u2a7d\\u0338',\n'nless;':'\\u226e',\n'nLl;':'\\u22d8\\u0338',\n'nlsim;':'\\u2274',\n'nLt;':'\\u226a\\u20d2',\n'nlt;':'\\u226e',\n'nltri;':'\\u22ea',\n'nltrie;':'\\u22ec',\n'nLtv;':'\\u226a\\u0338',\n'nmid;':'\\u2224',\n'NoBreak;':'\\u2060',\n'NonBreakingSpace;':'\\xa0',\n'Nopf;':'\\u2115',\n'nopf;':'\\U0001d55f',\n'not':'\\xac',\n'Not;':'\\u2aec',\n'not;':'\\xac',\n'NotCongruent;':'\\u2262',\n'NotCupCap;':'\\u226d',\n'NotDoubleVerticalBar;':'\\u2226',\n'NotElement;':'\\u2209',\n'NotEqual;':'\\u2260',\n'NotEqualTilde;':'\\u2242\\u0338',\n'NotExists;':'\\u2204',\n'NotGreater;':'\\u226f',\n'NotGreaterEqual;':'\\u2271',\n'NotGreaterFullEqual;':'\\u2267\\u0338',\n'NotGreaterGreater;':'\\u226b\\u0338',\n'NotGreaterLess;':'\\u2279',\n'NotGreaterSlantEqual;':'\\u2a7e\\u0338',\n'NotGreaterTilde;':'\\u2275',\n'NotHumpDownHump;':'\\u224e\\u0338',\n'NotHumpEqual;':'\\u224f\\u0338',\n'notin;':'\\u2209',\n'notindot;':'\\u22f5\\u0338',\n'notinE;':'\\u22f9\\u0338',\n'notinva;':'\\u2209',\n'notinvb;':'\\u22f7',\n'notinvc;':'\\u22f6',\n'NotLeftTriangle;':'\\u22ea',\n'NotLeftTriangleBar;':'\\u29cf\\u0338',\n'NotLeftTriangleEqual;':'\\u22ec',\n'NotLess;':'\\u226e',\n'NotLessEqual;':'\\u2270',\n'NotLessGreater;':'\\u2278',\n'NotLessLess;':'\\u226a\\u0338',\n'NotLessSlantEqual;':'\\u2a7d\\u0338',\n'NotLessTilde;':'\\u2274',\n'NotNestedGreaterGreater;':'\\u2aa2\\u0338',\n'NotNestedLessLess;':'\\u2aa1\\u0338',\n'notni;':'\\u220c',\n'notniva;':'\\u220c',\n'notnivb;':'\\u22fe',\n'notnivc;':'\\u22fd',\n'NotPrecedes;':'\\u2280',\n'NotPrecedesEqual;':'\\u2aaf\\u0338',\n'NotPrecedesSlantEqual;':'\\u22e0',\n'NotReverseElement;':'\\u220c',\n'NotRightTriangle;':'\\u22eb',\n'NotRightTriangleBar;':'\\u29d0\\u0338',\n'NotRightTriangleEqual;':'\\u22ed',\n'NotSquareSubset;':'\\u228f\\u0338',\n'NotSquareSubsetEqual;':'\\u22e2',\n'NotSquareSuperset;':'\\u2290\\u0338',\n'NotSquareSupersetEqual;':'\\u22e3',\n'NotSubset;':'\\u2282\\u20d2',\n'NotSubsetEqual;':'\\u2288',\n'NotSucceeds;':'\\u2281',\n'NotSucceedsEqual;':'\\u2ab0\\u0338',\n'NotSucceedsSlantEqual;':'\\u22e1',\n'NotSucceedsTilde;':'\\u227f\\u0338',\n'NotSuperset;':'\\u2283\\u20d2',\n'NotSupersetEqual;':'\\u2289',\n'NotTilde;':'\\u2241',\n'NotTildeEqual;':'\\u2244',\n'NotTildeFullEqual;':'\\u2247',\n'NotTildeTilde;':'\\u2249',\n'NotVerticalBar;':'\\u2224',\n'npar;':'\\u2226',\n'nparallel;':'\\u2226',\n'nparsl;':'\\u2afd\\u20e5',\n'npart;':'\\u2202\\u0338',\n'npolint;':'\\u2a14',\n'npr;':'\\u2280',\n'nprcue;':'\\u22e0',\n'npre;':'\\u2aaf\\u0338',\n'nprec;':'\\u2280',\n'npreceq;':'\\u2aaf\\u0338',\n'nrArr;':'\\u21cf',\n'nrarr;':'\\u219b',\n'nrarrc;':'\\u2933\\u0338',\n'nrarrw;':'\\u219d\\u0338',\n'nRightarrow;':'\\u21cf',\n'nrightarrow;':'\\u219b',\n'nrtri;':'\\u22eb',\n'nrtrie;':'\\u22ed',\n'nsc;':'\\u2281',\n'nsccue;':'\\u22e1',\n'nsce;':'\\u2ab0\\u0338',\n'Nscr;':'\\U0001d4a9',\n'nscr;':'\\U0001d4c3',\n'nshortmid;':'\\u2224',\n'nshortparallel;':'\\u2226',\n'nsim;':'\\u2241',\n'nsime;':'\\u2244',\n'nsimeq;':'\\u2244',\n'nsmid;':'\\u2224',\n'nspar;':'\\u2226',\n'nsqsube;':'\\u22e2',\n'nsqsupe;':'\\u22e3',\n'nsub;':'\\u2284',\n'nsubE;':'\\u2ac5\\u0338',\n'nsube;':'\\u2288',\n'nsubset;':'\\u2282\\u20d2',\n'nsubseteq;':'\\u2288',\n'nsubseteqq;':'\\u2ac5\\u0338',\n'nsucc;':'\\u2281',\n'nsucceq;':'\\u2ab0\\u0338',\n'nsup;':'\\u2285',\n'nsupE;':'\\u2ac6\\u0338',\n'nsupe;':'\\u2289',\n'nsupset;':'\\u2283\\u20d2',\n'nsupseteq;':'\\u2289',\n'nsupseteqq;':'\\u2ac6\\u0338',\n'ntgl;':'\\u2279',\n'Ntilde':'\\xd1',\n'ntilde':'\\xf1',\n'Ntilde;':'\\xd1',\n'ntilde;':'\\xf1',\n'ntlg;':'\\u2278',\n'ntriangleleft;':'\\u22ea',\n'ntrianglelefteq;':'\\u22ec',\n'ntriangleright;':'\\u22eb',\n'ntrianglerighteq;':'\\u22ed',\n'Nu;':'\\u039d',\n'nu;':'\\u03bd',\n'num;':'#',\n'numero;':'\\u2116',\n'numsp;':'\\u2007',\n'nvap;':'\\u224d\\u20d2',\n'nVDash;':'\\u22af',\n'nVdash;':'\\u22ae',\n'nvDash;':'\\u22ad',\n'nvdash;':'\\u22ac',\n'nvge;':'\\u2265\\u20d2',\n'nvgt;':'>\\u20d2',\n'nvHarr;':'\\u2904',\n'nvinfin;':'\\u29de',\n'nvlArr;':'\\u2902',\n'nvle;':'\\u2264\\u20d2',\n'nvlt;':'<\\u20d2',\n'nvltrie;':'\\u22b4\\u20d2',\n'nvrArr;':'\\u2903',\n'nvrtrie;':'\\u22b5\\u20d2',\n'nvsim;':'\\u223c\\u20d2',\n'nwarhk;':'\\u2923',\n'nwArr;':'\\u21d6',\n'nwarr;':'\\u2196',\n'nwarrow;':'\\u2196',\n'nwnear;':'\\u2927',\n'Oacute':'\\xd3',\n'oacute':'\\xf3',\n'Oacute;':'\\xd3',\n'oacute;':'\\xf3',\n'oast;':'\\u229b',\n'ocir;':'\\u229a',\n'Ocirc':'\\xd4',\n'ocirc':'\\xf4',\n'Ocirc;':'\\xd4',\n'ocirc;':'\\xf4',\n'Ocy;':'\\u041e',\n'ocy;':'\\u043e',\n'odash;':'\\u229d',\n'Odblac;':'\\u0150',\n'odblac;':'\\u0151',\n'odiv;':'\\u2a38',\n'odot;':'\\u2299',\n'odsold;':'\\u29bc',\n'OElig;':'\\u0152',\n'oelig;':'\\u0153',\n'ofcir;':'\\u29bf',\n'Ofr;':'\\U0001d512',\n'ofr;':'\\U0001d52c',\n'ogon;':'\\u02db',\n'Ograve':'\\xd2',\n'ograve':'\\xf2',\n'Ograve;':'\\xd2',\n'ograve;':'\\xf2',\n'ogt;':'\\u29c1',\n'ohbar;':'\\u29b5',\n'ohm;':'\\u03a9',\n'oint;':'\\u222e',\n'olarr;':'\\u21ba',\n'olcir;':'\\u29be',\n'olcross;':'\\u29bb',\n'oline;':'\\u203e',\n'olt;':'\\u29c0',\n'Omacr;':'\\u014c',\n'omacr;':'\\u014d',\n'Omega;':'\\u03a9',\n'omega;':'\\u03c9',\n'Omicron;':'\\u039f',\n'omicron;':'\\u03bf',\n'omid;':'\\u29b6',\n'ominus;':'\\u2296',\n'Oopf;':'\\U0001d546',\n'oopf;':'\\U0001d560',\n'opar;':'\\u29b7',\n'OpenCurlyDoubleQuote;':'\\u201c',\n'OpenCurlyQuote;':'\\u2018',\n'operp;':'\\u29b9',\n'oplus;':'\\u2295',\n'Or;':'\\u2a54',\n'or;':'\\u2228',\n'orarr;':'\\u21bb',\n'ord;':'\\u2a5d',\n'order;':'\\u2134',\n'orderof;':'\\u2134',\n'ordf':'\\xaa',\n'ordf;':'\\xaa',\n'ordm':'\\xba',\n'ordm;':'\\xba',\n'origof;':'\\u22b6',\n'oror;':'\\u2a56',\n'orslope;':'\\u2a57',\n'orv;':'\\u2a5b',\n'oS;':'\\u24c8',\n'Oscr;':'\\U0001d4aa',\n'oscr;':'\\u2134',\n'Oslash':'\\xd8',\n'oslash':'\\xf8',\n'Oslash;':'\\xd8',\n'oslash;':'\\xf8',\n'osol;':'\\u2298',\n'Otilde':'\\xd5',\n'otilde':'\\xf5',\n'Otilde;':'\\xd5',\n'otilde;':'\\xf5',\n'Otimes;':'\\u2a37',\n'otimes;':'\\u2297',\n'otimesas;':'\\u2a36',\n'Ouml':'\\xd6',\n'ouml':'\\xf6',\n'Ouml;':'\\xd6',\n'ouml;':'\\xf6',\n'ovbar;':'\\u233d',\n'OverBar;':'\\u203e',\n'OverBrace;':'\\u23de',\n'OverBracket;':'\\u23b4',\n'OverParenthesis;':'\\u23dc',\n'par;':'\\u2225',\n'para':'\\xb6',\n'para;':'\\xb6',\n'parallel;':'\\u2225',\n'parsim;':'\\u2af3',\n'parsl;':'\\u2afd',\n'part;':'\\u2202',\n'PartialD;':'\\u2202',\n'Pcy;':'\\u041f',\n'pcy;':'\\u043f',\n'percnt;':'%',\n'period;':'.',\n'permil;':'\\u2030',\n'perp;':'\\u22a5',\n'pertenk;':'\\u2031',\n'Pfr;':'\\U0001d513',\n'pfr;':'\\U0001d52d',\n'Phi;':'\\u03a6',\n'phi;':'\\u03c6',\n'phiv;':'\\u03d5',\n'phmmat;':'\\u2133',\n'phone;':'\\u260e',\n'Pi;':'\\u03a0',\n'pi;':'\\u03c0',\n'pitchfork;':'\\u22d4',\n'piv;':'\\u03d6',\n'planck;':'\\u210f',\n'planckh;':'\\u210e',\n'plankv;':'\\u210f',\n'plus;':'+',\n'plusacir;':'\\u2a23',\n'plusb;':'\\u229e',\n'pluscir;':'\\u2a22',\n'plusdo;':'\\u2214',\n'plusdu;':'\\u2a25',\n'pluse;':'\\u2a72',\n'PlusMinus;':'\\xb1',\n'plusmn':'\\xb1',\n'plusmn;':'\\xb1',\n'plussim;':'\\u2a26',\n'plustwo;':'\\u2a27',\n'pm;':'\\xb1',\n'Poincareplane;':'\\u210c',\n'pointint;':'\\u2a15',\n'Popf;':'\\u2119',\n'popf;':'\\U0001d561',\n'pound':'\\xa3',\n'pound;':'\\xa3',\n'Pr;':'\\u2abb',\n'pr;':'\\u227a',\n'prap;':'\\u2ab7',\n'prcue;':'\\u227c',\n'prE;':'\\u2ab3',\n'pre;':'\\u2aaf',\n'prec;':'\\u227a',\n'precapprox;':'\\u2ab7',\n'preccurlyeq;':'\\u227c',\n'Precedes;':'\\u227a',\n'PrecedesEqual;':'\\u2aaf',\n'PrecedesSlantEqual;':'\\u227c',\n'PrecedesTilde;':'\\u227e',\n'preceq;':'\\u2aaf',\n'precnapprox;':'\\u2ab9',\n'precneqq;':'\\u2ab5',\n'precnsim;':'\\u22e8',\n'precsim;':'\\u227e',\n'Prime;':'\\u2033',\n'prime;':'\\u2032',\n'primes;':'\\u2119',\n'prnap;':'\\u2ab9',\n'prnE;':'\\u2ab5',\n'prnsim;':'\\u22e8',\n'prod;':'\\u220f',\n'Product;':'\\u220f',\n'profalar;':'\\u232e',\n'profline;':'\\u2312',\n'profsurf;':'\\u2313',\n'prop;':'\\u221d',\n'Proportion;':'\\u2237',\n'Proportional;':'\\u221d',\n'propto;':'\\u221d',\n'prsim;':'\\u227e',\n'prurel;':'\\u22b0',\n'Pscr;':'\\U0001d4ab',\n'pscr;':'\\U0001d4c5',\n'Psi;':'\\u03a8',\n'psi;':'\\u03c8',\n'puncsp;':'\\u2008',\n'Qfr;':'\\U0001d514',\n'qfr;':'\\U0001d52e',\n'qint;':'\\u2a0c',\n'Qopf;':'\\u211a',\n'qopf;':'\\U0001d562',\n'qprime;':'\\u2057',\n'Qscr;':'\\U0001d4ac',\n'qscr;':'\\U0001d4c6',\n'quaternions;':'\\u210d',\n'quatint;':'\\u2a16',\n'quest;':'?',\n'questeq;':'\\u225f',\n'QUOT':'\"',\n'quot':'\"',\n'QUOT;':'\"',\n'quot;':'\"',\n'rAarr;':'\\u21db',\n'race;':'\\u223d\\u0331',\n'Racute;':'\\u0154',\n'racute;':'\\u0155',\n'radic;':'\\u221a',\n'raemptyv;':'\\u29b3',\n'Rang;':'\\u27eb',\n'rang;':'\\u27e9',\n'rangd;':'\\u2992',\n'range;':'\\u29a5',\n'rangle;':'\\u27e9',\n'raquo':'\\xbb',\n'raquo;':'\\xbb',\n'Rarr;':'\\u21a0',\n'rArr;':'\\u21d2',\n'rarr;':'\\u2192',\n'rarrap;':'\\u2975',\n'rarrb;':'\\u21e5',\n'rarrbfs;':'\\u2920',\n'rarrc;':'\\u2933',\n'rarrfs;':'\\u291e',\n'rarrhk;':'\\u21aa',\n'rarrlp;':'\\u21ac',\n'rarrpl;':'\\u2945',\n'rarrsim;':'\\u2974',\n'Rarrtl;':'\\u2916',\n'rarrtl;':'\\u21a3',\n'rarrw;':'\\u219d',\n'rAtail;':'\\u291c',\n'ratail;':'\\u291a',\n'ratio;':'\\u2236',\n'rationals;':'\\u211a',\n'RBarr;':'\\u2910',\n'rBarr;':'\\u290f',\n'rbarr;':'\\u290d',\n'rbbrk;':'\\u2773',\n'rbrace;':'}',\n'rbrack;':']',\n'rbrke;':'\\u298c',\n'rbrksld;':'\\u298e',\n'rbrkslu;':'\\u2990',\n'Rcaron;':'\\u0158',\n'rcaron;':'\\u0159',\n'Rcedil;':'\\u0156',\n'rcedil;':'\\u0157',\n'rceil;':'\\u2309',\n'rcub;':'}',\n'Rcy;':'\\u0420',\n'rcy;':'\\u0440',\n'rdca;':'\\u2937',\n'rdldhar;':'\\u2969',\n'rdquo;':'\\u201d',\n'rdquor;':'\\u201d',\n'rdsh;':'\\u21b3',\n'Re;':'\\u211c',\n'real;':'\\u211c',\n'realine;':'\\u211b',\n'realpart;':'\\u211c',\n'reals;':'\\u211d',\n'rect;':'\\u25ad',\n'REG':'\\xae',\n'reg':'\\xae',\n'REG;':'\\xae',\n'reg;':'\\xae',\n'ReverseElement;':'\\u220b',\n'ReverseEquilibrium;':'\\u21cb',\n'ReverseUpEquilibrium;':'\\u296f',\n'rfisht;':'\\u297d',\n'rfloor;':'\\u230b',\n'Rfr;':'\\u211c',\n'rfr;':'\\U0001d52f',\n'rHar;':'\\u2964',\n'rhard;':'\\u21c1',\n'rharu;':'\\u21c0',\n'rharul;':'\\u296c',\n'Rho;':'\\u03a1',\n'rho;':'\\u03c1',\n'rhov;':'\\u03f1',\n'RightAngleBracket;':'\\u27e9',\n'RightArrow;':'\\u2192',\n'Rightarrow;':'\\u21d2',\n'rightarrow;':'\\u2192',\n'RightArrowBar;':'\\u21e5',\n'RightArrowLeftArrow;':'\\u21c4',\n'rightarrowtail;':'\\u21a3',\n'RightCeiling;':'\\u2309',\n'RightDoubleBracket;':'\\u27e7',\n'RightDownTeeVector;':'\\u295d',\n'RightDownVector;':'\\u21c2',\n'RightDownVectorBar;':'\\u2955',\n'RightFloor;':'\\u230b',\n'rightharpoondown;':'\\u21c1',\n'rightharpoonup;':'\\u21c0',\n'rightleftarrows;':'\\u21c4',\n'rightleftharpoons;':'\\u21cc',\n'rightrightarrows;':'\\u21c9',\n'rightsquigarrow;':'\\u219d',\n'RightTee;':'\\u22a2',\n'RightTeeArrow;':'\\u21a6',\n'RightTeeVector;':'\\u295b',\n'rightthreetimes;':'\\u22cc',\n'RightTriangle;':'\\u22b3',\n'RightTriangleBar;':'\\u29d0',\n'RightTriangleEqual;':'\\u22b5',\n'RightUpDownVector;':'\\u294f',\n'RightUpTeeVector;':'\\u295c',\n'RightUpVector;':'\\u21be',\n'RightUpVectorBar;':'\\u2954',\n'RightVector;':'\\u21c0',\n'RightVectorBar;':'\\u2953',\n'ring;':'\\u02da',\n'risingdotseq;':'\\u2253',\n'rlarr;':'\\u21c4',\n'rlhar;':'\\u21cc',\n'rlm;':'\\u200f',\n'rmoust;':'\\u23b1',\n'rmoustache;':'\\u23b1',\n'rnmid;':'\\u2aee',\n'roang;':'\\u27ed',\n'roarr;':'\\u21fe',\n'robrk;':'\\u27e7',\n'ropar;':'\\u2986',\n'Ropf;':'\\u211d',\n'ropf;':'\\U0001d563',\n'roplus;':'\\u2a2e',\n'rotimes;':'\\u2a35',\n'RoundImplies;':'\\u2970',\n'rpar;':')',\n'rpargt;':'\\u2994',\n'rppolint;':'\\u2a12',\n'rrarr;':'\\u21c9',\n'Rrightarrow;':'\\u21db',\n'rsaquo;':'\\u203a',\n'Rscr;':'\\u211b',\n'rscr;':'\\U0001d4c7',\n'Rsh;':'\\u21b1',\n'rsh;':'\\u21b1',\n'rsqb;':']',\n'rsquo;':'\\u2019',\n'rsquor;':'\\u2019',\n'rthree;':'\\u22cc',\n'rtimes;':'\\u22ca',\n'rtri;':'\\u25b9',\n'rtrie;':'\\u22b5',\n'rtrif;':'\\u25b8',\n'rtriltri;':'\\u29ce',\n'RuleDelayed;':'\\u29f4',\n'ruluhar;':'\\u2968',\n'rx;':'\\u211e',\n'Sacute;':'\\u015a',\n'sacute;':'\\u015b',\n'sbquo;':'\\u201a',\n'Sc;':'\\u2abc',\n'sc;':'\\u227b',\n'scap;':'\\u2ab8',\n'Scaron;':'\\u0160',\n'scaron;':'\\u0161',\n'sccue;':'\\u227d',\n'scE;':'\\u2ab4',\n'sce;':'\\u2ab0',\n'Scedil;':'\\u015e',\n'scedil;':'\\u015f',\n'Scirc;':'\\u015c',\n'scirc;':'\\u015d',\n'scnap;':'\\u2aba',\n'scnE;':'\\u2ab6',\n'scnsim;':'\\u22e9',\n'scpolint;':'\\u2a13',\n'scsim;':'\\u227f',\n'Scy;':'\\u0421',\n'scy;':'\\u0441',\n'sdot;':'\\u22c5',\n'sdotb;':'\\u22a1',\n'sdote;':'\\u2a66',\n'searhk;':'\\u2925',\n'seArr;':'\\u21d8',\n'searr;':'\\u2198',\n'searrow;':'\\u2198',\n'sect':'\\xa7',\n'sect;':'\\xa7',\n'semi;':';',\n'seswar;':'\\u2929',\n'setminus;':'\\u2216',\n'setmn;':'\\u2216',\n'sext;':'\\u2736',\n'Sfr;':'\\U0001d516',\n'sfr;':'\\U0001d530',\n'sfrown;':'\\u2322',\n'sharp;':'\\u266f',\n'SHCHcy;':'\\u0429',\n'shchcy;':'\\u0449',\n'SHcy;':'\\u0428',\n'shcy;':'\\u0448',\n'ShortDownArrow;':'\\u2193',\n'ShortLeftArrow;':'\\u2190',\n'shortmid;':'\\u2223',\n'shortparallel;':'\\u2225',\n'ShortRightArrow;':'\\u2192',\n'ShortUpArrow;':'\\u2191',\n'shy':'\\xad',\n'shy;':'\\xad',\n'Sigma;':'\\u03a3',\n'sigma;':'\\u03c3',\n'sigmaf;':'\\u03c2',\n'sigmav;':'\\u03c2',\n'sim;':'\\u223c',\n'simdot;':'\\u2a6a',\n'sime;':'\\u2243',\n'simeq;':'\\u2243',\n'simg;':'\\u2a9e',\n'simgE;':'\\u2aa0',\n'siml;':'\\u2a9d',\n'simlE;':'\\u2a9f',\n'simne;':'\\u2246',\n'simplus;':'\\u2a24',\n'simrarr;':'\\u2972',\n'slarr;':'\\u2190',\n'SmallCircle;':'\\u2218',\n'smallsetminus;':'\\u2216',\n'smashp;':'\\u2a33',\n'smeparsl;':'\\u29e4',\n'smid;':'\\u2223',\n'smile;':'\\u2323',\n'smt;':'\\u2aaa',\n'smte;':'\\u2aac',\n'smtes;':'\\u2aac\\ufe00',\n'SOFTcy;':'\\u042c',\n'softcy;':'\\u044c',\n'sol;':'/',\n'solb;':'\\u29c4',\n'solbar;':'\\u233f',\n'Sopf;':'\\U0001d54a',\n'sopf;':'\\U0001d564',\n'spades;':'\\u2660',\n'spadesuit;':'\\u2660',\n'spar;':'\\u2225',\n'sqcap;':'\\u2293',\n'sqcaps;':'\\u2293\\ufe00',\n'sqcup;':'\\u2294',\n'sqcups;':'\\u2294\\ufe00',\n'Sqrt;':'\\u221a',\n'sqsub;':'\\u228f',\n'sqsube;':'\\u2291',\n'sqsubset;':'\\u228f',\n'sqsubseteq;':'\\u2291',\n'sqsup;':'\\u2290',\n'sqsupe;':'\\u2292',\n'sqsupset;':'\\u2290',\n'sqsupseteq;':'\\u2292',\n'squ;':'\\u25a1',\n'Square;':'\\u25a1',\n'square;':'\\u25a1',\n'SquareIntersection;':'\\u2293',\n'SquareSubset;':'\\u228f',\n'SquareSubsetEqual;':'\\u2291',\n'SquareSuperset;':'\\u2290',\n'SquareSupersetEqual;':'\\u2292',\n'SquareUnion;':'\\u2294',\n'squarf;':'\\u25aa',\n'squf;':'\\u25aa',\n'srarr;':'\\u2192',\n'Sscr;':'\\U0001d4ae',\n'sscr;':'\\U0001d4c8',\n'ssetmn;':'\\u2216',\n'ssmile;':'\\u2323',\n'sstarf;':'\\u22c6',\n'Star;':'\\u22c6',\n'star;':'\\u2606',\n'starf;':'\\u2605',\n'straightepsilon;':'\\u03f5',\n'straightphi;':'\\u03d5',\n'strns;':'\\xaf',\n'Sub;':'\\u22d0',\n'sub;':'\\u2282',\n'subdot;':'\\u2abd',\n'subE;':'\\u2ac5',\n'sube;':'\\u2286',\n'subedot;':'\\u2ac3',\n'submult;':'\\u2ac1',\n'subnE;':'\\u2acb',\n'subne;':'\\u228a',\n'subplus;':'\\u2abf',\n'subrarr;':'\\u2979',\n'Subset;':'\\u22d0',\n'subset;':'\\u2282',\n'subseteq;':'\\u2286',\n'subseteqq;':'\\u2ac5',\n'SubsetEqual;':'\\u2286',\n'subsetneq;':'\\u228a',\n'subsetneqq;':'\\u2acb',\n'subsim;':'\\u2ac7',\n'subsub;':'\\u2ad5',\n'subsup;':'\\u2ad3',\n'succ;':'\\u227b',\n'succapprox;':'\\u2ab8',\n'succcurlyeq;':'\\u227d',\n'Succeeds;':'\\u227b',\n'SucceedsEqual;':'\\u2ab0',\n'SucceedsSlantEqual;':'\\u227d',\n'SucceedsTilde;':'\\u227f',\n'succeq;':'\\u2ab0',\n'succnapprox;':'\\u2aba',\n'succneqq;':'\\u2ab6',\n'succnsim;':'\\u22e9',\n'succsim;':'\\u227f',\n'SuchThat;':'\\u220b',\n'Sum;':'\\u2211',\n'sum;':'\\u2211',\n'sung;':'\\u266a',\n'sup1':'\\xb9',\n'sup1;':'\\xb9',\n'sup2':'\\xb2',\n'sup2;':'\\xb2',\n'sup3':'\\xb3',\n'sup3;':'\\xb3',\n'Sup;':'\\u22d1',\n'sup;':'\\u2283',\n'supdot;':'\\u2abe',\n'supdsub;':'\\u2ad8',\n'supE;':'\\u2ac6',\n'supe;':'\\u2287',\n'supedot;':'\\u2ac4',\n'Superset;':'\\u2283',\n'SupersetEqual;':'\\u2287',\n'suphsol;':'\\u27c9',\n'suphsub;':'\\u2ad7',\n'suplarr;':'\\u297b',\n'supmult;':'\\u2ac2',\n'supnE;':'\\u2acc',\n'supne;':'\\u228b',\n'supplus;':'\\u2ac0',\n'Supset;':'\\u22d1',\n'supset;':'\\u2283',\n'supseteq;':'\\u2287',\n'supseteqq;':'\\u2ac6',\n'supsetneq;':'\\u228b',\n'supsetneqq;':'\\u2acc',\n'supsim;':'\\u2ac8',\n'supsub;':'\\u2ad4',\n'supsup;':'\\u2ad6',\n'swarhk;':'\\u2926',\n'swArr;':'\\u21d9',\n'swarr;':'\\u2199',\n'swarrow;':'\\u2199',\n'swnwar;':'\\u292a',\n'szlig':'\\xdf',\n'szlig;':'\\xdf',\n'Tab;':'\\t',\n'target;':'\\u2316',\n'Tau;':'\\u03a4',\n'tau;':'\\u03c4',\n'tbrk;':'\\u23b4',\n'Tcaron;':'\\u0164',\n'tcaron;':'\\u0165',\n'Tcedil;':'\\u0162',\n'tcedil;':'\\u0163',\n'Tcy;':'\\u0422',\n'tcy;':'\\u0442',\n'tdot;':'\\u20db',\n'telrec;':'\\u2315',\n'Tfr;':'\\U0001d517',\n'tfr;':'\\U0001d531',\n'there4;':'\\u2234',\n'Therefore;':'\\u2234',\n'therefore;':'\\u2234',\n'Theta;':'\\u0398',\n'theta;':'\\u03b8',\n'thetasym;':'\\u03d1',\n'thetav;':'\\u03d1',\n'thickapprox;':'\\u2248',\n'thicksim;':'\\u223c',\n'ThickSpace;':'\\u205f\\u200a',\n'thinsp;':'\\u2009',\n'ThinSpace;':'\\u2009',\n'thkap;':'\\u2248',\n'thksim;':'\\u223c',\n'THORN':'\\xde',\n'thorn':'\\xfe',\n'THORN;':'\\xde',\n'thorn;':'\\xfe',\n'Tilde;':'\\u223c',\n'tilde;':'\\u02dc',\n'TildeEqual;':'\\u2243',\n'TildeFullEqual;':'\\u2245',\n'TildeTilde;':'\\u2248',\n'times':'\\xd7',\n'times;':'\\xd7',\n'timesb;':'\\u22a0',\n'timesbar;':'\\u2a31',\n'timesd;':'\\u2a30',\n'tint;':'\\u222d',\n'toea;':'\\u2928',\n'top;':'\\u22a4',\n'topbot;':'\\u2336',\n'topcir;':'\\u2af1',\n'Topf;':'\\U0001d54b',\n'topf;':'\\U0001d565',\n'topfork;':'\\u2ada',\n'tosa;':'\\u2929',\n'tprime;':'\\u2034',\n'TRADE;':'\\u2122',\n'trade;':'\\u2122',\n'triangle;':'\\u25b5',\n'triangledown;':'\\u25bf',\n'triangleleft;':'\\u25c3',\n'trianglelefteq;':'\\u22b4',\n'triangleq;':'\\u225c',\n'triangleright;':'\\u25b9',\n'trianglerighteq;':'\\u22b5',\n'tridot;':'\\u25ec',\n'trie;':'\\u225c',\n'triminus;':'\\u2a3a',\n'TripleDot;':'\\u20db',\n'triplus;':'\\u2a39',\n'trisb;':'\\u29cd',\n'tritime;':'\\u2a3b',\n'trpezium;':'\\u23e2',\n'Tscr;':'\\U0001d4af',\n'tscr;':'\\U0001d4c9',\n'TScy;':'\\u0426',\n'tscy;':'\\u0446',\n'TSHcy;':'\\u040b',\n'tshcy;':'\\u045b',\n'Tstrok;':'\\u0166',\n'tstrok;':'\\u0167',\n'twixt;':'\\u226c',\n'twoheadleftarrow;':'\\u219e',\n'twoheadrightarrow;':'\\u21a0',\n'Uacute':'\\xda',\n'uacute':'\\xfa',\n'Uacute;':'\\xda',\n'uacute;':'\\xfa',\n'Uarr;':'\\u219f',\n'uArr;':'\\u21d1',\n'uarr;':'\\u2191',\n'Uarrocir;':'\\u2949',\n'Ubrcy;':'\\u040e',\n'ubrcy;':'\\u045e',\n'Ubreve;':'\\u016c',\n'ubreve;':'\\u016d',\n'Ucirc':'\\xdb',\n'ucirc':'\\xfb',\n'Ucirc;':'\\xdb',\n'ucirc;':'\\xfb',\n'Ucy;':'\\u0423',\n'ucy;':'\\u0443',\n'udarr;':'\\u21c5',\n'Udblac;':'\\u0170',\n'udblac;':'\\u0171',\n'udhar;':'\\u296e',\n'ufisht;':'\\u297e',\n'Ufr;':'\\U0001d518',\n'ufr;':'\\U0001d532',\n'Ugrave':'\\xd9',\n'ugrave':'\\xf9',\n'Ugrave;':'\\xd9',\n'ugrave;':'\\xf9',\n'uHar;':'\\u2963',\n'uharl;':'\\u21bf',\n'uharr;':'\\u21be',\n'uhblk;':'\\u2580',\n'ulcorn;':'\\u231c',\n'ulcorner;':'\\u231c',\n'ulcrop;':'\\u230f',\n'ultri;':'\\u25f8',\n'Umacr;':'\\u016a',\n'umacr;':'\\u016b',\n'uml':'\\xa8',\n'uml;':'\\xa8',\n'UnderBar;':'_',\n'UnderBrace;':'\\u23df',\n'UnderBracket;':'\\u23b5',\n'UnderParenthesis;':'\\u23dd',\n'Union;':'\\u22c3',\n'UnionPlus;':'\\u228e',\n'Uogon;':'\\u0172',\n'uogon;':'\\u0173',\n'Uopf;':'\\U0001d54c',\n'uopf;':'\\U0001d566',\n'UpArrow;':'\\u2191',\n'Uparrow;':'\\u21d1',\n'uparrow;':'\\u2191',\n'UpArrowBar;':'\\u2912',\n'UpArrowDownArrow;':'\\u21c5',\n'UpDownArrow;':'\\u2195',\n'Updownarrow;':'\\u21d5',\n'updownarrow;':'\\u2195',\n'UpEquilibrium;':'\\u296e',\n'upharpoonleft;':'\\u21bf',\n'upharpoonright;':'\\u21be',\n'uplus;':'\\u228e',\n'UpperLeftArrow;':'\\u2196',\n'UpperRightArrow;':'\\u2197',\n'Upsi;':'\\u03d2',\n'upsi;':'\\u03c5',\n'upsih;':'\\u03d2',\n'Upsilon;':'\\u03a5',\n'upsilon;':'\\u03c5',\n'UpTee;':'\\u22a5',\n'UpTeeArrow;':'\\u21a5',\n'upuparrows;':'\\u21c8',\n'urcorn;':'\\u231d',\n'urcorner;':'\\u231d',\n'urcrop;':'\\u230e',\n'Uring;':'\\u016e',\n'uring;':'\\u016f',\n'urtri;':'\\u25f9',\n'Uscr;':'\\U0001d4b0',\n'uscr;':'\\U0001d4ca',\n'utdot;':'\\u22f0',\n'Utilde;':'\\u0168',\n'utilde;':'\\u0169',\n'utri;':'\\u25b5',\n'utrif;':'\\u25b4',\n'uuarr;':'\\u21c8',\n'Uuml':'\\xdc',\n'uuml':'\\xfc',\n'Uuml;':'\\xdc',\n'uuml;':'\\xfc',\n'uwangle;':'\\u29a7',\n'vangrt;':'\\u299c',\n'varepsilon;':'\\u03f5',\n'varkappa;':'\\u03f0',\n'varnothing;':'\\u2205',\n'varphi;':'\\u03d5',\n'varpi;':'\\u03d6',\n'varpropto;':'\\u221d',\n'vArr;':'\\u21d5',\n'varr;':'\\u2195',\n'varrho;':'\\u03f1',\n'varsigma;':'\\u03c2',\n'varsubsetneq;':'\\u228a\\ufe00',\n'varsubsetneqq;':'\\u2acb\\ufe00',\n'varsupsetneq;':'\\u228b\\ufe00',\n'varsupsetneqq;':'\\u2acc\\ufe00',\n'vartheta;':'\\u03d1',\n'vartriangleleft;':'\\u22b2',\n'vartriangleright;':'\\u22b3',\n'Vbar;':'\\u2aeb',\n'vBar;':'\\u2ae8',\n'vBarv;':'\\u2ae9',\n'Vcy;':'\\u0412',\n'vcy;':'\\u0432',\n'VDash;':'\\u22ab',\n'Vdash;':'\\u22a9',\n'vDash;':'\\u22a8',\n'vdash;':'\\u22a2',\n'Vdashl;':'\\u2ae6',\n'Vee;':'\\u22c1',\n'vee;':'\\u2228',\n'veebar;':'\\u22bb',\n'veeeq;':'\\u225a',\n'vellip;':'\\u22ee',\n'Verbar;':'\\u2016',\n'verbar;':'|',\n'Vert;':'\\u2016',\n'vert;':'|',\n'VerticalBar;':'\\u2223',\n'VerticalLine;':'|',\n'VerticalSeparator;':'\\u2758',\n'VerticalTilde;':'\\u2240',\n'VeryThinSpace;':'\\u200a',\n'Vfr;':'\\U0001d519',\n'vfr;':'\\U0001d533',\n'vltri;':'\\u22b2',\n'vnsub;':'\\u2282\\u20d2',\n'vnsup;':'\\u2283\\u20d2',\n'Vopf;':'\\U0001d54d',\n'vopf;':'\\U0001d567',\n'vprop;':'\\u221d',\n'vrtri;':'\\u22b3',\n'Vscr;':'\\U0001d4b1',\n'vscr;':'\\U0001d4cb',\n'vsubnE;':'\\u2acb\\ufe00',\n'vsubne;':'\\u228a\\ufe00',\n'vsupnE;':'\\u2acc\\ufe00',\n'vsupne;':'\\u228b\\ufe00',\n'Vvdash;':'\\u22aa',\n'vzigzag;':'\\u299a',\n'Wcirc;':'\\u0174',\n'wcirc;':'\\u0175',\n'wedbar;':'\\u2a5f',\n'Wedge;':'\\u22c0',\n'wedge;':'\\u2227',\n'wedgeq;':'\\u2259',\n'weierp;':'\\u2118',\n'Wfr;':'\\U0001d51a',\n'wfr;':'\\U0001d534',\n'Wopf;':'\\U0001d54e',\n'wopf;':'\\U0001d568',\n'wp;':'\\u2118',\n'wr;':'\\u2240',\n'wreath;':'\\u2240',\n'Wscr;':'\\U0001d4b2',\n'wscr;':'\\U0001d4cc',\n'xcap;':'\\u22c2',\n'xcirc;':'\\u25ef',\n'xcup;':'\\u22c3',\n'xdtri;':'\\u25bd',\n'Xfr;':'\\U0001d51b',\n'xfr;':'\\U0001d535',\n'xhArr;':'\\u27fa',\n'xharr;':'\\u27f7',\n'Xi;':'\\u039e',\n'xi;':'\\u03be',\n'xlArr;':'\\u27f8',\n'xlarr;':'\\u27f5',\n'xmap;':'\\u27fc',\n'xnis;':'\\u22fb',\n'xodot;':'\\u2a00',\n'Xopf;':'\\U0001d54f',\n'xopf;':'\\U0001d569',\n'xoplus;':'\\u2a01',\n'xotime;':'\\u2a02',\n'xrArr;':'\\u27f9',\n'xrarr;':'\\u27f6',\n'Xscr;':'\\U0001d4b3',\n'xscr;':'\\U0001d4cd',\n'xsqcup;':'\\u2a06',\n'xuplus;':'\\u2a04',\n'xutri;':'\\u25b3',\n'xvee;':'\\u22c1',\n'xwedge;':'\\u22c0',\n'Yacute':'\\xdd',\n'yacute':'\\xfd',\n'Yacute;':'\\xdd',\n'yacute;':'\\xfd',\n'YAcy;':'\\u042f',\n'yacy;':'\\u044f',\n'Ycirc;':'\\u0176',\n'ycirc;':'\\u0177',\n'Ycy;':'\\u042b',\n'ycy;':'\\u044b',\n'yen':'\\xa5',\n'yen;':'\\xa5',\n'Yfr;':'\\U0001d51c',\n'yfr;':'\\U0001d536',\n'YIcy;':'\\u0407',\n'yicy;':'\\u0457',\n'Yopf;':'\\U0001d550',\n'yopf;':'\\U0001d56a',\n'Yscr;':'\\U0001d4b4',\n'yscr;':'\\U0001d4ce',\n'YUcy;':'\\u042e',\n'yucy;':'\\u044e',\n'yuml':'\\xff',\n'Yuml;':'\\u0178',\n'yuml;':'\\xff',\n'Zacute;':'\\u0179',\n'zacute;':'\\u017a',\n'Zcaron;':'\\u017d',\n'zcaron;':'\\u017e',\n'Zcy;':'\\u0417',\n'zcy;':'\\u0437',\n'Zdot;':'\\u017b',\n'zdot;':'\\u017c',\n'zeetrf;':'\\u2128',\n'ZeroWidthSpace;':'\\u200b',\n'Zeta;':'\\u0396',\n'zeta;':'\\u03b6',\n'Zfr;':'\\u2128',\n'zfr;':'\\U0001d537',\n'ZHcy;':'\\u0416',\n'zhcy;':'\\u0436',\n'zigrarr;':'\\u21dd',\n'Zopf;':'\\u2124',\n'zopf;':'\\U0001d56b',\n'Zscr;':'\\U0001d4b5',\n'zscr;':'\\U0001d4cf',\n'zwj;':'\\u200d',\n'zwnj;':'\\u200c',\n}\n\n\ncodepoint2name={}\n\n\n\nentitydefs={}\n\nfor (name,codepoint)in name2codepoint.items():\n codepoint2name[codepoint]=name\n entitydefs[name]=chr(codepoint)\n \ndel name,codepoint\n"], "browser.local_storage": [".py", "\nimport sys\nfrom javascript import JSObject\nfrom browser import window,console\n\nhas_local_storage=hasattr(window,'localStorage')\n\nclass __UnProvided():\n pass\n \nclass LocalStorage():\n storage_type=\"local_storage\"\n \n def __init__(self):\n  if not has_local_storage:\n   raise EnvironmentError(\"LocalStorage not available\")\n  self.store=JSObject(window.localStorage)\n  \n def __delitem__(self,key):\n  if (not isinstance(key,str)):\n   raise TypeError(\"key must be string\")\n  if key not in self:\n   raise KeyError(key)\n  self.store.removeItem(key)\n  \n def __getitem__(self,key):\n  if (not isinstance(key,str)):\n   raise TypeError(\"key must be string\")\n  res=__BRYTHON__.JSObject(self.store.getItem(key))\n  if res is not None :\n   return res\n  raise KeyError(key)\n  \n def __setitem__(self,key,value):\n  if (not isinstance(key,str)):\n   raise TypeError(\"key must be string\")\n  if (not isinstance(value,str)):\n   raise TypeError(\"value must be string\")\n  self.store.setItem(key,value)\n  \n  \n def __contains__(self,key):\n  if (not isinstance(key,str)):\n   raise TypeError(\"key must be string\")\n  res=__BRYTHON__.JSObject(self.store.getItem(key))\n  if res is None :\n   return False\n  return True\n  \n def __iter__(self):\n  keys=self.keys()\n  return keys.__iter__()\n  \n def get(self,key,default=None ):\n  if (not isinstance(key,str)):\n   raise TypeError(\"key must be string\")\n  return __BRYTHON__.JSObject(self.store.getItem(key))or default\n  \n def pop(self,key,default=__UnProvided()):\n  if (not isinstance(key,str)):\n   raise TypeError(\"key must be string\")\n  if type(default)is __UnProvided:\n   ret=self.get(key)\n   del self[key]\n   return ret\n  else :\n   if key in self:\n    ret=self.get(key)\n    del self[key]\n    return ret\n   else :\n    return default\n    \n    \n    \n def keys(self):\n  return [__BRYTHON__.JSObject(self.store.key(i))for i in range(self.store.length)]\n  \n def values(self):\n  return [__BRYTHON__.JSObject(self.__getitem__(k))for k in self.keys()]\n  \n def items(self):\n  return list(zip(self.keys(),self.values()))\n  \n def clear(self):\n  self.store.clear()\n  \n def __len__(self):\n  return self.store.length\n  \nif has_local_storage:\n storage=LocalStorage()\n"], "gc": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDEBUG_COLLECTABLE=2\n\nDEBUG_LEAK=38\n\nDEBUG_SAVEALL=32\n\nDEBUG_STATS=1\n\nDEBUG_UNCOLLECTABLE=4\n\nclass __loader__:\n pass\n \ncallbacks=[]\n\ndef collect(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef disable(*args,**kw):\n ''\n\n \n pass\n \ndef enable(*args,**kw):\n ''\n\n \n pass\n \ngarbage=[]\n\ndef get_count(*args,**kw):\n ''\n\n \n pass\n \ndef get_debug(*args,**kw):\n ''\n\n \n pass\n \ndef get_objects(*args,**kw):\n ''\n\n\n \n pass\n \ndef get_referents(*args,**kw):\n ''\n pass\n \ndef get_referrers(*args,**kw):\n ''\n pass\n \ndef get_threshold(*args,**kw):\n ''\n\n \n pass\n \ndef is_tracked(*args,**kw):\n ''\n\n\n \n pass\n \ndef isenabled(*args,**kw):\n ''\n\n \n pass\n \ndef set_debug(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef set_threshold(*args,**kw):\n ''\n\n\n \n pass\n"], "encodings.cp864": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp864',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0025:0x066a,\n0x0080:0x00b0,\n0x0081:0x00b7,\n0x0082:0x2219,\n0x0083:0x221a,\n0x0084:0x2592,\n0x0085:0x2500,\n0x0086:0x2502,\n0x0087:0x253c,\n0x0088:0x2524,\n0x0089:0x252c,\n0x008a:0x251c,\n0x008b:0x2534,\n0x008c:0x2510,\n0x008d:0x250c,\n0x008e:0x2514,\n0x008f:0x2518,\n0x0090:0x03b2,\n0x0091:0x221e,\n0x0092:0x03c6,\n0x0093:0x00b1,\n0x0094:0x00bd,\n0x0095:0x00bc,\n0x0096:0x2248,\n0x0097:0x00ab,\n0x0098:0x00bb,\n0x0099:0xfef7,\n0x009a:0xfef8,\n0x009b:None ,\n0x009c:None ,\n0x009d:0xfefb,\n0x009e:0xfefc,\n0x009f:None ,\n0x00a1:0x00ad,\n0x00a2:0xfe82,\n0x00a5:0xfe84,\n0x00a6:None ,\n0x00a7:None ,\n0x00a8:0xfe8e,\n0x00a9:0xfe8f,\n0x00aa:0xfe95,\n0x00ab:0xfe99,\n0x00ac:0x060c,\n0x00ad:0xfe9d,\n0x00ae:0xfea1,\n0x00af:0xfea5,\n0x00b0:0x0660,\n0x00b1:0x0661,\n0x00b2:0x0662,\n0x00b3:0x0663,\n0x00b4:0x0664,\n0x00b5:0x0665,\n0x00b6:0x0666,\n0x00b7:0x0667,\n0x00b8:0x0668,\n0x00b9:0x0669,\n0x00ba:0xfed1,\n0x00bb:0x061b,\n0x00bc:0xfeb1,\n0x00bd:0xfeb5,\n0x00be:0xfeb9,\n0x00bf:0x061f,\n0x00c0:0x00a2,\n0x00c1:0xfe80,\n0x00c2:0xfe81,\n0x00c3:0xfe83,\n0x00c4:0xfe85,\n0x00c5:0xfeca,\n0x00c6:0xfe8b,\n0x00c7:0xfe8d,\n0x00c8:0xfe91,\n0x00c9:0xfe93,\n0x00ca:0xfe97,\n0x00cb:0xfe9b,\n0x00cc:0xfe9f,\n0x00cd:0xfea3,\n0x00ce:0xfea7,\n0x00cf:0xfea9,\n0x00d0:0xfeab,\n0x00d1:0xfead,\n0x00d2:0xfeaf,\n0x00d3:0xfeb3,\n0x00d4:0xfeb7,\n0x00d5:0xfebb,\n0x00d6:0xfebf,\n0x00d7:0xfec1,\n0x00d8:0xfec5,\n0x00d9:0xfecb,\n0x00da:0xfecf,\n0x00db:0x00a6,\n0x00dc:0x00ac,\n0x00dd:0x00f7,\n0x00de:0x00d7,\n0x00df:0xfec9,\n0x00e0:0x0640,\n0x00e1:0xfed3,\n0x00e2:0xfed7,\n0x00e3:0xfedb,\n0x00e4:0xfedf,\n0x00e5:0xfee3,\n0x00e6:0xfee7,\n0x00e7:0xfeeb,\n0x00e8:0xfeed,\n0x00e9:0xfeef,\n0x00ea:0xfef3,\n0x00eb:0xfebd,\n0x00ec:0xfecc,\n0x00ed:0xfece,\n0x00ee:0xfecd,\n0x00ef:0xfee1,\n0x00f0:0xfe7d,\n0x00f1:0x0651,\n0x00f2:0xfee5,\n0x00f3:0xfee9,\n0x00f4:0xfeec,\n0x00f5:0xfef0,\n0x00f6:0xfef2,\n0x00f7:0xfed0,\n0x00f8:0xfed5,\n0x00f9:0xfef5,\n0x00fa:0xfef6,\n0x00fb:0xfedd,\n0x00fc:0xfed9,\n0x00fd:0xfef1,\n0x00fe:0x25a0,\n0x00ff:None ,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'\\u066a'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xb0'\n'\\xb7'\n'\\u2219'\n'\\u221a'\n'\\u2592'\n'\\u2500'\n'\\u2502'\n'\\u253c'\n'\\u2524'\n'\\u252c'\n'\\u251c'\n'\\u2534'\n'\\u2510'\n'\\u250c'\n'\\u2514'\n'\\u2518'\n'\\u03b2'\n'\\u221e'\n'\\u03c6'\n'\\xb1'\n'\\xbd'\n'\\xbc'\n'\\u2248'\n'\\xab'\n'\\xbb'\n'\\ufef7'\n'\\ufef8'\n'\\ufffe'\n'\\ufffe'\n'\\ufefb'\n'\\ufefc'\n'\\ufffe'\n'\\xa0'\n'\\xad'\n'\\ufe82'\n'\\xa3'\n'\\xa4'\n'\\ufe84'\n'\\ufffe'\n'\\ufffe'\n'\\ufe8e'\n'\\ufe8f'\n'\\ufe95'\n'\\ufe99'\n'\\u060c'\n'\\ufe9d'\n'\\ufea1'\n'\\ufea5'\n'\\u0660'\n'\\u0661'\n'\\u0662'\n'\\u0663'\n'\\u0664'\n'\\u0665'\n'\\u0666'\n'\\u0667'\n'\\u0668'\n'\\u0669'\n'\\ufed1'\n'\\u061b'\n'\\ufeb1'\n'\\ufeb5'\n'\\ufeb9'\n'\\u061f'\n'\\xa2'\n'\\ufe80'\n'\\ufe81'\n'\\ufe83'\n'\\ufe85'\n'\\ufeca'\n'\\ufe8b'\n'\\ufe8d'\n'\\ufe91'\n'\\ufe93'\n'\\ufe97'\n'\\ufe9b'\n'\\ufe9f'\n'\\ufea3'\n'\\ufea7'\n'\\ufea9'\n'\\ufeab'\n'\\ufead'\n'\\ufeaf'\n'\\ufeb3'\n'\\ufeb7'\n'\\ufebb'\n'\\ufebf'\n'\\ufec1'\n'\\ufec5'\n'\\ufecb'\n'\\ufecf'\n'\\xa6'\n'\\xac'\n'\\xf7'\n'\\xd7'\n'\\ufec9'\n'\\u0640'\n'\\ufed3'\n'\\ufed7'\n'\\ufedb'\n'\\ufedf'\n'\\ufee3'\n'\\ufee7'\n'\\ufeeb'\n'\\ufeed'\n'\\ufeef'\n'\\ufef3'\n'\\ufebd'\n'\\ufecc'\n'\\ufece'\n'\\ufecd'\n'\\ufee1'\n'\\ufe7d'\n'\\u0651'\n'\\ufee5'\n'\\ufee9'\n'\\ufeec'\n'\\ufef0'\n'\\ufef2'\n'\\ufed0'\n'\\ufed5'\n'\\ufef5'\n'\\ufef6'\n'\\ufedd'\n'\\ufed9'\n'\\ufef1'\n'\\u25a0'\n'\\ufffe'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00a0,\n0x00a2:0x00c0,\n0x00a3:0x00a3,\n0x00a4:0x00a4,\n0x00a6:0x00db,\n0x00ab:0x0097,\n0x00ac:0x00dc,\n0x00ad:0x00a1,\n0x00b0:0x0080,\n0x00b1:0x0093,\n0x00b7:0x0081,\n0x00bb:0x0098,\n0x00bc:0x0095,\n0x00bd:0x0094,\n0x00d7:0x00de,\n0x00f7:0x00dd,\n0x03b2:0x0090,\n0x03c6:0x0092,\n0x060c:0x00ac,\n0x061b:0x00bb,\n0x061f:0x00bf,\n0x0640:0x00e0,\n0x0651:0x00f1,\n0x0660:0x00b0,\n0x0661:0x00b1,\n0x0662:0x00b2,\n0x0663:0x00b3,\n0x0664:0x00b4,\n0x0665:0x00b5,\n0x0666:0x00b6,\n0x0667:0x00b7,\n0x0668:0x00b8,\n0x0669:0x00b9,\n0x066a:0x0025,\n0x2219:0x0082,\n0x221a:0x0083,\n0x221e:0x0091,\n0x2248:0x0096,\n0x2500:0x0085,\n0x2502:0x0086,\n0x250c:0x008d,\n0x2510:0x008c,\n0x2514:0x008e,\n0x2518:0x008f,\n0x251c:0x008a,\n0x2524:0x0088,\n0x252c:0x0089,\n0x2534:0x008b,\n0x253c:0x0087,\n0x2592:0x0084,\n0x25a0:0x00fe,\n0xfe7d:0x00f0,\n0xfe80:0x00c1,\n0xfe81:0x00c2,\n0xfe82:0x00a2,\n0xfe83:0x00c3,\n0xfe84:0x00a5,\n0xfe85:0x00c4,\n0xfe8b:0x00c6,\n0xfe8d:0x00c7,\n0xfe8e:0x00a8,\n0xfe8f:0x00a9,\n0xfe91:0x00c8,\n0xfe93:0x00c9,\n0xfe95:0x00aa,\n0xfe97:0x00ca,\n0xfe99:0x00ab,\n0xfe9b:0x00cb,\n0xfe9d:0x00ad,\n0xfe9f:0x00cc,\n0xfea1:0x00ae,\n0xfea3:0x00cd,\n0xfea5:0x00af,\n0xfea7:0x00ce,\n0xfea9:0x00cf,\n0xfeab:0x00d0,\n0xfead:0x00d1,\n0xfeaf:0x00d2,\n0xfeb1:0x00bc,\n0xfeb3:0x00d3,\n0xfeb5:0x00bd,\n0xfeb7:0x00d4,\n0xfeb9:0x00be,\n0xfebb:0x00d5,\n0xfebd:0x00eb,\n0xfebf:0x00d6,\n0xfec1:0x00d7,\n0xfec5:0x00d8,\n0xfec9:0x00df,\n0xfeca:0x00c5,\n0xfecb:0x00d9,\n0xfecc:0x00ec,\n0xfecd:0x00ee,\n0xfece:0x00ed,\n0xfecf:0x00da,\n0xfed0:0x00f7,\n0xfed1:0x00ba,\n0xfed3:0x00e1,\n0xfed5:0x00f8,\n0xfed7:0x00e2,\n0xfed9:0x00fc,\n0xfedb:0x00e3,\n0xfedd:0x00fb,\n0xfedf:0x00e4,\n0xfee1:0x00ef,\n0xfee3:0x00e5,\n0xfee5:0x00f2,\n0xfee7:0x00e6,\n0xfee9:0x00f3,\n0xfeeb:0x00e7,\n0xfeec:0x00f4,\n0xfeed:0x00e8,\n0xfeef:0x00e9,\n0xfef0:0x00f5,\n0xfef1:0x00fd,\n0xfef2:0x00f6,\n0xfef3:0x00ea,\n0xfef5:0x00f9,\n0xfef6:0x00fa,\n0xfef7:0x0099,\n0xfef8:0x009a,\n0xfefb:0x009d,\n0xfefc:0x009e,\n}\n"], "reprlib": [".py", "''\n\n__all__=[\"Repr\",\"repr\",\"recursive_repr\"]\n\nimport builtins\nfrom itertools import islice\ntry :\n from _thread import get_ident\nexcept ImportError:\n from _dummy_thread import get_ident\n \ndef recursive_repr(fillvalue='...'):\n ''\n \n def decorating_function(user_function):\n  repr_running=set()\n  \n  def wrapper(self):\n   key=id(self),get_ident()\n   if key in repr_running:\n    return fillvalue\n   repr_running.add(key)\n   try :\n    result=user_function(self)\n   finally :\n    repr_running.discard(key)\n   return result\n   \n   \n  wrapper.__module__=getattr(user_function,'__module__')\n  wrapper.__doc__=getattr(user_function,'__doc__')\n  wrapper.__name__=getattr(user_function,'__name__')\n  wrapper.__annotations__=getattr(user_function,'__annotations__',{})\n  return wrapper\n  \n return decorating_function\n \nclass Repr:\n\n def __init__(self):\n  self.maxlevel=6\n  self.maxtuple=6\n  self.maxlist=6\n  self.maxarray=5\n  self.maxdict=4\n  self.maxset=6\n  self.maxfrozenset=6\n  self.maxdeque=6\n  self.maxstring=30\n  self.maxlong=40\n  self.maxother=30\n  \n def repr(self,x):\n  return self.repr1(x,self.maxlevel)\n  \n def repr1(self,x,level):\n  typename=type(x).__name__\n  if' 'in typename:\n   parts=typename.split()\n   typename='_'.join(parts)\n  if hasattr(self,'repr_'+typename):\n   return getattr(self,'repr_'+typename)(x,level)\n  else :\n   return self.repr_instance(x,level)\n   \n def _repr_iterable(self,x,level,left,right,maxiter,trail=''):\n  n=len(x)\n  if level <=0 and n:\n   s='...'\n  else :\n   newlevel=level -1\n   repr1=self.repr1\n   pieces=[repr1(elem,newlevel)for elem in islice(x,maxiter)]\n   if n >maxiter:pieces.append('...')\n   s=', '.join(pieces)\n   if n ==1 and trail:right=trail+right\n  return'%s%s%s'%(left,s,right)\n  \n def repr_tuple(self,x,level):\n  return self._repr_iterable(x,level,'(',')',self.maxtuple,',')\n  \n def repr_list(self,x,level):\n  return self._repr_iterable(x,level,'[',']',self.maxlist)\n  \n def repr_array(self,x,level):\n  header=\"array('%s', [\"%x.typecode\n  return self._repr_iterable(x,level,header,'])',self.maxarray)\n  \n def repr_set(self,x,level):\n  x=_possibly_sorted(x)\n  return self._repr_iterable(x,level,'set([','])',self.maxset)\n  \n def repr_frozenset(self,x,level):\n  x=_possibly_sorted(x)\n  return self._repr_iterable(x,level,'frozenset([','])',\n  self.maxfrozenset)\n  \n def repr_deque(self,x,level):\n  return self._repr_iterable(x,level,'deque([','])',self.maxdeque)\n  \n def repr_dict(self,x,level):\n  n=len(x)\n  if n ==0:return'{}'\n  if level <=0:return'{...}'\n  newlevel=level -1\n  repr1=self.repr1\n  pieces=[]\n  for key in islice(_possibly_sorted(x),self.maxdict):\n   keyrepr=repr1(key,newlevel)\n   valrepr=repr1(x[key],newlevel)\n   pieces.append('%s: %s'%(keyrepr,valrepr))\n  if n >self.maxdict:pieces.append('...')\n  s=', '.join(pieces)\n  return'{%s}'%(s,)\n  \n def repr_str(self,x,level):\n  s=builtins.repr(x[:self.maxstring])\n  if len(s)>self.maxstring:\n   i=max(0,(self.maxstring -3)//2)\n   j=max(0,self.maxstring -3 -i)\n   s=builtins.repr(x[:i]+x[len(x)-j:])\n   s=s[:i]+'...'+s[len(s)-j:]\n  return s\n  \n def repr_int(self,x,level):\n  s=builtins.repr(x)\n  if len(s)>self.maxlong:\n   i=max(0,(self.maxlong -3)//2)\n   j=max(0,self.maxlong -3 -i)\n   s=s[:i]+'...'+s[len(s)-j:]\n  return s\n  \n def repr_instance(self,x,level):\n  try :\n   s=builtins.repr(x)\n   \n   \n  except Exception:\n   return'<%s instance at %x>'%(x.__class__.__name__,id(x))\n  if len(s)>self.maxother:\n   i=max(0,(self.maxother -3)//2)\n   j=max(0,self.maxother -3 -i)\n   s=s[:i]+'...'+s[len(s)-j:]\n  return s\n  \n  \ndef _possibly_sorted(x):\n\n\n\n try :\n  return sorted(x)\n except Exception:\n  return list(x)\n  \naRepr=Repr()\nrepr=aRepr.repr\n"], "xml.dom": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Node:\n ''\n __slots__=()\n \n \n \n \n \n \n \n \n ELEMENT_NODE=1\n ATTRIBUTE_NODE=2\n TEXT_NODE=3\n CDATA_SECTION_NODE=4\n ENTITY_REFERENCE_NODE=5\n ENTITY_NODE=6\n PROCESSING_INSTRUCTION_NODE=7\n COMMENT_NODE=8\n DOCUMENT_NODE=9\n DOCUMENT_TYPE_NODE=10\n DOCUMENT_FRAGMENT_NODE=11\n NOTATION_NODE=12\n \n \n \nINDEX_SIZE_ERR=1\nDOMSTRING_SIZE_ERR=2\nHIERARCHY_REQUEST_ERR=3\nWRONG_DOCUMENT_ERR=4\nINVALID_CHARACTER_ERR=5\nNO_DATA_ALLOWED_ERR=6\nNO_MODIFICATION_ALLOWED_ERR=7\nNOT_FOUND_ERR=8\nNOT_SUPPORTED_ERR=9\nINUSE_ATTRIBUTE_ERR=10\nINVALID_STATE_ERR=11\nSYNTAX_ERR=12\nINVALID_MODIFICATION_ERR=13\nNAMESPACE_ERR=14\nINVALID_ACCESS_ERR=15\nVALIDATION_ERR=16\n\n\nclass DOMException(Exception):\n ''\n \n \n def __init__(self,*args,**kw):\n  if self.__class__ is DOMException:\n   raise RuntimeError(\n   \"DOMException should not be instantiated directly\")\n  Exception.__init__(self,*args,**kw)\n  \n def _get_code(self):\n  return self.code\n  \n  \nclass IndexSizeErr(DOMException):\n code=INDEX_SIZE_ERR\n \nclass DomstringSizeErr(DOMException):\n code=DOMSTRING_SIZE_ERR\n \nclass HierarchyRequestErr(DOMException):\n code=HIERARCHY_REQUEST_ERR\n \nclass WrongDocumentErr(DOMException):\n code=WRONG_DOCUMENT_ERR\n \nclass InvalidCharacterErr(DOMException):\n code=INVALID_CHARACTER_ERR\n \nclass NoDataAllowedErr(DOMException):\n code=NO_DATA_ALLOWED_ERR\n \nclass NoModificationAllowedErr(DOMException):\n code=NO_MODIFICATION_ALLOWED_ERR\n \nclass NotFoundErr(DOMException):\n code=NOT_FOUND_ERR\n \nclass NotSupportedErr(DOMException):\n code=NOT_SUPPORTED_ERR\n \nclass InuseAttributeErr(DOMException):\n code=INUSE_ATTRIBUTE_ERR\n \nclass InvalidStateErr(DOMException):\n code=INVALID_STATE_ERR\n \nclass SyntaxErr(DOMException):\n code=SYNTAX_ERR\n \nclass InvalidModificationErr(DOMException):\n code=INVALID_MODIFICATION_ERR\n \nclass NamespaceErr(DOMException):\n code=NAMESPACE_ERR\n \nclass InvalidAccessErr(DOMException):\n code=INVALID_ACCESS_ERR\n \nclass ValidationErr(DOMException):\n code=VALIDATION_ERR\n \nclass UserDataHandler:\n ''\n \n \n \n NODE_CLONED=1\n NODE_IMPORTED=2\n NODE_DELETED=3\n NODE_RENAMED=4\n \nXML_NAMESPACE=\"http://www.w3.org/XML/1998/namespace\"\nXMLNS_NAMESPACE=\"http://www.w3.org/2000/xmlns/\"\nXHTML_NAMESPACE=\"http://www.w3.org/1999/xhtml\"\nEMPTY_NAMESPACE=None\nEMPTY_PREFIX=None\n\nfrom .domreg import getDOMImplementation,registerDOMImplementation\n", 1], "textwrap": [".py", "''\n\n\n\n\n\n\nimport re\n\n__all__=['TextWrapper','wrap','fill','dedent','indent']\n\n\n\n\n\n\n\n\n\n_whitespace='\\t\\n\\x0b\\x0c\\r '\n\nclass TextWrapper:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n unicode_whitespace_trans={}\n uspace=ord(' ')\n for x in _whitespace:\n  unicode_whitespace_trans[ord(x)]=uspace\n  \n  \n  \n  \n  \n  \n  \n wordsep_re=re.compile(\n r'(\\s+|'\n r'[^\\s\\w]*\\w+[^0-9\\W]-(?=\\w+[^0-9\\W])|'\n r'(?<=[\\w\\!\\\"\\'\\&\\.\\,\\?])-{2,}(?=\\w))')\n \n \n \n \n \n wordsep_simple_re=re.compile(r'(\\s+)')\n \n \n \n sentence_end_re=re.compile(r'[a-z]'\n r'[\\.\\!\\?]'\n r'[\\\"\\']?'\n r'\\Z')\n \n \n def __init__(self,\n width=70,\n initial_indent=\"\",\n subsequent_indent=\"\",\n expand_tabs=True ,\n replace_whitespace=True ,\n fix_sentence_endings=False ,\n break_long_words=True ,\n drop_whitespace=True ,\n break_on_hyphens=True ,\n tabsize=8):\n  self.width=width\n  self.initial_indent=initial_indent\n  self.subsequent_indent=subsequent_indent\n  self.expand_tabs=expand_tabs\n  self.replace_whitespace=replace_whitespace\n  self.fix_sentence_endings=fix_sentence_endings\n  self.break_long_words=break_long_words\n  self.drop_whitespace=drop_whitespace\n  self.break_on_hyphens=break_on_hyphens\n  self.tabsize=tabsize\n  \n  \n  \n  \n  \n def _munge_whitespace(self,text):\n  ''\n\n\n\n\n  \n  if self.expand_tabs:\n   text=text.expandtabs(self.tabsize)\n  if self.replace_whitespace:\n   text=text.translate(self.unicode_whitespace_trans)\n  return text\n  \n  \n def _split(self,text):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if self.break_on_hyphens is True :\n   chunks=self.wordsep_re.split(text)\n  else :\n   chunks=self.wordsep_simple_re.split(text)\n  chunks=[c for c in chunks if c]\n  return chunks\n  \n def _fix_sentence_endings(self,chunks):\n  ''\n\n\n\n\n\n\n  \n  i=0\n  patsearch=self.sentence_end_re.search\n  while i <len(chunks)-1:\n   if chunks[i+1]==\" \"and patsearch(chunks[i]):\n    chunks[i+1]=\"  \"\n    i +=2\n   else :\n    i +=1\n    \n def _handle_long_word(self,reversed_chunks,cur_line,cur_len,width):\n  ''\n\n\n\n\n\n  \n  \n  \n  if width <1:\n   space_left=1\n  else :\n   space_left=width -cur_len\n   \n   \n   \n  if self.break_long_words:\n   cur_line.append(reversed_chunks[-1][:space_left])\n   reversed_chunks[-1]=reversed_chunks[-1][space_left:]\n   \n   \n   \n   \n  elif not cur_line:\n   cur_line.append(reversed_chunks.pop())\n   \n   \n   \n   \n   \n   \n   \n def _wrap_chunks(self,chunks):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  lines=[]\n  if self.width <=0:\n   raise ValueError(\"invalid width %r (must be > 0)\"%self.width)\n   \n   \n   \n  chunks.reverse()\n  \n  while chunks:\n  \n  \n  \n   cur_line=[]\n   cur_len=0\n   \n   \n   if lines:\n    indent=self.subsequent_indent\n   else :\n    indent=self.initial_indent\n    \n    \n   width=self.width -len(indent)\n   \n   \n   \n   if self.drop_whitespace and chunks[-1].strip()==''and lines:\n    del chunks[-1]\n    \n   while chunks:\n    l=len(chunks[-1])\n    \n    \n    if cur_len+l <=width:\n     cur_line.append(chunks.pop())\n     cur_len +=l\n     \n     \n    else :\n     break\n     \n     \n     \n   if chunks and len(chunks[-1])>width:\n    self._handle_long_word(chunks,cur_line,cur_len,width)\n    \n    \n   if self.drop_whitespace and cur_line and cur_line[-1].strip()=='':\n    del cur_line[-1]\n    \n    \n    \n   if cur_line:\n    lines.append(indent+''.join(cur_line))\n    \n  return lines\n  \n  \n  \n  \n def wrap(self,text):\n  ''\n\n\n\n\n\n\n  \n  text=self._munge_whitespace(text)\n  chunks=self._split(text)\n  if self.fix_sentence_endings:\n   self._fix_sentence_endings(chunks)\n  return self._wrap_chunks(chunks)\n  \n def fill(self,text):\n  ''\n\n\n\n\n  \n  return\"\\n\".join(self.wrap(text))\n  \n  \n  \n  \ndef wrap(text,width=70,**kwargs):\n ''\n\n\n\n\n\n\n\n \n w=TextWrapper(width=width,**kwargs)\n return w.wrap(text)\n \ndef fill(text,width=70,**kwargs):\n ''\n\n\n\n\n\n\n \n w=TextWrapper(width=width,**kwargs)\n return w.fill(text)\n \n \n \n \n_whitespace_only_re=re.compile('^[ \\t]+$',re.MULTILINE)\n_leading_whitespace_re=re.compile('(^[ \\t]*)(?:[^ \\t\\n])',re.MULTILINE)\n\ndef dedent(text):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n margin=None\n text=_whitespace_only_re.sub('',text)\n indents=_leading_whitespace_re.findall(text)\n for indent in indents:\n  if margin is None :\n   margin=indent\n   \n   \n   \n  elif indent.startswith(margin):\n   pass\n   \n   \n   \n  elif margin.startswith(indent):\n   margin=indent\n   \n   \n   \n  else :\n   margin=\"\"\n   break\n   \n   \n if 0 and margin:\n  for line in text.split(\"\\n\"):\n   assert not line or line.startswith(margin),   \"line = %r, margin = %r\"%(line,margin)\n   \n if margin:\n  text=re.sub(r'(?m)^'+margin,'',text)\n return text\n \n \ndef indent(text,prefix,predicate=None ):\n ''\n\n\n\n\n\n \n if predicate is None :\n  def predicate(line):\n   return line.strip()\n   \n def prefixed_lines():\n  for line in text.splitlines(True ):\n   yield (prefix+line if predicate(line)else line)\n return''.join(prefixed_lines())\n \n \nif __name__ ==\"__main__\":\n\n\n print(dedent(\"Hello there.\\n  This is indented.\"))\n"], "pdb": [".py", "#! /usr/bin/env python3\n\n\"\"\"\nThe Python Debugger Pdb\n=======================\n\nTo use the debugger in its simplest form:\n\n        >>> import pdb\n        >>> pdb.run('<a statement>')\n\nThe debugger's prompt is '(Pdb) '.  This will stop in the first\nfunction call in <a statement>.\n\nAlternatively, if a statement terminated with an unhandled exception,\nyou can use pdb's post-mortem facility to inspect the contents of the\ntraceback:\n\n        >>> <a statement>\n        <exception traceback>\n        >>> import pdb\n        >>> pdb.pm()\n\nThe commands recognized by the debugger are listed in the next\nsection.  Most can be abbreviated as indicated; e.g., h(elp) means\nthat 'help' can be typed as 'h' or 'help' (but not as 'he' or 'hel',\nnor as 'H' or 'Help' or 'HELP').  Optional arguments are enclosed in\nsquare brackets.  Alternatives in the command syntax are separated\nby a vertical bar (|).\n\nA blank line repeats the previous command literally, except for\n'list', where it lists the next 11 lines.\n\nCommands that the debugger doesn't recognize are assumed to be Python\nstatements and are executed in the context of the program being\ndebugged.  Python statements can also be prefixed with an exclamation\npoint ('!').  This is a powerful way to inspect the program being\ndebugged; it is even possible to change variables or call functions.\nWhen an exception occurs in such a statement, the exception name is\nprinted but the debugger's state is not changed.\n\nThe debugger supports aliases, which can save typing.  And aliases can\nhave parameters (see the alias help entry) which allows one a certain\nlevel of adaptability to the context under examination.\n\nMultiple commands may be entered on a single line, separated by the\npair ';;'.  No intelligence is applied to separating the commands; the\ninput is split at the first ';;', even if it is in the middle of a\nquoted string.\n\nIf a file \".pdbrc\" exists in your home directory or in the current\ndirectory, it is read in and executed as if it had been typed at the\ndebugger prompt.  This is particularly useful for aliases.  If both\nfiles exist, the one in the home directory is read first and aliases\ndefined there can be overriden by the local file.\n\nAside from aliases, the debugger is not directly programmable; but it\nis implemented as a class from which you can derive your own debugger\nclass, which you can make as fancy as you like.\n\n\nDebugger commands\n=================\n\n\"\"\"\n\n\n\nimport os\nimport re\nimport sys\nimport cmd\nimport bdb\nimport dis\nimport code\nimport glob\nimport pprint\nimport signal\nimport inspect\nimport traceback\nimport linecache\n\n\nclass Restart(Exception):\n ''\n pass\n \n__all__=[\"run\",\"pm\",\"Pdb\",\"runeval\",\"runctx\",\"runcall\",\"set_trace\",\n\"post_mortem\",\"help\"]\n\ndef find_function(funcname,filename):\n cre=re.compile(r'def\\s+%s\\s*[(]'%re.escape(funcname))\n try :\n  fp=open(filename)\n except OSError:\n  return None\n  \n with fp:\n  for lineno,line in enumerate(fp,start=1):\n   if cre.match(line):\n    return funcname,filename,lineno\n return None\n \ndef getsourcelines(obj):\n lines,lineno=inspect.findsource(obj)\n if inspect.isframe(obj)and obj.f_globals is obj.f_locals:\n \n  return lines,1\n elif inspect.ismodule(obj):\n  return lines,1\n return inspect.getblock(lines[lineno:]),lineno+1\n \ndef lasti2lineno(code,lasti):\n linestarts=list(dis.findlinestarts(code))\n linestarts.reverse()\n for i,lineno in linestarts:\n  if lasti >=i:\n   return lineno\n return 0\n \n \nclass _rstr(str):\n ''\n def __repr__(self):\n  return self\n  \n  \n  \n  \n  \n  \n  \nline_prefix='\\n-> '\n\nclass Pdb(bdb.Bdb,cmd.Cmd):\n\n def __init__(self,completekey='tab',stdin=None ,stdout=None ,skip=None ,\n nosigint=False ):\n  bdb.Bdb.__init__(self,skip=skip)\n  cmd.Cmd.__init__(self,completekey,stdin,stdout)\n  if stdout:\n   self.use_rawinput=0\n  self.prompt='(Pdb) '\n  self.aliases={}\n  self.displaying={}\n  self.mainpyfile=''\n  self._wait_for_mainpyfile=False\n  self.tb_lineno={}\n  \n  try :\n   import readline\n   \n   readline.set_completer_delims(' \\t\\n`@#$%^&*()=+[{]}\\\\|;:\\'\",<>?')\n  except ImportError:\n   pass\n  self.allow_kbdint=False\n  self.nosigint=nosigint\n  \n  \n  self.rcLines=[]\n  if'HOME'in os.environ:\n   envHome=os.environ['HOME']\n   try :\n    with open(os.path.join(envHome,\".pdbrc\"))as rcFile:\n     self.rcLines.extend(rcFile)\n   except OSError:\n    pass\n  try :\n   with open(\".pdbrc\")as rcFile:\n    self.rcLines.extend(rcFile)\n  except OSError:\n   pass\n   \n  self.commands={}\n  self.commands_doprompt={}\n  \n  self.commands_silent={}\n  \n  self.commands_defining=False\n  \n  self.commands_bnum=None\n  \n  \n def sigint_handler(self,signum,frame):\n  if self.allow_kbdint:\n   raise KeyboardInterrupt\n  self.message(\"\\nProgram interrupted. (Use 'cont' to resume).\")\n  self.set_step()\n  self.set_trace(frame)\n  \n  signal.signal(signal.SIGINT,self._previous_sigint_handler)\n  \n def reset(self):\n  bdb.Bdb.reset(self)\n  self.forget()\n  \n def forget(self):\n  self.lineno=None\n  self.stack=[]\n  self.curindex=0\n  self.curframe=None\n  self.tb_lineno.clear()\n  \n def setup(self,f,tb):\n  self.forget()\n  self.stack,self.curindex=self.get_stack(f,tb)\n  while tb:\n  \n  \n  \n   lineno=lasti2lineno(tb.tb_frame.f_code,tb.tb_lasti)\n   self.tb_lineno[tb.tb_frame]=lineno\n   tb=tb.tb_next\n  self.curframe=self.stack[self.curindex][0]\n  \n  \n  \n  self.curframe_locals=self.curframe.f_locals\n  return self.execRcLines()\n  \n  \n def execRcLines(self):\n  if not self.rcLines:\n   return\n   \n  rcLines=self.rcLines\n  rcLines.reverse()\n  \n  self.rcLines=[]\n  while rcLines:\n   line=rcLines.pop().strip()\n   if line and line[0]!='#':\n    if self.onecmd(line):\n    \n    \n    \n     self.rcLines +=reversed(rcLines)\n     return True\n     \n     \n     \n def user_call(self,frame,argument_list):\n  ''\n  \n  if self._wait_for_mainpyfile:\n   return\n  if self.stop_here(frame):\n   self.message('--Call--')\n   self.interaction(frame,None )\n   \n def user_line(self,frame):\n  ''\n  if self._wait_for_mainpyfile:\n   if (self.mainpyfile !=self.canonic(frame.f_code.co_filename)\n   or frame.f_lineno <=0):\n    return\n   self._wait_for_mainpyfile=False\n  if self.bp_commands(frame):\n   self.interaction(frame,None )\n   \n def bp_commands(self,frame):\n  ''\n\n\n\n  \n  \n  if getattr(self,\"currentbp\",False )and  self.currentbp in self.commands:\n   currentbp=self.currentbp\n   self.currentbp=0\n   lastcmd_back=self.lastcmd\n   self.setup(frame,None )\n   for line in self.commands[currentbp]:\n    self.onecmd(line)\n   self.lastcmd=lastcmd_back\n   if not self.commands_silent[currentbp]:\n    self.print_stack_entry(self.stack[self.curindex])\n   if self.commands_doprompt[currentbp]:\n    self._cmdloop()\n   self.forget()\n   return\n  return 1\n  \n def user_return(self,frame,return_value):\n  ''\n  if self._wait_for_mainpyfile:\n   return\n  frame.f_locals['__return__']=return_value\n  self.message('--Return--')\n  self.interaction(frame,None )\n  \n def user_exception(self,frame,exc_info):\n  ''\n  \n  if self._wait_for_mainpyfile:\n   return\n  exc_type,exc_value,exc_traceback=exc_info\n  frame.f_locals['__exception__']=exc_type,exc_value\n  \n  \n  \n  \n  \n  \n  prefix='Internal 'if (not exc_traceback\n  and exc_type is StopIteration)else''\n  self.message('%s%s'%(prefix,\n  traceback.format_exception_only(exc_type,exc_value)[-1].strip()))\n  self.interaction(frame,exc_traceback)\n  \n  \n def _cmdloop(self):\n  while True :\n   try :\n   \n   \n    self.allow_kbdint=True\n    self.cmdloop()\n    self.allow_kbdint=False\n    break\n   except KeyboardInterrupt:\n    self.message('--KeyboardInterrupt--')\n    \n    \n def preloop(self):\n  displaying=self.displaying.get(self.curframe)\n  if displaying:\n   for expr,oldvalue in displaying.items():\n    newvalue=self._getval_except(expr)\n    \n    \n    \n    if newvalue is not oldvalue and newvalue !=oldvalue:\n     displaying[expr]=newvalue\n     self.message('display %s: %r  [old: %r]'%\n     (expr,newvalue,oldvalue))\n     \n def interaction(self,frame,traceback):\n  if self.setup(frame,traceback):\n  \n  \n   self.forget()\n   return\n  self.print_stack_entry(self.stack[self.curindex])\n  self._cmdloop()\n  self.forget()\n  \n def displayhook(self,obj):\n  ''\n\n  \n  \n  if obj is not None :\n   self.message(repr(obj))\n   \n def default(self,line):\n  if line[:1]=='!':line=line[1:]\n  locals=self.curframe_locals\n  globals=self.curframe.f_globals\n  try :\n   code=compile(line+'\\n','<stdin>','single')\n   save_stdout=sys.stdout\n   save_stdin=sys.stdin\n   save_displayhook=sys.displayhook\n   try :\n    sys.stdin=self.stdin\n    sys.stdout=self.stdout\n    sys.displayhook=self.displayhook\n    exec(code,globals,locals)\n   finally :\n    sys.stdout=save_stdout\n    sys.stdin=save_stdin\n    sys.displayhook=save_displayhook\n  except :\n   exc_info=sys.exc_info()[:2]\n   self.error(traceback.format_exception_only(*exc_info)[-1].strip())\n   \n def precmd(self,line):\n  ''\n  if not line.strip():\n   return line\n  args=line.split()\n  while args[0]in self.aliases:\n   line=self.aliases[args[0]]\n   ii=1\n   for tmpArg in args[1:]:\n    line=line.replace(\"%\"+str(ii),\n    tmpArg)\n    ii +=1\n   line=line.replace(\"%*\",' '.join(args[1:]))\n   args=line.split()\n   \n   \n  if args[0]!='alias':\n   marker=line.find(';;')\n   if marker >=0:\n   \n    next=line[marker+2:].lstrip()\n    self.cmdqueue.append(next)\n    line=line[:marker].rstrip()\n  return line\n  \n def onecmd(self,line):\n  ''\n\n\n\n\n  \n  if not self.commands_defining:\n   return cmd.Cmd.onecmd(self,line)\n  else :\n   return self.handle_command_def(line)\n   \n def handle_command_def(self,line):\n  ''\n  cmd,arg,line=self.parseline(line)\n  if not cmd:\n   return\n  if cmd =='silent':\n   self.commands_silent[self.commands_bnum]=True\n   return\n  elif cmd =='end':\n   self.cmdqueue=[]\n   return 1\n  cmdlist=self.commands[self.commands_bnum]\n  if arg:\n   cmdlist.append(cmd+' '+arg)\n  else :\n   cmdlist.append(cmd)\n   \n  try :\n   func=getattr(self,'do_'+cmd)\n  except AttributeError:\n   func=self.default\n   \n  if func.__name__ in self.commands_resuming:\n   self.commands_doprompt[self.commands_bnum]=False\n   self.cmdqueue=[]\n   return 1\n  return\n  \n  \n  \n def message(self,msg):\n  print(msg,file=self.stdout)\n  \n def error(self,msg):\n  print('***',msg,file=self.stdout)\n  \n  \n  \n  \n def _complete_location(self,text,line,begidx,endidx):\n \n  if line.strip().endswith((':',',')):\n  \n   return []\n   \n  try :\n   ret=self._complete_expression(text,line,begidx,endidx)\n  except Exception:\n   ret=[]\n   \n  globs=glob.glob(text+'*')\n  for fn in globs:\n   if os.path.isdir(fn):\n    ret.append(fn+'/')\n   elif os.path.isfile(fn)and fn.lower().endswith(('.py','.pyw')):\n    ret.append(fn+':')\n  return ret\n  \n def _complete_bpnumber(self,text,line,begidx,endidx):\n \n \n \n  return [str(i)for i,bp in enumerate(bdb.Breakpoint.bpbynumber)\n  if bp is not None and str(i).startswith(text)]\n  \n def _complete_expression(self,text,line,begidx,endidx):\n \n  if not self.curframe:\n   return []\n   \n   \n   \n  ns=self.curframe.f_globals.copy()\n  ns.update(self.curframe_locals)\n  if'.'in text:\n  \n  \n  \n   dotted=text.split('.')\n   try :\n    obj=ns[dotted[0]]\n    for part in dotted[1:-1]:\n     obj=getattr(obj,part)\n   except (KeyError,AttributeError):\n    return []\n   prefix='.'.join(dotted[:-1])+'.'\n   return [prefix+n for n in dir(obj)if n.startswith(dotted[-1])]\n  else :\n  \n   return [n for n in ns.keys()if n.startswith(text)]\n   \n   \n   \n   \n   \n def do_commands(self,arg):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if not arg:\n   bnum=len(bdb.Breakpoint.bpbynumber)-1\n  else :\n   try :\n    bnum=int(arg)\n   except :\n    self.error(\"Usage: commands [bnum]\\n        ...\\n        end\")\n    return\n  self.commands_bnum=bnum\n  \n  if bnum in self.commands:\n   old_command_defs=(self.commands[bnum],\n   self.commands_doprompt[bnum],\n   self.commands_silent[bnum])\n  else :\n   old_command_defs=None\n  self.commands[bnum]=[]\n  self.commands_doprompt[bnum]=True\n  self.commands_silent[bnum]=False\n  \n  prompt_back=self.prompt\n  self.prompt='(com) '\n  self.commands_defining=True\n  try :\n   self.cmdloop()\n  except KeyboardInterrupt:\n  \n   if old_command_defs:\n    self.commands[bnum]=old_command_defs[0]\n    self.commands_doprompt[bnum]=old_command_defs[1]\n    self.commands_silent[bnum]=old_command_defs[2]\n   else :\n    del self.commands[bnum]\n    del self.commands_doprompt[bnum]\n    del self.commands_silent[bnum]\n   self.error('command definition aborted, old commands restored')\n  finally :\n   self.commands_defining=False\n   self.prompt=prompt_back\n   \n complete_commands=_complete_bpnumber\n \n def do_break(self,arg,temporary=0):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if not arg:\n   if self.breaks:\n    self.message(\"Num Type         Disp Enb   Where\")\n    for bp in bdb.Breakpoint.bpbynumber:\n     if bp:\n      self.message(bp.bpformat())\n   return\n   \n   \n  filename=None\n  lineno=None\n  cond=None\n  comma=arg.find(',')\n  if comma >0:\n  \n   cond=arg[comma+1:].lstrip()\n   arg=arg[:comma].rstrip()\n   \n  colon=arg.rfind(':')\n  funcname=None\n  if colon >=0:\n   filename=arg[:colon].rstrip()\n   f=self.lookupmodule(filename)\n   if not f:\n    self.error('%r not found from sys.path'%filename)\n    return\n   else :\n    filename=f\n   arg=arg[colon+1:].lstrip()\n   try :\n    lineno=int(arg)\n   except ValueError:\n    self.error('Bad lineno: %s'%arg)\n    return\n  else :\n  \n   try :\n    lineno=int(arg)\n   except ValueError:\n    try :\n     func=eval(arg,\n     self.curframe.f_globals,\n     self.curframe_locals)\n    except :\n     func=arg\n    try :\n     if hasattr(func,'__func__'):\n      func=func.__func__\n     code=func.__code__\n     \n     \n     funcname=code.co_name\n     lineno=code.co_firstlineno\n     filename=code.co_filename\n    except :\n    \n     (ok,filename,ln)=self.lineinfo(arg)\n     if not ok:\n      self.error('The specified object %r is not a function '\n      'or was not found along sys.path.'%arg)\n      return\n     funcname=ok\n     lineno=int(ln)\n  if not filename:\n   filename=self.defaultFile()\n   \n  line=self.checkline(filename,lineno)\n  if line:\n  \n   err=self.set_break(filename,line,temporary,cond,funcname)\n   if err:\n    self.error(err)\n   else :\n    bp=self.get_breaks(filename,line)[-1]\n    self.message(\"Breakpoint %d at %s:%d\"%\n    (bp.number,bp.file,bp.line))\n    \n    \n def defaultFile(self):\n  ''\n  filename=self.curframe.f_code.co_filename\n  if filename =='<string>'and self.mainpyfile:\n   filename=self.mainpyfile\n  return filename\n  \n do_b=do_break\n \n complete_break=_complete_location\n complete_b=_complete_location\n \n def do_tbreak(self,arg):\n  ''\n\n\n  \n  self.do_break(arg,1)\n  \n complete_tbreak=_complete_location\n \n def lineinfo(self,identifier):\n  failed=(None ,None ,None )\n  \n  idstring=identifier.split(\"'\")\n  if len(idstring)==1:\n  \n   id=idstring[0].strip()\n  elif len(idstring)==3:\n  \n   id=idstring[1].strip()\n  else :\n   return failed\n  if id =='':return failed\n  parts=id.split('.')\n  \n  if parts[0]=='self':\n   del parts[0]\n   if len(parts)==0:\n    return failed\n    \n  fname=self.defaultFile()\n  if len(parts)==1:\n   item=parts[0]\n  else :\n  \n  \n   f=self.lookupmodule(parts[0])\n   if f:\n    fname=f\n   item=parts[1]\n  answer=find_function(item,fname)\n  return answer or failed\n  \n def checkline(self,filename,lineno):\n  ''\n\n\n\n  \n  \n  \n  globs=self.curframe.f_globals if hasattr(self,'curframe')else None\n  line=linecache.getline(filename,lineno,globs)\n  if not line:\n   self.message('End of file')\n   return 0\n  line=line.strip()\n  \n  if (not line or (line[0]=='#')or\n  (line[:3]=='\"\"\"')or line[:3]==\"'''\"):\n   self.error('Blank or comment')\n   return 0\n  return lineno\n  \n def do_enable(self,arg):\n  ''\n\n\n  \n  args=arg.split()\n  for i in args:\n   try :\n    bp=self.get_bpbynumber(i)\n   except ValueError as err:\n    self.error(err)\n   else :\n    bp.enable()\n    self.message('Enabled %s'%bp)\n    \n complete_enable=_complete_bpnumber\n \n def do_disable(self,arg):\n  ''\n\n\n\n\n\n  \n  args=arg.split()\n  for i in args:\n   try :\n    bp=self.get_bpbynumber(i)\n   except ValueError as err:\n    self.error(err)\n   else :\n    bp.disable()\n    self.message('Disabled %s'%bp)\n    \n complete_disable=_complete_bpnumber\n \n def do_condition(self,arg):\n  ''\n\n\n\n\n  \n  args=arg.split(' ',1)\n  try :\n   cond=args[1]\n  except IndexError:\n   cond=None\n  try :\n   bp=self.get_bpbynumber(args[0].strip())\n  except IndexError:\n   self.error('Breakpoint number expected')\n  except ValueError as err:\n   self.error(err)\n  else :\n   bp.cond=cond\n   if not cond:\n    self.message('Breakpoint %d is now unconditional.'%bp.number)\n   else :\n    self.message('New condition set for breakpoint %d.'%bp.number)\n    \n complete_condition=_complete_bpnumber\n \n def do_ignore(self,arg):\n  ''\n\n\n\n\n\n\n  \n  args=arg.split()\n  try :\n   count=int(args[1].strip())\n  except :\n   count=0\n  try :\n   bp=self.get_bpbynumber(args[0].strip())\n  except IndexError:\n   self.error('Breakpoint number expected')\n  except ValueError as err:\n   self.error(err)\n  else :\n   bp.ignore=count\n   if count >0:\n    if count >1:\n     countstr='%d crossings'%count\n    else :\n     countstr='1 crossing'\n    self.message('Will ignore next %s of breakpoint %d.'%\n    (countstr,bp.number))\n   else :\n    self.message('Will stop next time breakpoint %d is reached.'\n    %bp.number)\n    \n complete_ignore=_complete_bpnumber\n \n def do_clear(self,arg):\n  ''\n\n\n\n\n  \n  if not arg:\n   try :\n    reply=input('Clear all breaks? ')\n   except EOFError:\n    reply='no'\n   reply=reply.strip().lower()\n   if reply in ('y','yes'):\n    bplist=[bp for bp in bdb.Breakpoint.bpbynumber if bp]\n    self.clear_all_breaks()\n    for bp in bplist:\n     self.message('Deleted %s'%bp)\n   return\n  if':'in arg:\n  \n   i=arg.rfind(':')\n   filename=arg[:i]\n   arg=arg[i+1:]\n   try :\n    lineno=int(arg)\n   except ValueError:\n    err=\"Invalid line number (%s)\"%arg\n   else :\n    bplist=self.get_breaks(filename,lineno)\n    err=self.clear_break(filename,lineno)\n   if err:\n    self.error(err)\n   else :\n    for bp in bplist:\n     self.message('Deleted %s'%bp)\n   return\n  numberlist=arg.split()\n  for i in numberlist:\n   try :\n    bp=self.get_bpbynumber(i)\n   except ValueError as err:\n    self.error(err)\n   else :\n    self.clear_bpbynumber(i)\n    self.message('Deleted %s'%bp)\n do_cl=do_clear\n \n complete_clear=_complete_location\n complete_cl=_complete_location\n \n def do_where(self,arg):\n  ''\n\n\n\n  \n  self.print_stack_trace()\n do_w=do_where\n do_bt=do_where\n \n def _select_frame(self,number):\n  assert 0 <=number <len(self.stack)\n  self.curindex=number\n  self.curframe=self.stack[self.curindex][0]\n  self.curframe_locals=self.curframe.f_locals\n  self.print_stack_entry(self.stack[self.curindex])\n  self.lineno=None\n  \n def do_up(self,arg):\n  ''\n\n\n  \n  if self.curindex ==0:\n   self.error('Oldest frame')\n   return\n  try :\n   count=int(arg or 1)\n  except ValueError:\n   self.error('Invalid frame count (%s)'%arg)\n   return\n  if count <0:\n   newframe=0\n  else :\n   newframe=max(0,self.curindex -count)\n  self._select_frame(newframe)\n do_u=do_up\n \n def do_down(self,arg):\n  ''\n\n\n  \n  if self.curindex+1 ==len(self.stack):\n   self.error('Newest frame')\n   return\n  try :\n   count=int(arg or 1)\n  except ValueError:\n   self.error('Invalid frame count (%s)'%arg)\n   return\n  if count <0:\n   newframe=len(self.stack)-1\n  else :\n   newframe=min(len(self.stack)-1,self.curindex+count)\n  self._select_frame(newframe)\n do_d=do_down\n \n def do_until(self,arg):\n  ''\n\n\n\n\n\n  \n  if arg:\n   try :\n    lineno=int(arg)\n   except ValueError:\n    self.error('Error in argument: %r'%arg)\n    return\n   if lineno <=self.curframe.f_lineno:\n    self.error('\"until\" line number is smaller than current '\n    'line number')\n    return\n  else :\n   lineno=None\n  self.set_until(self.curframe,lineno)\n  return 1\n do_unt=do_until\n \n def do_step(self,arg):\n  ''\n\n\n\n  \n  self.set_step()\n  return 1\n do_s=do_step\n \n def do_next(self,arg):\n  ''\n\n\n  \n  self.set_next(self.curframe)\n  return 1\n do_n=do_next\n \n def do_run(self,arg):\n  ''\n\n\n\n\n  \n  if arg:\n   import shlex\n   argv0=sys.argv[0:1]\n   sys.argv=shlex.split(arg)\n   sys.argv[:0]=argv0\n   \n  raise Restart\n  \n do_restart=do_run\n \n def do_return(self,arg):\n  ''\n\n  \n  self.set_return(self.curframe)\n  return 1\n do_r=do_return\n \n def do_continue(self,arg):\n  ''\n\n  \n  if not self.nosigint:\n   try :\n    self._previous_sigint_handler=    signal.signal(signal.SIGINT,self.sigint_handler)\n   except ValueError:\n   \n   \n   \n   \n    pass\n  self.set_continue()\n  return 1\n do_c=do_cont=do_continue\n \n def do_jump(self,arg):\n  ''\n\n\n\n\n\n\n\n\n  \n  if self.curindex+1 !=len(self.stack):\n   self.error('You can only jump within the bottom frame')\n   return\n  try :\n   arg=int(arg)\n  except ValueError:\n   self.error(\"The 'jump' command requires a line number\")\n  else :\n   try :\n   \n   \n    self.curframe.f_lineno=arg\n    self.stack[self.curindex]=self.stack[self.curindex][0],arg\n    self.print_stack_entry(self.stack[self.curindex])\n   except ValueError as e:\n    self.error('Jump failed: %s'%e)\n do_j=do_jump\n \n def do_debug(self,arg):\n  ''\n\n\n\n  \n  sys.settrace(None )\n  globals=self.curframe.f_globals\n  locals=self.curframe_locals\n  p=Pdb(self.completekey,self.stdin,self.stdout)\n  p.prompt=\"(%s) \"%self.prompt.strip()\n  self.message(\"ENTERING RECURSIVE DEBUGGER\")\n  sys.call_tracing(p.run,(arg,globals,locals))\n  self.message(\"LEAVING RECURSIVE DEBUGGER\")\n  sys.settrace(self.trace_dispatch)\n  self.lastcmd=p.lastcmd\n  \n complete_debug=_complete_expression\n \n def do_quit(self,arg):\n  ''\n\n  \n  self._user_requested_quit=True\n  self.set_quit()\n  return 1\n  \n do_q=do_quit\n do_exit=do_quit\n \n def do_EOF(self,arg):\n  ''\n\n  \n  self.message('')\n  self._user_requested_quit=True\n  self.set_quit()\n  return 1\n  \n def do_args(self,arg):\n  ''\n\n  \n  co=self.curframe.f_code\n  dict=self.curframe_locals\n  n=co.co_argcount\n  if co.co_flags&4:n=n+1\n  if co.co_flags&8:n=n+1\n  for i in range(n):\n   name=co.co_varnames[i]\n   if name in dict:\n    self.message('%s = %r'%(name,dict[name]))\n   else :\n    self.message('%s = *** undefined ***'%(name,))\n do_a=do_args\n \n def do_retval(self,arg):\n  ''\n\n  \n  if'__return__'in self.curframe_locals:\n   self.message(repr(self.curframe_locals['__return__']))\n  else :\n   self.error('Not yet returned!')\n do_rv=do_retval\n \n def _getval(self,arg):\n  try :\n   return eval(arg,self.curframe.f_globals,self.curframe_locals)\n  except :\n   exc_info=sys.exc_info()[:2]\n   self.error(traceback.format_exception_only(*exc_info)[-1].strip())\n   raise\n   \n def _getval_except(self,arg,frame=None ):\n  try :\n   if frame is None :\n    return eval(arg,self.curframe.f_globals,self.curframe_locals)\n   else :\n    return eval(arg,frame.f_globals,frame.f_locals)\n  except :\n   exc_info=sys.exc_info()[:2]\n   err=traceback.format_exception_only(*exc_info)[-1].strip()\n   return _rstr('** raised %s **'%err)\n   \n def do_p(self,arg):\n  ''\n\n  \n  try :\n   self.message(repr(self._getval(arg)))\n  except :\n   pass\n   \n def do_pp(self,arg):\n  ''\n\n  \n  try :\n   self.message(pprint.pformat(self._getval(arg)))\n  except :\n   pass\n   \n complete_print=_complete_expression\n complete_p=_complete_expression\n complete_pp=_complete_expression\n \n def do_list(self,arg):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self.lastcmd='list'\n  last=None\n  if arg and arg !='.':\n   try :\n    if','in arg:\n     first,last=arg.split(',')\n     first=int(first.strip())\n     last=int(last.strip())\n     if last <first:\n     \n      last=first+last\n    else :\n     first=int(arg.strip())\n     first=max(1,first -5)\n   except ValueError:\n    self.error('Error in argument: %r'%arg)\n    return\n  elif self.lineno is None or arg =='.':\n   first=max(1,self.curframe.f_lineno -5)\n  else :\n   first=self.lineno+1\n  if last is None :\n   last=first+10\n  filename=self.curframe.f_code.co_filename\n  breaklist=self.get_file_breaks(filename)\n  try :\n   lines=linecache.getlines(filename,self.curframe.f_globals)\n   self._print_lines(lines[first -1:last],first,breaklist,\n   self.curframe)\n   self.lineno=min(last,len(lines))\n   if len(lines)<last:\n    self.message('[EOF]')\n  except KeyboardInterrupt:\n   pass\n do_l=do_list\n \n def do_longlist(self,arg):\n  ''\n\n  \n  filename=self.curframe.f_code.co_filename\n  breaklist=self.get_file_breaks(filename)\n  try :\n   lines,lineno=getsourcelines(self.curframe)\n  except OSError as err:\n   self.error(err)\n   return\n  self._print_lines(lines,lineno,breaklist,self.curframe)\n do_ll=do_longlist\n \n def do_source(self,arg):\n  ''\n\n  \n  try :\n   obj=self._getval(arg)\n  except :\n   return\n  try :\n   lines,lineno=getsourcelines(obj)\n  except (OSError,TypeError)as err:\n   self.error(err)\n   return\n  self._print_lines(lines,lineno)\n  \n complete_source=_complete_expression\n \n def _print_lines(self,lines,start,breaks=(),frame=None ):\n  ''\n  if frame:\n   current_lineno=frame.f_lineno\n   exc_lineno=self.tb_lineno.get(frame,-1)\n  else :\n   current_lineno=exc_lineno=-1\n  for lineno,line in enumerate(lines,start):\n   s=str(lineno).rjust(3)\n   if len(s)<4:\n    s +=' '\n   if lineno in breaks:\n    s +='B'\n   else :\n    s +=' '\n   if lineno ==current_lineno:\n    s +='->'\n   elif lineno ==exc_lineno:\n    s +='>>'\n   self.message(s+'\\t'+line.rstrip())\n   \n def do_whatis(self,arg):\n  ''\n\n  \n  try :\n   value=self._getval(arg)\n  except :\n  \n   return\n  code=None\n  \n  try :\n   code=value.__code__\n  except Exception:\n   pass\n  if code:\n   self.message('Function %s'%code.co_name)\n   return\n   \n  try :\n   code=value.__func__.__code__\n  except Exception:\n   pass\n  if code:\n   self.message('Method %s'%code.co_name)\n   return\n   \n  if value.__class__ is type:\n   self.message('Class %s.%s'%(value.__module__,value.__name__))\n   return\n   \n  self.message(type(value))\n  \n complete_whatis=_complete_expression\n \n def do_display(self,arg):\n  ''\n\n\n\n\n\n  \n  if not arg:\n   self.message('Currently displaying:')\n   for item in self.displaying.get(self.curframe,{}).items():\n    self.message('%s: %r'%item)\n  else :\n   val=self._getval_except(arg)\n   self.displaying.setdefault(self.curframe,{})[arg]=val\n   self.message('display %s: %r'%(arg,val))\n   \n complete_display=_complete_expression\n \n def do_undisplay(self,arg):\n  ''\n\n\n\n\n  \n  if arg:\n   try :\n    del self.displaying.get(self.curframe,{})[arg]\n   except KeyError:\n    self.error('not displaying %s'%arg)\n  else :\n   self.displaying.pop(self.curframe,None )\n   \n def complete_undisplay(self,text,line,begidx,endidx):\n  return [e for e in self.displaying.get(self.curframe,{})\n  if e.startswith(text)]\n  \n def do_interact(self,arg):\n  ''\n\n\n\n  \n  ns=self.curframe.f_globals.copy()\n  ns.update(self.curframe_locals)\n  code.interact(\"*interactive*\",local=ns)\n  \n def do_alias(self,arg):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  args=arg.split()\n  if len(args)==0:\n   keys=sorted(self.aliases.keys())\n   for alias in keys:\n    self.message(\"%s = %s\"%(alias,self.aliases[alias]))\n   return\n  if args[0]in self.aliases and len(args)==1:\n   self.message(\"%s = %s\"%(args[0],self.aliases[args[0]]))\n  else :\n   self.aliases[args[0]]=' '.join(args[1:])\n   \n def do_unalias(self,arg):\n  ''\n\n  \n  args=arg.split()\n  if len(args)==0:return\n  if args[0]in self.aliases:\n   del self.aliases[args[0]]\n   \n def complete_unalias(self,text,line,begidx,endidx):\n  return [a for a in self.aliases if a.startswith(text)]\n  \n  \n commands_resuming=['do_continue','do_step','do_next','do_return',\n 'do_quit','do_jump']\n \n \n \n \n \n \n \n \n \n def print_stack_trace(self):\n  try :\n   for frame_lineno in self.stack:\n    self.print_stack_entry(frame_lineno)\n  except KeyboardInterrupt:\n   pass\n   \n def print_stack_entry(self,frame_lineno,prompt_prefix=line_prefix):\n  frame,lineno=frame_lineno\n  if frame is self.curframe:\n   prefix='> '\n  else :\n   prefix='  '\n  self.message(prefix+\n  self.format_stack_entry(frame_lineno,prompt_prefix))\n  \n  \n  \n def do_help(self,arg):\n  ''\n\n\n\n\n  \n  if not arg:\n   return cmd.Cmd.do_help(self,arg)\n  try :\n   try :\n    topic=getattr(self,'help_'+arg)\n    return topic()\n   except AttributeError:\n    command=getattr(self,'do_'+arg)\n  except AttributeError:\n   self.error('No help for %r'%arg)\n  else :\n   if sys.flags.optimize >=2:\n    self.error('No help for %r; please do not run Python with -OO '\n    'if you need command help'%arg)\n    return\n   self.message(command.__doc__.rstrip())\n   \n do_h=do_help\n \n def help_exec(self):\n  ''\n\n\n\n\n\n\n\n  \n  self.message((self.help_exec.__doc__ or'').strip())\n  \n def help_pdb(self):\n  help()\n  \n  \n  \n def lookupmodule(self,filename):\n  ''\n\n\n\n  \n  if os.path.isabs(filename)and os.path.exists(filename):\n   return filename\n  f=os.path.join(sys.path[0],filename)\n  if os.path.exists(f)and self.canonic(f)==self.mainpyfile:\n   return f\n  root,ext=os.path.splitext(filename)\n  if ext =='':\n   filename=filename+'.py'\n  if os.path.isabs(filename):\n   return filename\n  for dirname in sys.path:\n   while os.path.islink(dirname):\n    dirname=os.readlink(dirname)\n   fullname=os.path.join(dirname,filename)\n   if os.path.exists(fullname):\n    return fullname\n  return None\n  \n def _runscript(self,filename):\n \n \n \n \n \n  import __main__\n  __main__.__dict__.clear()\n  __main__.__dict__.update({\"__name__\":\"__main__\",\n  \"__file__\":filename,\n  \"__builtins__\":__builtins__,\n  })\n  \n  \n  \n  \n  \n  \n  self._wait_for_mainpyfile=True\n  self.mainpyfile=self.canonic(filename)\n  self._user_requested_quit=False\n  with open(filename,\"rb\")as fp:\n   statement=\"exec(compile(%r, %r, 'exec'))\"%   (fp.read(),self.mainpyfile)\n  self.run(statement)\n  \n  \n  \nif __doc__ is not None :\n\n _help_order=[\n 'help','where','down','up','break','tbreak','clear','disable',\n 'enable','ignore','condition','commands','step','next','until',\n 'jump','return','retval','run','continue','list','longlist',\n 'args','p','pp','whatis','source','display','undisplay',\n 'interact','alias','unalias','debug','quit',\n ]\n \n for _command in _help_order:\n  __doc__ +=getattr(Pdb,'do_'+_command).__doc__.strip()+'\\n\\n'\n __doc__ +=Pdb.help_exec.__doc__\n \n del _help_order,_command\n \n \n \n \ndef run(statement,globals=None ,locals=None ):\n Pdb().run(statement,globals,locals)\n \ndef runeval(expression,globals=None ,locals=None ):\n return Pdb().runeval(expression,globals,locals)\n \ndef runctx(statement,globals,locals):\n\n run(statement,globals,locals)\n \ndef runcall(*args,**kwds):\n return Pdb().runcall(*args,**kwds)\n \ndef set_trace():\n Pdb().set_trace(sys._getframe().f_back)\n \n \n \ndef post_mortem(t=None ):\n\n if t is None :\n \n \n  t=sys.exc_info()[2]\n if t is None :\n  raise ValueError(\"A valid traceback must be passed if no \"\n  \"exception is being handled\")\n  \n p=Pdb()\n p.reset()\n p.interaction(None ,t)\n \ndef pm():\n post_mortem(sys.last_traceback)\n \n \n \n \nTESTCMD='import x; x.main()'\n\ndef test():\n run(TESTCMD)\n \n \ndef help():\n import pydoc\n pydoc.pager(__doc__)\n \n_usage=\"\"\"\\\nusage: pdb.py [-c command] ... pyfile [arg] ...\n\nDebug the Python program given by pyfile.\n\nInitial commands are read from .pdbrc files in your home directory\nand in the current directory, if they exist.  Commands supplied with\n-c are executed after commands from .pdbrc files.\n\nTo let the script run until an exception occurs, use \"-c continue\".\nTo let the script run up to a given line X in the debugged file, use\n\"-c 'until X'\".\"\"\"\n\ndef main():\n import getopt\n \n opts,args=getopt.getopt(sys.argv[1:],'hc:',['--help','--command='])\n \n if not args:\n  print(_usage)\n  sys.exit(2)\n  \n commands=[]\n for opt,optarg in opts:\n  if opt in ['-h','--help']:\n   print(_usage)\n   sys.exit()\n  elif opt in ['-c','--command']:\n   commands.append(optarg)\n   \n mainpyfile=args[0]\n if not os.path.exists(mainpyfile):\n  print('Error:',mainpyfile,'does not exist')\n  sys.exit(1)\n  \n sys.argv[:]=args\n \n \n sys.path[0]=os.path.dirname(mainpyfile)\n \n \n \n \n \n pdb=Pdb()\n pdb.rcLines.extend(commands)\n while True :\n  try :\n   pdb._runscript(mainpyfile)\n   if pdb._user_requested_quit:\n    break\n   print(\"The program finished and will be restarted\")\n  except Restart:\n   print(\"Restarting\",mainpyfile,\"with arguments:\")\n   print(\"\\t\"+\" \".join(args))\n  except SystemExit:\n  \n   print(\"The program exited via sys.exit(). Exit status:\",end=' ')\n   print(sys.exc_info()[1])\n  except :\n   traceback.print_exc()\n   print(\"Uncaught exception. Entering post mortem debugging\")\n   print(\"Running 'cont' or 'step' will restart the program\")\n   t=sys.exc_info()[2]\n   pdb.interaction(None ,t)\n   print(\"Post mortem debugger finished. The \"+mainpyfile+\n   \" will be restarted\")\n   \n   \n   \nif __name__ =='__main__':\n import pdb\n pdb.main()\n"], "multiprocessing.pool": [".py", "\n\n\n\n\n\n\n\n\n__all__=['Pool']\n\n\n\n\n\nimport threading\nimport queue\nimport itertools\nimport collections\nimport time\n\nfrom multiprocessing import Process,cpu_count,TimeoutError\nfrom multiprocessing.util import Finalize,debug\n\n\n\n\n\nRUN=0\nCLOSE=1\nTERMINATE=2\n\n\n\n\n\njob_counter=itertools.count()\n\ndef mapstar(args):\n return list(map(*args))\n \ndef starmapstar(args):\n return list(itertools.starmap(args[0],args[1]))\n \n \n \n \n \nclass MaybeEncodingError(Exception):\n ''\n \n \n def __init__(self,exc,value):\n  self.exc=repr(exc)\n  self.value=repr(value)\n  super(MaybeEncodingError,self).__init__(self.exc,self.value)\n  \n def __str__(self):\n  return\"Error sending result: '%s'. Reason: '%s'\"%(self.value,\n  self.exc)\n  \n def __repr__(self):\n  return\"<MaybeEncodingError: %s>\"%str(self)\n  \n  \ndef worker(inqueue,outqueue,initializer=None ,initargs=(),maxtasks=None ):\n assert maxtasks is None or (type(maxtasks)==int and maxtasks >0)\n put=outqueue.put\n get=inqueue.get\n if hasattr(inqueue,'_writer'):\n  inqueue._writer.close()\n  outqueue._reader.close()\n  \n if initializer is not None :\n  initializer(*initargs)\n  \n completed=0\n while maxtasks is None or (maxtasks and completed <maxtasks):\n  try :\n   task=get()\n  except (EOFError,IOError):\n   debug('worker got EOFError or IOError -- exiting')\n   break\n   \n  if task is None :\n   debug('worker got sentinel -- exiting')\n   break\n   \n  job,i,func,args,kwds=task\n  try :\n   result=(True ,func(*args,**kwds))\n  except Exception as e:\n   result=(False ,e)\n  try :\n   put((job,i,result))\n  except Exception as e:\n   wrapped=MaybeEncodingError(e,result[1])\n   debug(\"Possible encoding error while sending result: %s\"%(\n   wrapped))\n   put((job,i,(False ,wrapped)))\n  completed +=1\n debug('worker exiting after %d tasks'%completed)\n \n \n \n \n \nclass Pool(object):\n ''\n\n \n Process=Process\n \n def __init__(self,processes=None ,initializer=None ,initargs=(),\n maxtasksperchild=None ):\n  self._setup_queues()\n  self._taskqueue=queue.Queue()\n  self._cache={}\n  self._state=RUN\n  self._maxtasksperchild=maxtasksperchild\n  self._initializer=initializer\n  self._initargs=initargs\n  \n  if processes is None :\n   try :\n    processes=cpu_count()\n   except NotImplementedError:\n    processes=1\n  if processes <1:\n   raise ValueError(\"Number of processes must be at least 1\")\n   \n  if initializer is not None and not callable(initializer):\n   raise TypeError('initializer must be a callable')\n   \n  self._processes=processes\n  self._pool=[]\n  self._repopulate_pool()\n  \n  self._worker_handler=threading.Thread(\n  target=Pool._handle_workers,\n  args=(self,)\n  )\n  self._worker_handler.daemon=True\n  self._worker_handler._state=RUN\n  self._worker_handler.start()\n  \n  \n  self._task_handler=threading.Thread(\n  target=Pool._handle_tasks,\n  args=(self._taskqueue,self._quick_put,self._outqueue,self._pool)\n  )\n  self._task_handler.daemon=True\n  self._task_handler._state=RUN\n  self._task_handler.start()\n  \n  self._result_handler=threading.Thread(\n  target=Pool._handle_results,\n  args=(self._outqueue,self._quick_get,self._cache)\n  )\n  self._result_handler.daemon=True\n  self._result_handler._state=RUN\n  self._result_handler.start()\n  \n  self._terminate=Finalize(\n  self,self._terminate_pool,\n  args=(self._taskqueue,self._inqueue,self._outqueue,self._pool,\n  self._worker_handler,self._task_handler,\n  self._result_handler,self._cache),\n  exitpriority=15\n  )\n  \n def _join_exited_workers(self):\n  ''\n\n  \n  cleaned=False\n  for i in reversed(range(len(self._pool))):\n   worker=self._pool[i]\n   if worker.exitcode is not None :\n   \n    debug('cleaning up worker %d'%i)\n    worker.join()\n    cleaned=True\n    del self._pool[i]\n  return cleaned\n  \n def _repopulate_pool(self):\n  ''\n\n  \n  for i in range(self._processes -len(self._pool)):\n   w=self.Process(target=worker,\n   args=(self._inqueue,self._outqueue,\n   self._initializer,\n   self._initargs,self._maxtasksperchild)\n   )\n   self._pool.append(w)\n   w.name=w.name.replace('Process','PoolWorker')\n   w.daemon=True\n   w.start()\n   debug('added worker')\n   \n def _maintain_pool(self):\n  ''\n  \n  if self._join_exited_workers():\n   self._repopulate_pool()\n   \n def _setup_queues(self):\n  from .queues import SimpleQueue\n  self._inqueue=SimpleQueue()\n  self._outqueue=SimpleQueue()\n  self._quick_put=self._inqueue._writer.send\n  self._quick_get=self._outqueue._reader.recv\n  \n def apply(self,func,args=(),kwds={}):\n  ''\n\n  \n  assert self._state ==RUN\n  return self.apply_async(func,args,kwds).get()\n  \n def map(self,func,iterable,chunksize=None ):\n  ''\n\n\n  \n  return self._map_async(func,iterable,mapstar,chunksize).get()\n  \n def starmap(self,func,iterable,chunksize=None ):\n  ''\n\n\n\n  \n  return self._map_async(func,iterable,starmapstar,chunksize).get()\n  \n def starmap_async(self,func,iterable,chunksize=None ,callback=None ,\n error_callback=None ):\n  ''\n\n  \n  return self._map_async(func,iterable,starmapstar,chunksize,\n  callback,error_callback)\n  \n def imap(self,func,iterable,chunksize=1):\n  ''\n\n  \n  if self._state !=RUN:\n   raise ValueError(\"Pool not running\")\n  if chunksize ==1:\n   result=IMapIterator(self._cache)\n   self._taskqueue.put((((result._job,i,func,(x,),{})\n   for i,x in enumerate(iterable)),result._set_length))\n   return result\n  else :\n   assert chunksize >1\n   task_batches=Pool._get_tasks(func,iterable,chunksize)\n   result=IMapIterator(self._cache)\n   self._taskqueue.put((((result._job,i,mapstar,(x,),{})\n   for i,x in enumerate(task_batches)),result._set_length))\n   return (item for chunk in result for item in chunk)\n   \n def imap_unordered(self,func,iterable,chunksize=1):\n  ''\n\n  \n  if self._state !=RUN:\n   raise ValueError(\"Pool not running\")\n  if chunksize ==1:\n   result=IMapUnorderedIterator(self._cache)\n   self._taskqueue.put((((result._job,i,func,(x,),{})\n   for i,x in enumerate(iterable)),result._set_length))\n   return result\n  else :\n   assert chunksize >1\n   task_batches=Pool._get_tasks(func,iterable,chunksize)\n   result=IMapUnorderedIterator(self._cache)\n   self._taskqueue.put((((result._job,i,mapstar,(x,),{})\n   for i,x in enumerate(task_batches)),result._set_length))\n   return (item for chunk in result for item in chunk)\n   \n def apply_async(self,func,args=(),kwds={},callback=None ,\n error_callback=None ):\n  ''\n\n  \n  if self._state !=RUN:\n   raise ValueError(\"Pool not running\")\n  result=ApplyResult(self._cache,callback,error_callback)\n  self._taskqueue.put(([(result._job,None ,func,args,kwds)],None ))\n  return result\n  \n def map_async(self,func,iterable,chunksize=None ,callback=None ,\n error_callback=None ):\n  ''\n\n  \n  return self._map_async(func,iterable,mapstar,chunksize,callback,\n  error_callback)\n  \n def _map_async(self,func,iterable,mapper,chunksize=None ,callback=None ,\n error_callback=None ):\n  ''\n\n  \n  if self._state !=RUN:\n   raise ValueError(\"Pool not running\")\n  if not hasattr(iterable,'__len__'):\n   iterable=list(iterable)\n   \n  if chunksize is None :\n   chunksize,extra=divmod(len(iterable),len(self._pool)*4)\n   if extra:\n    chunksize +=1\n  if len(iterable)==0:\n   chunksize=0\n   \n  task_batches=Pool._get_tasks(func,iterable,chunksize)\n  result=MapResult(self._cache,chunksize,len(iterable),callback,\n  error_callback=error_callback)\n  self._taskqueue.put((((result._job,i,mapper,(x,),{})\n  for i,x in enumerate(task_batches)),None ))\n  return result\n  \n @staticmethod\n def _handle_workers(pool):\n  thread=threading.current_thread()\n  \n  \n  \n  while thread._state ==RUN or (pool._cache and thread._state !=TERMINATE):\n   pool._maintain_pool()\n   time.sleep(0.1)\n   \n  pool._taskqueue.put(None )\n  debug('worker handler exiting')\n  \n @staticmethod\n def _handle_tasks(taskqueue,put,outqueue,pool):\n  thread=threading.current_thread()\n  \n  for taskseq,set_length in iter(taskqueue.get,None ):\n   i=-1\n   for i,task in enumerate(taskseq):\n    if thread._state:\n     debug('task handler found thread._state != RUN')\n     break\n    try :\n     put(task)\n    except IOError:\n     debug('could not put task on queue')\n     break\n   else :\n    if set_length:\n     debug('doing set_length()')\n     set_length(i+1)\n    continue\n   break\n  else :\n   debug('task handler got sentinel')\n   \n   \n  try :\n  \n   debug('task handler sending sentinel to result handler')\n   outqueue.put(None )\n   \n   \n   debug('task handler sending sentinel to workers')\n   for p in pool:\n    put(None )\n  except IOError:\n   debug('task handler got IOError when sending sentinels')\n   \n  debug('task handler exiting')\n  \n @staticmethod\n def _handle_results(outqueue,get,cache):\n  thread=threading.current_thread()\n  \n  while 1:\n   try :\n    task=get()\n   except (IOError,EOFError):\n    debug('result handler got EOFError/IOError -- exiting')\n    return\n    \n   if thread._state:\n    assert thread._state ==TERMINATE\n    debug('result handler found thread._state=TERMINATE')\n    break\n    \n   if task is None :\n    debug('result handler got sentinel')\n    break\n    \n   job,i,obj=task\n   try :\n    cache[job]._set(i,obj)\n   except KeyError:\n    pass\n    \n  while cache and thread._state !=TERMINATE:\n   try :\n    task=get()\n   except (IOError,EOFError):\n    debug('result handler got EOFError/IOError -- exiting')\n    return\n    \n   if task is None :\n    debug('result handler ignoring extra sentinel')\n    continue\n   job,i,obj=task\n   try :\n    cache[job]._set(i,obj)\n   except KeyError:\n    pass\n    \n  if hasattr(outqueue,'_reader'):\n   debug('ensuring that outqueue is not full')\n   \n   \n   \n   try :\n    for i in range(10):\n     if not outqueue._reader.poll():\n      break\n     get()\n   except (IOError,EOFError):\n    pass\n    \n  debug('result handler exiting: len(cache)=%s, thread._state=%s',\n  len(cache),thread._state)\n  \n @staticmethod\n def _get_tasks(func,it,size):\n  it=iter(it)\n  while 1:\n   x=tuple(itertools.islice(it,size))\n   if not x:\n    return\n   yield (func,x)\n   \n def __reduce__(self):\n  raise NotImplementedError(\n  'pool objects cannot be passed between processes or pickled'\n  )\n  \n def close(self):\n  debug('closing pool')\n  if self._state ==RUN:\n   self._state=CLOSE\n   self._worker_handler._state=CLOSE\n   \n def terminate(self):\n  debug('terminating pool')\n  self._state=TERMINATE\n  self._worker_handler._state=TERMINATE\n  self._terminate()\n  \n def join(self):\n  debug('joining pool')\n  assert self._state in (CLOSE,TERMINATE)\n  self._worker_handler.join()\n  self._task_handler.join()\n  self._result_handler.join()\n  for p in self._pool:\n   p.join()\n   \n @staticmethod\n def _help_stuff_finish(inqueue,task_handler,size):\n \n  debug('removing tasks from inqueue until task handler finished')\n  inqueue._rlock.acquire()\n  while task_handler.is_alive()and inqueue._reader.poll():\n   inqueue._reader.recv()\n   time.sleep(0)\n   \n @classmethod\n def _terminate_pool(cls,taskqueue,inqueue,outqueue,pool,\n worker_handler,task_handler,result_handler,cache):\n \n  debug('finalizing pool')\n  \n  worker_handler._state=TERMINATE\n  task_handler._state=TERMINATE\n  \n  debug('helping task handler/workers to finish')\n  cls._help_stuff_finish(inqueue,task_handler,len(pool))\n  \n  assert result_handler.is_alive()or len(cache)==0\n  \n  result_handler._state=TERMINATE\n  outqueue.put(None )\n  \n  \n  \n  debug('joining worker handler')\n  if threading.current_thread()is not worker_handler:\n   worker_handler.join()\n   \n   \n  if pool and hasattr(pool[0],'terminate'):\n   debug('terminating workers')\n   for p in pool:\n    if p.exitcode is None :\n     p.terminate()\n     \n  debug('joining task handler')\n  if threading.current_thread()is not task_handler:\n   task_handler.join()\n   \n  debug('joining result handler')\n  if threading.current_thread()is not result_handler:\n   result_handler.join()\n   \n  if pool and hasattr(pool[0],'terminate'):\n   debug('joining pool workers')\n   for p in pool:\n    if p.is_alive():\n    \n     debug('cleaning up worker %d'%p.pid)\n     p.join()\n     \n def __enter__(self):\n  return self\n  \n def __exit__(self,exc_type,exc_val,exc_tb):\n  self.terminate()\n  \n  \n  \n  \n  \nclass ApplyResult(object):\n\n def __init__(self,cache,callback,error_callback):\n  self._event=threading.Event()\n  self._job=next(job_counter)\n  self._cache=cache\n  self._callback=callback\n  self._error_callback=error_callback\n  cache[self._job]=self\n  \n def ready(self):\n  return self._event.is_set()\n  \n def successful(self):\n  assert self.ready()\n  return self._success\n  \n def wait(self,timeout=None ):\n  self._event.wait(timeout)\n  \n def get(self,timeout=None ):\n  self.wait(timeout)\n  if not self.ready():\n   raise TimeoutError\n  if self._success:\n   return self._value\n  else :\n   raise self._value\n   \n def _set(self,i,obj):\n  self._success,self._value=obj\n  if self._callback and self._success:\n   self._callback(self._value)\n  if self._error_callback and not self._success:\n   self._error_callback(self._value)\n  self._event.set()\n  del self._cache[self._job]\n  \nAsyncResult=ApplyResult\n\n\n\n\n\nclass MapResult(ApplyResult):\n\n def __init__(self,cache,chunksize,length,callback,error_callback):\n  ApplyResult.__init__(self,cache,callback,\n  error_callback=error_callback)\n  self._success=True\n  self._value=[None ]*length\n  self._chunksize=chunksize\n  if chunksize <=0:\n   self._number_left=0\n   self._event.set()\n   del cache[self._job]\n  else :\n   self._number_left=length //chunksize+bool(length %chunksize)\n   \n def _set(self,i,success_result):\n  success,result=success_result\n  if success:\n   self._value[i *self._chunksize:(i+1)*self._chunksize]=result\n   self._number_left -=1\n   if self._number_left ==0:\n    if self._callback:\n     self._callback(self._value)\n    del self._cache[self._job]\n    self._event.set()\n  else :\n   self._success=False\n   self._value=result\n   if self._error_callback:\n    self._error_callback(self._value)\n   del self._cache[self._job]\n   self._event.set()\n   \n   \n   \n   \n   \nclass IMapIterator(object):\n\n def __init__(self,cache):\n  self._cond=threading.Condition(threading.Lock())\n  self._job=next(job_counter)\n  self._cache=cache\n  self._items=collections.deque()\n  self._index=0\n  self._length=None\n  self._unsorted={}\n  cache[self._job]=self\n  \n def __iter__(self):\n  return self\n  \n def next(self,timeout=None ):\n  self._cond.acquire()\n  try :\n   try :\n    item=self._items.popleft()\n   except IndexError:\n    if self._index ==self._length:\n     raise StopIteration\n    self._cond.wait(timeout)\n    try :\n     item=self._items.popleft()\n    except IndexError:\n     if self._index ==self._length:\n      raise StopIteration\n     raise TimeoutError\n  finally :\n   self._cond.release()\n   \n  success,value=item\n  if success:\n   return value\n  raise value\n  \n __next__=next\n \n def _set(self,i,obj):\n  self._cond.acquire()\n  try :\n   if self._index ==i:\n    self._items.append(obj)\n    self._index +=1\n    while self._index in self._unsorted:\n     obj=self._unsorted.pop(self._index)\n     self._items.append(obj)\n     self._index +=1\n    self._cond.notify()\n   else :\n    self._unsorted[i]=obj\n    \n   if self._index ==self._length:\n    del self._cache[self._job]\n  finally :\n   self._cond.release()\n   \n def _set_length(self,length):\n  self._cond.acquire()\n  try :\n   self._length=length\n   if self._index ==self._length:\n    self._cond.notify()\n    del self._cache[self._job]\n  finally :\n   self._cond.release()\n   \n   \n   \n   \n   \nclass IMapUnorderedIterator(IMapIterator):\n\n def _set(self,i,obj):\n  self._cond.acquire()\n  try :\n   self._items.append(obj)\n   self._index +=1\n   self._cond.notify()\n   if self._index ==self._length:\n    del self._cache[self._job]\n  finally :\n   self._cond.release()\n   \n   \n   \n   \n   \nclass ThreadPool(Pool):\n\n from .dummy import Process\n \n def __init__(self,processes=None ,initializer=None ,initargs=()):\n  Pool.__init__(self,processes,initializer,initargs)\n  \n def _setup_queues(self):\n  self._inqueue=queue.Queue()\n  self._outqueue=queue.Queue()\n  self._quick_put=self._inqueue.put\n  self._quick_get=self._outqueue.get\n  \n @staticmethod\n def _help_stuff_finish(inqueue,task_handler,size):\n \n  inqueue.not_empty.acquire()\n  try :\n   inqueue.queue.clear()\n   inqueue.queue.extend([None ]*size)\n   inqueue.not_empty.notify_all()\n  finally :\n   inqueue.not_empty.release()\n"], "crypto_js.rollups.sha512": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,m){var r={},f=r.lib={},g=function(){},l=f.Base={extend:function(a){g.prototype=this;var b=new g;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\np=f.WordArray=l.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=m?b:4*a.length},toString:function(a){return(a||q).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var j=0;j<a;j++)b[c+j>>>2]|=(d[j>>>2]>>>24-8*(j%4)&255)<<24-8*((c+j)%4);else if(65535<d.length)for(j=0;j<a;j+=4)b[c+j>>>2]=d[j>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=l.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],d=0;d<n;d+=4)b.push(4294967296*a.random()|0);return new p.init(b,n)}}),y=r.enc={},q=y.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++){var j=b[c>>>2]>>>24-8*(c%4)&255;d.push((j>>>4).toString(16));d.push((j&15).toString(16))}return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c+=2)d[c>>>3]|=parseInt(a.substr(c,\n2),16)<<24-4*(c%8);return new p.init(d,b/2)}},G=y.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++)d.push(String.fromCharCode(b[c>>>2]>>>24-8*(c%4)&255));return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c++)d[c>>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new p.init(d,b)}},fa=y.Utf8={stringify:function(a){try{return decodeURIComponent(escape(G.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return G.parse(unescape(encodeURIComponent(a)))}},\nh=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new p.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=fa.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,d=b.words,c=b.sigBytes,j=this.blockSize,l=c/(4*j),l=n?a.ceil(l):a.max((l|0)-this._minBufferSize,0);n=l*j;c=a.min(4*n,c);if(n){for(var h=0;h<n;h+=j)this._doProcessBlock(d,h);h=d.splice(0,n);b.sigBytes-=c}return new p.init(h,c)},clone:function(){var a=l.clone.call(this);\na._data=this._data.clone();return a},_minBufferSize:0});f.Hasher=h.extend({cfg:l.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){h.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,d){return(new a.init(d)).finalize(b)}},_createHmacHelper:function(a){return function(b,d){return(new ga.HMAC.init(a,\nd)).finalize(b)}}});var ga=r.algo={};return r}(Math);\n(function(a){var m=CryptoJS,r=m.lib,f=r.Base,g=r.WordArray,m=m.x64={};m.Word=f.extend({init:function(a,p){this.high=a;this.low=p}});m.WordArray=f.extend({init:function(l,p){l=this.words=l||[];this.sigBytes=p!=a?p:8*l.length},toX32:function(){for(var a=this.words,p=a.length,f=[],q=0;q<p;q++){var G=a[q];f.push(G.high);f.push(G.low)}return g.create(f,this.sigBytes)},clone:function(){for(var a=f.clone.call(this),p=a.words=this.words.slice(0),g=p.length,q=0;q<g;q++)p[q]=p[q].clone();return a}})})();\n(function(){function a(){return g.create.apply(g,arguments)}for(var m=CryptoJS,r=m.lib.Hasher,f=m.x64,g=f.Word,l=f.WordArray,f=m.algo,p=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),\na(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,\n2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),\na(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,\n3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],y=[],q=0;80>q;q++)y[q]=a();f=f.SHA512=r.extend({_doReset:function(){this._hash=new l.init([new g.init(1779033703,4089235720),new g.init(3144134277,2227873595),new g.init(1013904242,4271175723),new g.init(2773480762,1595750129),new g.init(1359893119,2917565137),new g.init(2600822924,725511199),new g.init(528734635,4215389547),new g.init(1541459225,327033209)])},_doProcessBlock:function(a,f){for(var h=this._hash.words,\ng=h[0],n=h[1],b=h[2],d=h[3],c=h[4],j=h[5],l=h[6],h=h[7],q=g.high,m=g.low,r=n.high,N=n.low,Z=b.high,O=b.low,$=d.high,P=d.low,aa=c.high,Q=c.low,ba=j.high,R=j.low,ca=l.high,S=l.low,da=h.high,T=h.low,v=q,s=m,H=r,E=N,I=Z,F=O,W=$,J=P,w=aa,t=Q,U=ba,K=R,V=ca,L=S,X=da,M=T,x=0;80>x;x++){var B=y[x];if(16>x)var u=B.high=a[f+2*x]|0,e=B.low=a[f+2*x+1]|0;else{var u=y[x-15],e=u.high,z=u.low,u=(e>>>1|z<<31)^(e>>>8|z<<24)^e>>>7,z=(z>>>1|e<<31)^(z>>>8|e<<24)^(z>>>7|e<<25),D=y[x-2],e=D.high,k=D.low,D=(e>>>19|k<<13)^\n(e<<3|k>>>29)^e>>>6,k=(k>>>19|e<<13)^(k<<3|e>>>29)^(k>>>6|e<<26),e=y[x-7],Y=e.high,C=y[x-16],A=C.high,C=C.low,e=z+e.low,u=u+Y+(e>>>0<z>>>0?1:0),e=e+k,u=u+D+(e>>>0<k>>>0?1:0),e=e+C,u=u+A+(e>>>0<C>>>0?1:0);B.high=u;B.low=e}var Y=w&U^~w&V,C=t&K^~t&L,B=v&H^v&I^H&I,ha=s&E^s&F^E&F,z=(v>>>28|s<<4)^(v<<30|s>>>2)^(v<<25|s>>>7),D=(s>>>28|v<<4)^(s<<30|v>>>2)^(s<<25|v>>>7),k=p[x],ia=k.high,ea=k.low,k=M+((t>>>14|w<<18)^(t>>>18|w<<14)^(t<<23|w>>>9)),A=X+((w>>>14|t<<18)^(w>>>18|t<<14)^(w<<23|t>>>9))+(k>>>0<M>>>\n0?1:0),k=k+C,A=A+Y+(k>>>0<C>>>0?1:0),k=k+ea,A=A+ia+(k>>>0<ea>>>0?1:0),k=k+e,A=A+u+(k>>>0<e>>>0?1:0),e=D+ha,B=z+B+(e>>>0<D>>>0?1:0),X=V,M=L,V=U,L=K,U=w,K=t,t=J+k|0,w=W+A+(t>>>0<J>>>0?1:0)|0,W=I,J=F,I=H,F=E,H=v,E=s,s=k+e|0,v=A+B+(s>>>0<k>>>0?1:0)|0}m=g.low=m+s;g.high=q+v+(m>>>0<s>>>0?1:0);N=n.low=N+E;n.high=r+H+(N>>>0<E>>>0?1:0);O=b.low=O+F;b.high=Z+I+(O>>>0<F>>>0?1:0);P=d.low=P+J;d.high=$+W+(P>>>0<J>>>0?1:0);Q=c.low=Q+t;c.high=aa+w+(Q>>>0<t>>>0?1:0);R=j.low=R+K;j.high=ba+U+(R>>>0<K>>>0?1:0);S=l.low=\nS+L;l.high=ca+V+(S>>>0<L>>>0?1:0);T=h.low=T+M;h.high=da+X+(T>>>0<M>>>0?1:0)},_doFinalize:function(){var a=this._data,f=a.words,h=8*this._nDataBytes,g=8*a.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+128>>>10<<5)+30]=Math.floor(h/4294967296);f[(g+128>>>10<<5)+31]=h;a.sigBytes=4*f.length;this._process();return this._hash.toX32()},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});m.SHA512=r._createHelper(f);m.HmacSHA512=r._createHmacHelper(f)})();\n"], "browser.markdown": [".py", "\n\ntry :\n import _jsre as re\nexcept :\n import re\n \nimport random\nimport time\n\nletters='abcdefghijklmnopqrstuvwxyz'\nletters +=letters.upper()+'0123456789'\n\nclass URL:\n def __init__(self,src):\n  elts=src.split(maxsplit=1)\n  self.href=elts[0]\n  self.alt=''\n  if len(elts)==2:\n   alt=elts[1]\n   if alt[0]=='\"'and alt[-1]=='\"':self.alt=alt[1:-1]\n   elif alt[0]==\"'\"and alt[-1]==\"'\":self.alt=alt[1:-1]\n   elif alt[0]==\"(\"and alt[-1]==\")\":self.alt=alt[1:-1]\n   \nclass CodeBlock:\n def __init__(self,line):\n  self.lines=[line]\n  if line.startswith(\"```\")and len(line)>3:\n   self.info=line[3:]\n  else :\n   self.info=None\n   \n def to_html(self):\n  if self.lines[0].startswith(\"`\"):\n   self.lines.pop(0)\n  res=escape('\\n'.join(self.lines))\n  res=unmark(res)\n  _class=self.info or\"marked\"\n  res='<pre class=\"%s\">%s</pre>\\n'%(_class,res)\n  return res,[]\n  \nclass HtmlBlock:\n\n def __init__(self,src):\n  self.src=src\n  \n def to_html(self):\n  return self.src\n  \nclass Marked:\n def __init__(self,line=''):\n  self.line=line\n  self.children=[]\n  \n def to_html(self):\n  return apply_markdown(self.line)\n  \n  \nrefs={}\nref_pattern=r\"^\\[(.*)\\]:\\s+(.*)\"\n\ndef mark(src):\n\n global refs\n t0=time.time()\n refs={}\n \n \n \n \n \n \n \n \n src=src.replace('\\r\\n','\\n')\n \n \n src=re.sub(r'(.*?)\\n=+\\n','\\n# \\\\1\\n',src)\n src=re.sub(r'(.*?)\\n-+\\n','\\n## \\\\1\\n',src)\n \n lines=src.split('\\n')+['']\n \n i=bq=0\n ul=ol=0\n \n while i <len(lines):\n \n \n  if lines[i].startswith('>'):\n   nb=1\n   while nb <len(lines[i])and lines[i][nb]=='>':\n    nb +=1\n   lines[i]=lines[i][nb:]\n   if nb >bq:\n    lines.insert(i,'<blockquote>'*(nb -bq))\n    i +=1\n    bq=nb\n   elif nb <bq:\n    lines.insert(i,'</blockquote>'*(bq -nb))\n    i +=1\n    bq=nb\n  elif bq >0:\n   lines.insert(i,'</blockquote>'*bq)\n   i +=1\n   bq=0\n   \n   \n  if lines[i].strip()and lines[i].lstrip()[0]in'-+*'  and len(lines[i].lstrip())>1  and lines[i].lstrip()[1]==' '  and (i ==0 or ul or not lines[i -1].strip()):\n  \n   nb=1+len(lines[i])-len(lines[i].lstrip())\n   lines[i]='<li>'+lines[i][nb:]\n   if nb >ul:\n    lines.insert(i,'<ul>'*(nb -ul))\n    i +=1\n   elif nb <ul:\n    lines.insert(i,'</ul>'*(ul -nb))\n    i +=1\n   ul=nb\n  elif ul and not lines[i].strip():\n   if i <len(lines)-1 and lines[i+1].strip()   and not lines[i+1].startswith(' '):\n    nline=lines[i+1].lstrip()\n    if nline[0]in'-+*'and len(nline)>1 and nline[1]==' ':\n     pass\n    else :\n     lines.insert(i,'</ul>'*ul)\n     i +=1\n     ul=0\n     \n     \n  mo=re.search(r'^(\\d+\\.)',lines[i])\n  if mo:\n   if not ol:\n    lines.insert(i,'<ol>')\n    i +=1\n   lines[i]='<li>'+lines[i][len(mo.groups()[0]):]\n   ol=1\n  elif ol and not lines[i].strip()and i <len(lines)-1  and not lines[i+1].startswith(' ')  and not re.search(r'^(\\d+\\.)',lines[i+1]):\n   lines.insert(i,'</ol>')\n   i +=1\n   ol=0\n   \n  i +=1\n  \n if ul:\n  lines.append('</ul>'*ul)\n if ol:\n  lines.append('</ol>'*ol)\n if bq:\n  lines.append('</blockquote>'*bq)\n  \n t1=time.time()\n \n sections=[]\n scripts=[]\n section=Marked()\n \n i=0\n while i <len(lines):\n  line=lines[i]\n  if line.strip()and line.startswith('    '):\n   if isinstance(section,Marked)and section.line:\n    sections.append(section)\n   section=CodeBlock(line[4:])\n   j=i+1\n   while j <len(lines)and lines[j].startswith('    '):\n    section.lines.append(lines[j][4:])\n    j +=1\n   sections.append(section)\n   section=Marked()\n   i=j\n   continue\n   \n  elif line.strip()and line.startswith(\"```\"):\n  \n   if isinstance(section,Marked)and section.line:\n    sections.append(section)\n   section=CodeBlock(line)\n   j=i+1\n   while j <len(lines)and not lines[j].startswith(\"```\"):\n    section.lines.append(lines[j])\n    j +=1\n   sections.append(section)\n   section=Marked()\n   i=j+1\n   continue\n   \n  elif line.lower().startswith('<script'):\n   if isinstance(section,Marked)and section.line:\n    sections.append(section)\n    section=Marked()\n   j=i+1\n   while j <len(lines):\n    if lines[j].lower().startswith('</script>'):\n     scripts.append('\\n'.join(lines[i+1:j]))\n     for k in range(i,j+1):\n      lines[k]=''\n     break\n    j +=1\n   i=j\n   continue\n   \n   \n  elif line.startswith('#'):\n   level=1\n   line=lines[i]\n   while level <len(line)and line[level]=='#'and level <=6:\n    level +=1\n   if not line[level+1:].strip():\n    if level ==1:\n     i +=1\n     continue\n    else :\n     lines[i]='<H%s>%s</H%s>\\n'%(level -1,'#',level -1)\n   else :\n    lines[i]='<H%s>%s</H%s>\\n'%(level,line[level+1:],level)\n    \n  else :\n   mo=re.search(ref_pattern,line)\n   if mo is not None :\n    if isinstance(section,Marked)and section.line:\n     sections.append(section)\n     section=Marked()\n    key=mo.groups()[0]\n    value=URL(mo.groups()[1])\n    refs[key.lower()]=value\n   else :\n    if not line.strip():\n     line='<p></p>'\n    if section.line:\n     section.line +='\\n'\n    section.line +=line\n    \n   i +=1\n t2=time.time()\n \n if isinstance(section,Marked)and section.line:\n  sections.append(section)\n  \n res=''\n for section in sections:\n  mk,_scripts=section.to_html()\n  res +=mk\n  scripts +=_scripts\n  \n return res,scripts\n \ndef escape(czone):\n czone=czone.replace('&','&amp;')\n czone=czone.replace('<','&lt;')\n czone=czone.replace('>','&gt;')\n czone=czone.replace('_','&#95;')\n czone=czone.replace('*','&#42;')\n return czone\n \ndef s_escape(mo):\n\n czone=mo.string[mo.start():mo.end()]\n return escape(czone)\n \ndef unmark(code_zone):\n\n code_zone=code_zone.replace('_','&#95;')\n return code_zone\n \ndef s_unmark(mo):\n\n code_zone=mo.string[mo.start():mo.end()]\n code_zone=code_zone.replace('_','&#95;')\n return code_zone\n \ndef apply_markdown(src):\n\n scripts=[]\n key=None\n \n t0=time.time()\n i=0\n while i <len(src):\n  if src[i]=='[':\n   start_a=i+1\n   while True :\n    end_a=src.find(']',i)\n    if end_a ==-1:\n     break\n    if src[end_a -1]=='\\\\':\n     i=end_a+1\n    else :\n     break\n   if end_a >-1 and src[start_a:end_a].find('\\n')==-1:\n    link=src[start_a:end_a]\n    rest=src[end_a+1:].lstrip()\n    if rest and rest[0]=='(':\n     j=0\n     while True :\n      end_href=rest.find(')',j)\n      if end_href ==-1:\n       break\n      if rest[end_href -1]=='\\\\':\n       j=end_href+1\n      else :\n       break\n     if end_href >-1 and rest[:end_href].find('\\n')==-1:\n      tag='<a href=\"'+rest[1:end_href]+'\">'+link+'</a>'\n      src=src[:start_a -1]+tag+rest[end_href+1:]\n      i=start_a+len(tag)\n    elif rest and rest[0]=='[':\n     j=0\n     while True :\n      end_key=rest.find(']',j)\n      if end_key ==-1:\n       break\n      if rest[end_key -1]=='\\\\':\n       j=end_key+1\n      else :\n       break\n     if end_key >-1 and rest[:end_key].find('\\n')==-1:\n      if not key:\n       key=link\n      if key.lower()not in refs:\n       raise KeyError('unknown reference %s'%key)\n      url=refs[key.lower()]\n      tag='<a href=\"'+url+'\">'+link+'</a>'\n      src=src[:start_a -1]+tag+rest[end_key+1:]\n      i=start_a+len(tag)\n      \n  i +=1\n  \n t1=time.time()\n \n \n \n \n \n rstr=''.join(random.choice(letters)for i in range(16))\n \n i=0\n state=None\n start=-1\n data=''\n tags=[]\n while i <len(src):\n  if src[i]=='<':\n   j=i+1\n   while j <len(src):\n    if src[j]=='\"'or src[j]==\"'\":\n     if state ==src[j]and src[j -1]!='\\\\':\n      state=None\n      j=start+len(data)+1\n      data=''\n     elif state ==None :\n      state=src[j]\n      start=j\n     else :\n      data +=src[j]\n    elif src[j]=='>'and state is None :\n     tags.append(src[i:j+1])\n     src=src[:i]+rstr+src[j+1:]\n     i +=len(rstr)\n     break\n    elif state =='\"'or state ==\"'\":\n     data +=src[j]\n    elif src[j]=='\\n':\n    \n    \n     src=src[:i]+'&lt;'+src[i+1:]\n     j=i+4\n     break\n    j +=1\n  elif src[i]=='`'and i >0 and src[i -1]!='\\\\':\n  \n   j=i+1\n   while j <len(src):\n    if src[j]=='`'and src[j -1]!='\\\\':\n     break\n    j +=1\n   i=j\n  i +=1\n  \n t2=time.time()\n \n \n \n code_pattern=r'\\`(.*?)\\`'\n src=re.sub(code_pattern,s_escape,src)\n \n \n src=src.replace(r'\\\\`','&#96;')\n src=src.replace(r'\\_','&#95;')\n src=src.replace(r'\\*','&#42;')\n \n \n strong_patterns=[('STRONG',r'\\*\\*(.*?)\\*\\*'),('B',r'__(.*?)__')]\n for tag,strong_pattern in strong_patterns:\n  src=re.sub(strong_pattern,r'<%s>\\1</%s>'%(tag,tag),src)\n  \n em_patterns=[('EM',r'\\*(.*?)\\*'),('I',r'\\_(.*?)\\_')]\n for tag,em_pattern in em_patterns:\n  src=re.sub(em_pattern,r'<%s>\\1</%s>'%(tag,tag),src)\n  \n  \n code_pattern=r'\\`(.*?)\\`'\n src=re.sub(code_pattern,r'<code>\\1</code>',src)\n \n \n while True :\n  pos=src.rfind(rstr)\n  if pos ==-1:\n   break\n  repl=tags.pop()\n  src=src[:pos]+repl+src[pos+len(rstr):]\n  \n src='<p>'+src+'</p>'\n \n t3=time.time()\n \n \n return src,scripts\n"], "encodings.koi8_r": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='koi8-r',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u2500'\n'\\u2502'\n'\\u250c'\n'\\u2510'\n'\\u2514'\n'\\u2518'\n'\\u251c'\n'\\u2524'\n'\\u252c'\n'\\u2534'\n'\\u253c'\n'\\u2580'\n'\\u2584'\n'\\u2588'\n'\\u258c'\n'\\u2590'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2320'\n'\\u25a0'\n'\\u2219'\n'\\u221a'\n'\\u2248'\n'\\u2264'\n'\\u2265'\n'\\xa0'\n'\\u2321'\n'\\xb0'\n'\\xb2'\n'\\xb7'\n'\\xf7'\n'\\u2550'\n'\\u2551'\n'\\u2552'\n'\\u0451'\n'\\u2553'\n'\\u2554'\n'\\u2555'\n'\\u2556'\n'\\u2557'\n'\\u2558'\n'\\u2559'\n'\\u255a'\n'\\u255b'\n'\\u255c'\n'\\u255d'\n'\\u255e'\n'\\u255f'\n'\\u2560'\n'\\u2561'\n'\\u0401'\n'\\u2562'\n'\\u2563'\n'\\u2564'\n'\\u2565'\n'\\u2566'\n'\\u2567'\n'\\u2568'\n'\\u2569'\n'\\u256a'\n'\\u256b'\n'\\u256c'\n'\\xa9'\n'\\u044e'\n'\\u0430'\n'\\u0431'\n'\\u0446'\n'\\u0434'\n'\\u0435'\n'\\u0444'\n'\\u0433'\n'\\u0445'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u044f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0436'\n'\\u0432'\n'\\u044c'\n'\\u044b'\n'\\u0437'\n'\\u0448'\n'\\u044d'\n'\\u0449'\n'\\u0447'\n'\\u044a'\n'\\u042e'\n'\\u0410'\n'\\u0411'\n'\\u0426'\n'\\u0414'\n'\\u0415'\n'\\u0424'\n'\\u0413'\n'\\u0425'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u042f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0416'\n'\\u0412'\n'\\u042c'\n'\\u042b'\n'\\u0417'\n'\\u0428'\n'\\u042d'\n'\\u0429'\n'\\u0427'\n'\\u042a'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_posixsubprocess": [".js", "var $module=(function($B){\n\n    return {\n       cloexec_pipe: function() {}   // fixme\n    }\n})(__BRYTHON__)\n"], "platform": [".py", "#!/usr/bin/env python3\n\n\"\"\" This module tries to retrieve as much platform-identifying data as\n    possible. It makes this information available via function APIs.\n\n    If called from the command line, it prints the platform\n    information concatenated as single string to stdout. The output\n    format is useable as part of a filename.\n\n\"\"\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__copyright__=\"\"\"\n    Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n    Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:info@egenix.com\n\n    Permission to use, copy, modify, and distribute this software and its\n    documentation for any purpose and without fee or royalty is hereby granted,\n    provided that the above copyright notice appear in all copies and that\n    both that copyright notice and this permission notice appear in\n    supporting documentation or portions thereof, including modifications,\n    that you make.\n\n    EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO\n    THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n    FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,\n    INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING\n    FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,\n    NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION\n    WITH THE USE OR PERFORMANCE OF THIS SOFTWARE !\n\n\"\"\"\n\n__version__='1.0.7'\n\nimport collections\nimport sys,os,re,subprocess\n\n\n\n\ntry :\n DEV_NULL=os.devnull\nexcept AttributeError:\n\n\n if sys.platform in ('dos','win32','win16','os2'):\n \n  DEV_NULL='NUL'\n else :\n \n  DEV_NULL='/dev/null'\n  \n  \n  \n_libc_search=re.compile(b'(__libc_init)'\nb'|'\nb'(GLIBC_([0-9.]+))'\nb'|'\nbr'(libc(_\\w+)?\\.so(?:\\.(\\d[0-9.]*))?)',re.ASCII)\n\ndef libc_ver(executable=sys.executable,lib='',version='',\n\nchunksize=16384):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if hasattr(os.path,'realpath'):\n \n \n \n  executable=os.path.realpath(executable)\n f=open(executable,'rb')\n binary=f.read(chunksize)\n pos=0\n while 1:\n  if b'libc'in binary or b'GLIBC'in binary:\n   m=_libc_search.search(binary,pos)\n  else :\n   m=None\n  if not m:\n   binary=f.read(chunksize)\n   if not binary:\n    break\n   pos=0\n   continue\n  libcinit,glibc,glibcversion,so,threads,soversion=[\n  s.decode('latin1')if s is not None else s\n  for s in m.groups()]\n  if libcinit and not lib:\n   lib='libc'\n  elif glibc:\n   if lib !='glibc':\n    lib='glibc'\n    version=glibcversion\n   elif glibcversion >version:\n    version=glibcversion\n  elif so:\n   if lib !='glibc':\n    lib='libc'\n    if soversion and soversion >version:\n     version=soversion\n    if threads and version[-len(threads):]!=threads:\n     version=version+threads\n  pos=m.end()\n f.close()\n return lib,version\n \ndef _dist_try_harder(distname,version,id):\n\n ''\n\n\n\n\n\n \n if os.path.exists('/var/adm/inst-log/info'):\n \n  distname='SuSE'\n  for line in open('/var/adm/inst-log/info'):\n   tv=line.split()\n   if len(tv)==2:\n    tag,value=tv\n   else :\n    continue\n   if tag =='MIN_DIST_VERSION':\n    version=value.strip()\n   elif tag =='DIST_IDENT':\n    values=value.split('-')\n    id=values[2]\n  return distname,version,id\n  \n if os.path.exists('/etc/.installed'):\n \n  for line in open('/etc/.installed'):\n   pkg=line.split('-')\n   if len(pkg)>=2 and pkg[0]=='OpenLinux':\n   \n   \n    return'OpenLinux',pkg[1],id\n    \n if os.path.isdir('/usr/lib/setup'):\n \n  verfiles=os.listdir('/usr/lib/setup')\n  for n in range(len(verfiles)-1,-1,-1):\n   if verfiles[n][:14]!='slack-version-':\n    del verfiles[n]\n  if verfiles:\n   verfiles.sort()\n   distname='slackware'\n   version=verfiles[-1][14:]\n   return distname,version,id\n   \n return distname,version,id\n \n_release_filename=re.compile(r'(\\w+)[-_](release|version)',re.ASCII)\n_lsb_release_version=re.compile(r'(.+)'\n' release '\n'([\\d.]+)'\n'[^(]*(?:\\((.+)\\))?',re.ASCII)\n_release_version=re.compile(r'([^0-9]+)'\n'(?: release )?'\n'([\\d.]+)'\n'[^(]*(?:\\((.+)\\))?',re.ASCII)\n\n\n\n\n\n\n_supported_dists=(\n'SuSE','debian','fedora','redhat','centos',\n'mandrake','mandriva','rocks','slackware','yellowdog','gentoo',\n'UnitedLinux','turbolinux','arch','mageia')\n\ndef _parse_release_file(firstline):\n\n\n\n\n version=''\n id=''\n \n \n m=_lsb_release_version.match(firstline)\n if m is not None :\n \n  return tuple(m.groups())\n  \n  \n m=_release_version.match(firstline)\n if m is not None :\n  return tuple(m.groups())\n  \n  \n l=firstline.strip().split()\n if l:\n  version=l[0]\n  if len(l)>1:\n   id=l[1]\n return'',version,id\n \ndef linux_distribution(distname='',version='',id='',\n\nsupported_dists=_supported_dists,\nfull_distribution_name=1):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n  etc=os.listdir('/etc')\n except os.error:\n \n  return distname,version,id\n etc.sort()\n for file in etc:\n  m=_release_filename.match(file)\n  if m is not None :\n   _distname,dummy=m.groups()\n   if _distname in supported_dists:\n    distname=_distname\n    break\n else :\n  return _dist_try_harder(distname,version,id)\n  \n  \n with open('/etc/'+file,'r')as f:\n  firstline=f.readline()\n _distname,_version,_id=_parse_release_file(firstline)\n \n if _distname and full_distribution_name:\n  distname=_distname\n if _version:\n  version=_version\n if _id:\n  id=_id\n return distname,version,id\n \n \n \ndef dist(distname='',version='',id='',\n\nsupported_dists=_supported_dists):\n\n ''\n\n\n\n\n\n\n\n\n \n return linux_distribution(distname,version,id,\n supported_dists=supported_dists,\n full_distribution_name=0)\n \ndef popen(cmd,mode='r',bufsize=-1):\n\n ''\n \n import warnings\n warnings.warn('use os.popen instead',DeprecationWarning,stacklevel=2)\n return os.popen(cmd,mode,bufsize)\n \ndef _norm_version(version,build=''):\n\n ''\n\n \n l=version.split('.')\n if build:\n  l.append(build)\n try :\n  ints=map(int,l)\n except ValueError:\n  strings=l\n else :\n  strings=list(map(str,ints))\n version='.'.join(strings[:3])\n return version\n \n_ver_output=re.compile(r'(?:([\\w ]+) ([\\w.]+) '\n'.*'\n'\\[.* ([\\d.]+)\\])')\n\n\n\n\n\n\n\n\n\n\ndef _syscmd_ver(system='',release='',version='',\n\nsupported_platforms=('win32','win16','dos','os2')):\n\n ''\n\n\n\n\n\n\n\n\n \n if sys.platform not in supported_platforms:\n  return system,release,version\n  \n  \n for cmd in ('ver','command /c ver','cmd /c ver'):\n  try :\n   pipe=popen(cmd)\n   info=pipe.read()\n   if pipe.close():\n    raise os.error('command failed')\n    \n    \n  except os.error as why:\n  \n   continue\n  except IOError as why:\n  \n   continue\n  else :\n   break\n else :\n  return system,release,version\n  \n  \n info=info.strip()\n m=_ver_output.match(info)\n if m is not None :\n  system,release,version=m.groups()\n  \n  if release[-1]=='.':\n   release=release[:-1]\n  if version[-1]=='.':\n   version=version[:-1]\n   \n   \n  version=_norm_version(version)\n return system,release,version\n \ndef _win32_getvalue(key,name,default=''):\n\n ''\n\n\n\n \n try :\n \n  from win32api import RegQueryValueEx\n except ImportError:\n \n  import winreg\n  RegQueryValueEx=winreg.QueryValueEx\n try :\n  return RegQueryValueEx(key,name)\n except :\n  return default\n  \ndef win32_ver(release='',version='',csd='',ptype=''):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n try :\n  import win32api\n  from win32api import RegQueryValueEx,RegOpenKeyEx,  RegCloseKey,GetVersionEx\n  from win32con import HKEY_LOCAL_MACHINE,VER_PLATFORM_WIN32_NT,  VER_PLATFORM_WIN32_WINDOWS,VER_NT_WORKSTATION\n except ImportError:\n \n  try :\n   sys.getwindowsversion\n  except AttributeError:\n  \n   return release,version,csd,ptype\n  else :\n  \n  \n   import winreg\n   GetVersionEx=sys.getwindowsversion\n   RegQueryValueEx=winreg.QueryValueEx\n   RegOpenKeyEx=winreg.OpenKeyEx\n   RegCloseKey=winreg.CloseKey\n   HKEY_LOCAL_MACHINE=winreg.HKEY_LOCAL_MACHINE\n   VER_PLATFORM_WIN32_WINDOWS=1\n   VER_PLATFORM_WIN32_NT=2\n   VER_NT_WORKSTATION=1\n   VER_NT_SERVER=3\n   REG_SZ=1\n   \n   \n winver=GetVersionEx()\n maj,min,buildno,plat,csd=winver\n version='%i.%i.%i'%(maj,min,buildno&0xFFFF)\n if hasattr(winver,\"service_pack\"):\n  if winver.service_pack !=\"\":\n   csd='SP%s'%winver.service_pack_major\n else :\n  if csd[:13]=='Service Pack ':\n   csd='SP'+csd[13:]\n   \n if plat ==VER_PLATFORM_WIN32_WINDOWS:\n  regkey='SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion'\n  \n  if maj ==4:\n   if min ==0:\n    release='95'\n   elif min ==10:\n    release='98'\n   elif min ==90:\n    release='Me'\n   else :\n    release='postMe'\n  elif maj ==5:\n   release='2000'\n   \n elif plat ==VER_PLATFORM_WIN32_NT:\n  regkey='SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion'\n  if maj <=4:\n   release='NT'\n  elif maj ==5:\n   if min ==0:\n    release='2000'\n   elif min ==1:\n    release='XP'\n   elif min ==2:\n    release='2003Server'\n   else :\n    release='post2003'\n  elif maj ==6:\n   if hasattr(winver,\"product_type\"):\n    product_type=winver.product_type\n   else :\n    product_type=VER_NT_WORKSTATION\n    \n    \n    \n    try :\n     key=RegOpenKeyEx(HKEY_LOCAL_MACHINE,regkey)\n     name,type=RegQueryValueEx(key,\"ProductName\")\n     \n     if type ==REG_SZ and name.find(\"Server\")!=-1:\n      product_type=VER_NT_SERVER\n    except WindowsError:\n    \n     pass\n     \n   if min ==0:\n    if product_type ==VER_NT_WORKSTATION:\n     release='Vista'\n    else :\n     release='2008Server'\n   elif min ==1:\n    if product_type ==VER_NT_WORKSTATION:\n     release='7'\n    else :\n     release='2008ServerR2'\n   elif min ==2:\n    if product_type ==VER_NT_WORKSTATION:\n     release='8'\n    else :\n     release='2012Server'\n   else :\n    release='post2012Server'\n    \n else :\n  if not release:\n  \n   release='%i.%i'%(maj,min)\n  return release,version,csd,ptype\n  \n  \n try :\n  keyCurVer=RegOpenKeyEx(HKEY_LOCAL_MACHINE,regkey)\n  \n  RegQueryValueEx(keyCurVer,'SystemRoot')\n except :\n  return release,version,csd,ptype\n  \n  \n  \n  \n  \n  \n  \n build=_win32_getvalue(keyCurVer,\n 'CurrentBuildNumber',\n ('',1))[0]\n ptype=_win32_getvalue(keyCurVer,\n 'CurrentType',\n (ptype,1))[0]\n \n \n version=_norm_version(version,build)\n \n \n RegCloseKey(keyCurVer)\n return release,version,csd,ptype\n \ndef _mac_ver_lookup(selectors,default=None ):\n\n from _gestalt import gestalt\n l=[]\n append=l.append\n for selector in selectors:\n  try :\n   append(gestalt(selector))\n  except (RuntimeError,OSError):\n   append(default)\n return l\n \ndef _bcd2str(bcd):\n\n return hex(bcd)[2:]\n \ndef _mac_ver_gestalt():\n ''\n\n\n\n\n\n \n \n try :\n  import _gestalt\n except ImportError:\n  return None\n  \n sysv,sysa=_mac_ver_lookup(('sysv','sysa'))\n \n if sysv:\n  major=(sysv&0xFF00)>>8\n  minor=(sysv&0x00F0)>>4\n  patch=(sysv&0x000F)\n  \n  if (major,minor)>=(10,4):\n  \n  \n  \n  \n  \n   major,minor,patch=_mac_ver_lookup(('sys1','sys2','sys3'))\n   release='%i.%i.%i'%(major,minor,patch)\n  else :\n   release='%s.%i.%i'%(_bcd2str(major),minor,patch)\n   \n if sysa:\n  machine={0x1:'68k',\n  0x2:'PowerPC',\n  0xa:'i386'}.get(sysa,'')\n  \n versioninfo=('','','')\n return release,versioninfo,machine\n \ndef _mac_ver_xml():\n fn='/System/Library/CoreServices/SystemVersion.plist'\n if not os.path.exists(fn):\n  return None\n  \n try :\n  import plistlib\n except ImportError:\n  return None\n  \n pl=plistlib.readPlist(fn)\n release=pl['ProductVersion']\n versioninfo=('','','')\n machine=os.uname().machine\n if machine in ('ppc','Power Macintosh'):\n \n  machine='PowerPC'\n  \n return release,versioninfo,machine\n \n \ndef mac_ver(release='',versioninfo=('','',''),machine=''):\n\n ''\n\n\n\n\n\n \n \n \n \n info=_mac_ver_xml()\n if info is not None :\n  return info\n  \n  \n  \n info=_mac_ver_gestalt()\n if info is not None :\n  return info\n  \n  \n return release,versioninfo,machine\n \ndef _java_getprop(name,default):\n\n from java.lang import System\n try :\n  value=System.getProperty(name)\n  if value is None :\n   return default\n  return value\n except AttributeError:\n  return default\n  \ndef java_ver(release='',vendor='',vminfo=('','',''),osinfo=('','','')):\n\n ''\n\n\n\n\n\n\n\n\n \n \n try :\n  import java.lang\n except ImportError:\n  return release,vendor,vminfo,osinfo\n  \n vendor=_java_getprop('java.vendor',vendor)\n release=_java_getprop('java.version',release)\n vm_name,vm_release,vm_vendor=vminfo\n vm_name=_java_getprop('java.vm.name',vm_name)\n vm_vendor=_java_getprop('java.vm.vendor',vm_vendor)\n vm_release=_java_getprop('java.vm.version',vm_release)\n vminfo=vm_name,vm_release,vm_vendor\n os_name,os_version,os_arch=osinfo\n os_arch=_java_getprop('java.os.arch',os_arch)\n os_name=_java_getprop('java.os.name',os_name)\n os_version=_java_getprop('java.os.version',os_version)\n osinfo=os_name,os_version,os_arch\n \n return release,vendor,vminfo,osinfo\n \n \n \ndef system_alias(system,release,version):\n\n ''\n\n\n\n\n\n \n if system =='Rhapsody':\n \n \n  return'MacOS X Server',system+release,version\n  \n elif system =='SunOS':\n \n  if release <'5':\n  \n   return system,release,version\n   \n  l=release.split('.')\n  if l:\n   try :\n    major=int(l[0])\n   except ValueError:\n    pass\n   else :\n    major=major -3\n    l[0]=str(major)\n    release='.'.join(l)\n  if release <'6':\n   system='Solaris'\n  else :\n  \n   system='Solaris'\n   \n elif system =='IRIX64':\n \n \n \n  system='IRIX'\n  if version:\n   version=version+' (64bit)'\n  else :\n   version='64bit'\n   \n elif system in ('win32','win16'):\n \n  system='Windows'\n  \n return system,release,version\n \n \n \ndef _platform(*args):\n\n ''\n\n \n \n platform='-'.join(x.strip()for x in filter(len,args))\n \n \n platform=platform.replace(' ','_')\n platform=platform.replace('/','-')\n platform=platform.replace('\\\\','-')\n platform=platform.replace(':','-')\n platform=platform.replace(';','-')\n platform=platform.replace('\"','-')\n platform=platform.replace('(','-')\n platform=platform.replace(')','-')\n \n \n platform=platform.replace('unknown','')\n \n \n while 1:\n  cleaned=platform.replace('--','-')\n  if cleaned ==platform:\n   break\n  platform=cleaned\n while platform[-1]=='-':\n  platform=platform[:-1]\n  \n return platform\n \ndef _node(default=''):\n\n ''\n \n try :\n  import socket\n except ImportError:\n \n  return default\n try :\n  return socket.gethostname()\n except socket.error:\n \n  return default\n  \ndef _follow_symlinks(filepath):\n\n ''\n\n \n filepath=os.path.abspath(filepath)\n while os.path.islink(filepath):\n  filepath=os.path.normpath(\n  os.path.join(os.path.dirname(filepath),os.readlink(filepath)))\n return filepath\n \ndef _syscmd_uname(option,default=''):\n\n ''\n \n if sys.platform in ('dos','win32','win16','os2'):\n \n  return default\n try :\n  f=os.popen('uname %s 2> %s'%(option,DEV_NULL))\n except (AttributeError,os.error):\n  return default\n output=f.read().strip()\n rc=f.close()\n if not output or rc:\n  return default\n else :\n  return output\n  \ndef _syscmd_file(target,default=''):\n\n ''\n\n\n\n\n\n \n if sys.platform in ('dos','win32','win16','os2'):\n \n  return default\n target=_follow_symlinks(target)\n try :\n  proc=subprocess.Popen(['file',target],\n  stdout=subprocess.PIPE,stderr=subprocess.STDOUT)\n  \n except (AttributeError,os.error):\n  return default\n output=proc.communicate()[0].decode('latin-1')\n rc=proc.wait()\n if not output or rc:\n  return default\n else :\n  return output\n  \n  \n  \n  \n  \n_default_architecture={\n'win32':('','WindowsPE'),\n'win16':('','Windows'),\n'dos':('','MSDOS'),\n}\n\ndef architecture(executable=sys.executable,bits='',linkage=''):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n if not bits:\n  import struct\n  try :\n   size=struct.calcsize('P')\n  except struct.error:\n  \n   size=struct.calcsize('l')\n  bits=str(size *8)+'bit'\n  \n  \n if executable:\n  fileout=_syscmd_file(executable,'')\n else :\n  fileout=''\n  \n if not fileout and executable ==sys.executable:\n \n \n  if sys.platform in _default_architecture:\n   b,l=_default_architecture[sys.platform]\n   if b:\n    bits=b\n   if l:\n    linkage=l\n  return bits,linkage\n  \n if'executable'not in fileout:\n \n  return bits,linkage\n  \n  \n if'32-bit'in fileout:\n  bits='32bit'\n elif'N32'in fileout:\n \n  bits='n32bit'\n elif'64-bit'in fileout:\n  bits='64bit'\n  \n  \n if'ELF'in fileout:\n  linkage='ELF'\n elif'PE'in fileout:\n \n  if'Windows'in fileout:\n   linkage='WindowsPE'\n  else :\n   linkage='PE'\n elif'COFF'in fileout:\n  linkage='COFF'\n elif'MS-DOS'in fileout:\n  linkage='MSDOS'\n else :\n \n  pass\n  \n return bits,linkage\n \n \n \nuname_result=collections.namedtuple(\"uname_result\",\n\"system node release version machine processor\")\n\n_uname_cache=None\n\ndef uname():\n\n ''\n\n\n\n\n\n\n\n\n \n global _uname_cache\n no_os_uname=0\n \n if _uname_cache is not None :\n  return _uname_cache\n  \n processor=''\n \n \n try :\n  system,node,release,version,machine=os.uname()\n except AttributeError:\n  no_os_uname=1\n  \n if no_os_uname or not list(filter(None ,(system,node,release,version,machine))):\n \n \n  if no_os_uname:\n   system=sys.platform\n   release=''\n   version=''\n   node=_node()\n   machine=''\n   \n  use_syscmd_ver=1\n  \n  \n  if system =='win32':\n   release,version,csd,ptype=win32_ver()\n   if release and version:\n    use_syscmd_ver=0\n    \n    \n    \n    \n   if not machine:\n   \n    if\"PROCESSOR_ARCHITEW6432\"in os.environ:\n     machine=os.environ.get(\"PROCESSOR_ARCHITEW6432\",'')\n    else :\n     machine=os.environ.get('PROCESSOR_ARCHITECTURE','')\n   if not processor:\n    processor=os.environ.get('PROCESSOR_IDENTIFIER',machine)\n    \n    \n    \n  if use_syscmd_ver:\n   system,release,version=_syscmd_ver(system)\n   \n   \n   if system =='Microsoft Windows':\n    system='Windows'\n   elif system =='Microsoft'and release =='Windows':\n   \n   \n   \n   \n    system='Windows'\n    if'6.0'==version[:3]:\n     release='Vista'\n    else :\n     release=''\n     \n     \n     \n  if system in ('win32','win16'):\n   if not version:\n    if system =='win32':\n     version='32bit'\n    else :\n     version='16bit'\n   system='Windows'\n   \n  elif system[:4]=='java':\n   release,vendor,vminfo,osinfo=java_ver()\n   system='Java'\n   version=', '.join(vminfo)\n   if not version:\n    version=vendor\n    \n    \n if system =='OpenVMS':\n \n  if not release or release =='0':\n   release=version\n   version=''\n   \n  try :\n   import vms_lib\n  except ImportError:\n   pass\n  else :\n   csid,cpu_number=vms_lib.getsyi('SYI$_CPU',0)\n   if (cpu_number >=128):\n    processor='Alpha'\n   else :\n    processor='VAX'\n if not processor:\n \n  processor=_syscmd_uname('-p','')\n  \n  \n if system =='unknown':\n  system=''\n if node =='unknown':\n  node=''\n if release =='unknown':\n  release=''\n if version =='unknown':\n  version=''\n if machine =='unknown':\n  machine=''\n if processor =='unknown':\n  processor=''\n  \n  \n if system =='Microsoft'and release =='Windows':\n  system='Windows'\n  release='Vista'\n  \n _uname_cache=uname_result(system,node,release,version,machine,processor)\n return _uname_cache\n \n \n \ndef system():\n\n ''\n\n\n\n \n return uname().system\n \ndef node():\n\n ''\n\n\n\n\n \n return uname().node\n \ndef release():\n\n ''\n\n\n\n \n return uname().release\n \ndef version():\n\n ''\n\n\n\n \n return uname().version\n \ndef machine():\n\n ''\n\n\n\n \n return uname().machine\n \ndef processor():\n\n ''\n\n\n\n\n\n\n \n return uname().processor\n \n \n \n_sys_version_parser=re.compile(\nr'([\\w.+]+)\\s*'\n'\\(#?([^,]+),\\s*([\\w ]+),\\s*([\\w :]+)\\)\\s*'\n'\\[([^\\]]+)\\]?',re.ASCII)\n\n_ironpython_sys_version_parser=re.compile(\nr'IronPython\\s*'\n'([\\d\\.]+)'\n'(?: \\(([\\d\\.]+)\\))?'\n' on (.NET [\\d\\.]+)',re.ASCII)\n\n\n_ironpython26_sys_version_parser=re.compile(\nr'([\\d.]+)\\s*'\n'\\(IronPython\\s*'\n'[\\d.]+\\s*'\n'\\(([\\d.]+)\\) on ([\\w.]+ [\\d.]+(?: \\(\\d+-bit\\))?)\\)'\n)\n\n_pypy_sys_version_parser=re.compile(\nr'([\\w.+]+)\\s*'\n'\\(#?([^,]+),\\s*([\\w ]+),\\s*([\\w :]+)\\)\\s*'\n'\\[PyPy [^\\]]+\\]?')\n\n_sys_version_cache={}\n\ndef _sys_version(sys_version=None ):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if sys_version is None :\n  sys_version=sys.version\n  \n  \n result=_sys_version_cache.get(sys_version,None )\n if result is not None :\n  return result\n  \n  \n  \n if'Brython'in sys_version:\n \n  name='Brython'\n  _parser=re.compile(\"^(\\d+\\.\\d+\\.\\d+)[^[]+\\[(.*)\\]\")\n  \n  match=_parser.match(sys_version)\n  \n  if match is None :\n   raise ValueError(\n   'failed to parse Brython sys.version: %s'%\n   repr(sys_version))\n   \n   \n  version,compiler=match.groups()\n  alt_version=''\n  buildno=''\n  builddate=''\n  \n elif'IronPython'in sys_version:\n \n  name='IronPython'\n  if sys_version.startswith('IronPython'):\n   match=_ironpython_sys_version_parser.match(sys_version)\n  else :\n   match=_ironpython26_sys_version_parser.match(sys_version)\n   \n  if match is None :\n   raise ValueError(\n   'failed to parse IronPython sys.version: %s'%\n   repr(sys_version))\n   \n  version,alt_version,compiler=match.groups()\n  buildno=''\n  builddate=''\n  \n elif sys.platform.startswith('java'):\n \n  name='Jython'\n  match=_sys_version_parser.match(sys_version)\n  if match is None :\n   raise ValueError(\n   'failed to parse Jython sys.version: %s'%\n   repr(sys_version))\n  version,buildno,builddate,buildtime,_=match.groups()\n  compiler=sys.platform\n  \n elif\"PyPy\"in sys_version:\n \n  name=\"PyPy\"\n  match=_pypy_sys_version_parser.match(sys_version)\n  if match is None :\n   raise ValueError(\"failed to parse PyPy sys.version: %s\"%\n   repr(sys_version))\n  version,buildno,builddate,buildtime=match.groups()\n  compiler=\"\"\n  \n else :\n \n  match=_sys_version_parser.match(sys_version)\n  if match is None :\n   raise ValueError(\n   'failed to parse CPython sys.version: %s'%\n   repr(sys_version))\n  version,buildno,builddate,buildtime,compiler=  match.groups()\n  name='CPython'\n  builddate=builddate+' '+buildtime\n  \n if hasattr(sys,'_mercurial'):\n  _,branch,revision=sys._mercurial\n elif hasattr(sys,'subversion'):\n \n  _,branch,revision=sys.subversion\n else :\n  branch=''\n  revision=''\n  \n  \n l=version.split('.')\n if len(l)==2:\n  l.append('0')\n  version='.'.join(l)\n  \n  \n result=(name,version,branch,revision,buildno,builddate,compiler)\n _sys_version_cache[sys_version]=result\n return result\n \ndef python_implementation():\n\n ''\n\n\n\n\n\n\n\n \n return _sys_version()[0]\n \ndef python_version():\n\n ''\n\n\n\n\n \n return _sys_version()[1]\n \ndef python_version_tuple():\n\n ''\n\n\n\n\n\n \n return tuple(_sys_version()[1].split('.'))\n \ndef python_branch():\n\n ''\n\n\n\n\n\n\n\n \n \n return _sys_version()[2]\n \ndef python_revision():\n\n ''\n\n\n\n\n\n\n\n \n return _sys_version()[3]\n \ndef python_build():\n\n ''\n\n\n \n return _sys_version()[4:6]\n \ndef python_compiler():\n\n ''\n\n\n \n return _sys_version()[6]\n \n \n \n_platform_cache={}\n\ndef platform(aliased=0,terse=0):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n result=_platform_cache.get((aliased,terse),None )\n if result is not None :\n  return result\n  \n  \n  \n system,node,release,version,machine,processor=uname()\n if machine ==processor:\n  processor=''\n if aliased:\n  system,release,version=system_alias(system,release,version)\n  \n if system =='Windows':\n \n  rel,vers,csd,ptype=win32_ver(version)\n  if terse:\n   platform=_platform(system,release)\n  else :\n   platform=_platform(system,release,version,csd)\n   \n elif system in ('Linux',):\n \n  distname,distversion,distid=dist('')\n  if distname and not terse:\n   platform=_platform(system,release,machine,processor,\n   'with',\n   distname,distversion,distid)\n  else :\n  \n   libcname,libcversion=libc_ver(sys.executable)\n   platform=_platform(system,release,machine,processor,\n   'with',\n   libcname+libcversion)\n elif system =='Java':\n \n  r,v,vminfo,(os_name,os_version,os_arch)=java_ver()\n  if terse or not os_name:\n   platform=_platform(system,release,version)\n  else :\n   platform=_platform(system,release,version,\n   'on',\n   os_name,os_version,os_arch)\n   \n elif system =='MacOS':\n \n  if terse:\n   platform=_platform(system,release)\n  else :\n   platform=_platform(system,release,machine)\n   \n else :\n \n  if terse:\n   platform=_platform(system,release)\n  else :\n   bits,linkage=architecture(sys.executable)\n   platform=_platform(system,release,machine,processor,bits,linkage)\n   \n _platform_cache[(aliased,terse)]=platform\n return platform\n \n \n \nif __name__ =='__main__':\n\n terse=('terse'in sys.argv or'--terse'in sys.argv)\n aliased=(not'nonaliased'in sys.argv and not'--nonaliased'in sys.argv)\n print(platform(aliased,terse))\n sys.exit(0)\n"], "site": [".py", "import sys\n"], "timeit": [".py", "#! /usr/bin/python3.4\n\n\"\"\"Tool for measuring execution time of small code snippets.\n\nThis module avoids a number of common traps for measuring execution\ntimes.  See also Tim Peters' introduction to the Algorithms chapter in\nthe Python Cookbook, published by O'Reilly.\n\nLibrary usage: see the Timer class.\n\nCommand line usage:\n    python timeit.py [-n N] [-r N] [-s S] [-t] [-c] [-p] [-h] [--] [statement]\n\nOptions:\n  -n/--number N: how many times to execute 'statement' (default: see below)\n  -r/--repeat N: how many times to repeat the timer (default 3)\n  -s/--setup S: statement to be executed once initially (default 'pass')\n  -p/--process: use time.process_time() (default is time.perf_counter())\n  -t/--time: use time.time() (deprecated)\n  -c/--clock: use time.clock() (deprecated)\n  -v/--verbose: print raw timing results; repeat for more digits precision\n  -h/--help: print this usage message and exit\n  --: separate options from statement, use when statement starts with -\n  statement: statement to be timed (default 'pass')\n\nA multi-line statement may be given by specifying each line as a\nseparate argument; indented lines are possible by enclosing an\nargument in quotes and using leading spaces.  Multiple -s options are\ntreated similarly.\n\nIf -n is not given, a suitable number of loops is calculated by trying\nsuccessive powers of 10 until the total time is at least 0.2 seconds.\n\nNote: there is a certain baseline overhead associated with executing a\npass statement.  It differs between versions.  The code here doesn't try\nto hide it, but you should be aware of it.  The baseline overhead can be\nmeasured by invoking the program without arguments.\n\nClasses:\n\n    Timer\n\nFunctions:\n\n    timeit(string, string) -> float\n    repeat(string, string) -> list\n    default_timer() -> float\n\n\"\"\"\n\nimport gc\nimport sys\nimport time\nimport itertools\n\n__all__=[\"Timer\",\"timeit\",\"repeat\",\"default_timer\"]\n\ndummy_src_name=\"<timeit-src>\"\ndefault_number=1000000\ndefault_repeat=3\ndefault_timer=time.perf_counter\n\n\n\n\ntemplate=\"\"\"\ndef inner(_it, _timer):\n    {setup}\n    _t0 = _timer()\n    for _i in _it:\n        {stmt}\n    _t1 = _timer()\n    return _t1 - _t0\n\"\"\"\n\ndef reindent(src,indent):\n ''\n return src.replace(\"\\n\",\"\\n\"+\" \"*indent)\n \ndef _template_func(setup,func):\n ''\n def inner(_it,_timer,_func=func):\n  setup()\n  _t0=_timer()\n  for _i in _it:\n   _func()\n  _t1=_timer()\n  return _t1 -_t0\n return inner\n \nclass Timer:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,stmt=\"pass\",setup=\"pass\",timer=default_timer):\n  ''\n  self.timer=timer\n  ns={}\n  if isinstance(stmt,str):\n   stmt=reindent(stmt,8)\n   if isinstance(setup,str):\n    setup=reindent(setup,4)\n    src=template.format(stmt=stmt,setup=setup)\n   elif callable(setup):\n    src=template.format(stmt=stmt,setup='_setup()')\n    ns['_setup']=setup\n   else :\n    raise ValueError(\"setup is neither a string nor callable\")\n   self.src=src\n   code=compile(src,dummy_src_name,\"exec\")\n   exec(code,globals(),ns)\n   self.inner=ns[\"inner\"]\n  elif callable(stmt):\n   self.src=None\n   if isinstance(setup,str):\n    _setup=setup\n    def setup():\n     exec(_setup,globals(),ns)\n   elif not callable(setup):\n    raise ValueError(\"setup is neither a string nor callable\")\n   self.inner=_template_func(setup,stmt)\n  else :\n   raise ValueError(\"stmt is neither a string nor callable\")\n   \n def print_exc(self,file=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  import linecache,traceback\n  if self.src is not None :\n   linecache.cache[dummy_src_name]=(len(self.src),\n   None ,\n   self.src.split(\"\\n\"),\n   dummy_src_name)\n   \n   \n  traceback.print_exc(file=file)\n  \n def timeit(self,number=default_number):\n  ''\n\n\n\n\n\n\n\n  \n  it=itertools.repeat(None ,number)\n  gcold=gc.isenabled()\n  gc.disable()\n  try :\n   timing=self.inner(it,self.timer)\n  finally :\n   if gcold:\n    gc.enable()\n  return timing\n  \n def repeat(self,repeat=default_repeat,number=default_number):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  r=[]\n  for i in range(repeat):\n   t=self.timeit(number)\n   r.append(t)\n  return r\n  \ndef timeit(stmt=\"pass\",setup=\"pass\",timer=default_timer,\nnumber=default_number):\n ''\n return Timer(stmt,setup,timer).timeit(number)\n \ndef repeat(stmt=\"pass\",setup=\"pass\",timer=default_timer,\nrepeat=default_repeat,number=default_number):\n ''\n return Timer(stmt,setup,timer).repeat(repeat,number)\n \ndef main(args=None ,*,_wrap_timer=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if args is None :\n  args=sys.argv[1:]\n import getopt\n try :\n  opts,args=getopt.getopt(args,\"n:s:r:tcpvh\",\n  [\"number=\",\"setup=\",\"repeat=\",\n  \"time\",\"clock\",\"process\",\n  \"verbose\",\"help\"])\n except getopt.error as err:\n  print(err)\n  print(\"use -h/--help for command line help\")\n  return 2\n timer=default_timer\n stmt=\"\\n\".join(args)or\"pass\"\n number=0\n setup=[]\n repeat=default_repeat\n verbose=0\n precision=3\n for o,a in opts:\n  if o in (\"-n\",\"--number\"):\n   number=int(a)\n  if o in (\"-s\",\"--setup\"):\n   setup.append(a)\n  if o in (\"-r\",\"--repeat\"):\n   repeat=int(a)\n   if repeat <=0:\n    repeat=1\n  if o in (\"-t\",\"--time\"):\n   timer=time.time\n  if o in (\"-c\",\"--clock\"):\n   timer=time.clock\n  if o in (\"-p\",\"--process\"):\n   timer=time.process_time\n  if o in (\"-v\",\"--verbose\"):\n   if verbose:\n    precision +=1\n   verbose +=1\n  if o in (\"-h\",\"--help\"):\n   print(__doc__,end=' ')\n   return 0\n setup=\"\\n\".join(setup)or\"pass\"\n \n \n \n import os\n sys.path.insert(0,os.curdir)\n if _wrap_timer is not None :\n  timer=_wrap_timer(timer)\n t=Timer(stmt,setup,timer)\n if number ==0:\n \n  for i in range(1,10):\n   number=10 **i\n   try :\n    x=t.timeit(number)\n   except :\n    t.print_exc()\n    return 1\n   if verbose:\n    print(\"%d loops -> %.*g secs\"%(number,precision,x))\n   if x >=0.2:\n    break\n try :\n  r=t.repeat(repeat,number)\n except :\n  t.print_exc()\n  return 1\n best=min(r)\n if verbose:\n  print(\"raw times:\",\" \".join([\"%.*g\"%(precision,x)for x in r]))\n print(\"%d loops,\"%number,end=' ')\n usec=best *1e6 /number\n if usec <1000:\n  print(\"best of %d: %.*g usec per loop\"%(repeat,precision,usec))\n else :\n  msec=usec /1000\n  if msec <1000:\n   print(\"best of %d: %.*g msec per loop\"%(repeat,precision,msec))\n  else :\n   sec=msec /1000\n   print(\"best of %d: %.*g sec per loop\"%(repeat,precision,sec))\n return None\n \nif __name__ ==\"__main__\":\n sys.exit(main())\n"], "builtins": [".js", "var $module = (function(){\n    var obj = {__class__:__BRYTHON__.$ModuleDict,__name__:'builtins'}\n    var builtin_names = ['ArithmeticError', 'AssertionError', 'AttributeError', \n    'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', \n    'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', \n    'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', \n    'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', \n    'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', \n    'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', \n    'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError',\n    'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', \n    'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', \n    'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', \n    'ProcessLookupError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', \n    'RuntimeWarning', 'StopIteration', 'SyntaxError', 'SyntaxWarning', \n    'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', \n    'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', \n    'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', \n    'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', \n    '__build_class__', '__debug__', '__doc__', '__import__', '__name__', \n    '__package__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', \n    'bytes','callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', \n    'credits','delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', \n    'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', \n    'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', \n    'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', \n    'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', \n    'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', \n    'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', \n    'vars', 'zip']\n    for(var i=0, _len_i = builtin_names.length; i < _len_i;i++){\n        try{eval(\"obj['\"+builtin_names[i]+\"']=__BRYTHON__.builtins.\"+builtin_names[i])}\n        catch(err){if (__BRYTHON__.$debug) {console.log(err)}}\n    }\n    return obj\n})()\n"], "stat": [".py", "''\n\n\n\n\n\n\nST_MODE=0\nST_INO=1\nST_DEV=2\nST_NLINK=3\nST_UID=4\nST_GID=5\nST_SIZE=6\nST_ATIME=7\nST_MTIME=8\nST_CTIME=9\n\n\n\ndef S_IMODE(mode):\n ''\n\n \n return mode&0o7777\n \ndef S_IFMT(mode):\n ''\n\n \n return mode&0o170000\n \n \n \n \nS_IFDIR=0o040000\nS_IFCHR=0o020000\nS_IFBLK=0o060000\nS_IFREG=0o100000\nS_IFIFO=0o010000\nS_IFLNK=0o120000\nS_IFSOCK=0o140000\n\n\n\ndef S_ISDIR(mode):\n ''\n return S_IFMT(mode)==S_IFDIR\n \ndef S_ISCHR(mode):\n ''\n return S_IFMT(mode)==S_IFCHR\n \ndef S_ISBLK(mode):\n ''\n return S_IFMT(mode)==S_IFBLK\n \ndef S_ISREG(mode):\n ''\n return S_IFMT(mode)==S_IFREG\n \ndef S_ISFIFO(mode):\n ''\n return S_IFMT(mode)==S_IFIFO\n \ndef S_ISLNK(mode):\n ''\n return S_IFMT(mode)==S_IFLNK\n \ndef S_ISSOCK(mode):\n ''\n return S_IFMT(mode)==S_IFSOCK\n \n \n \nS_ISUID=0o4000\nS_ISGID=0o2000\nS_ENFMT=S_ISGID\nS_ISVTX=0o1000\nS_IREAD=0o0400\nS_IWRITE=0o0200\nS_IEXEC=0o0100\nS_IRWXU=0o0700\nS_IRUSR=0o0400\nS_IWUSR=0o0200\nS_IXUSR=0o0100\nS_IRWXG=0o0070\nS_IRGRP=0o0040\nS_IWGRP=0o0020\nS_IXGRP=0o0010\nS_IRWXO=0o0007\nS_IROTH=0o0004\nS_IWOTH=0o0002\nS_IXOTH=0o0001\n\n\n\nUF_NODUMP=0x00000001\nUF_IMMUTABLE=0x00000002\nUF_APPEND=0x00000004\nUF_OPAQUE=0x00000008\nUF_NOUNLINK=0x00000010\nUF_COMPRESSED=0x00000020\nUF_HIDDEN=0x00008000\nSF_ARCHIVED=0x00010000\nSF_IMMUTABLE=0x00020000\nSF_APPEND=0x00040000\nSF_NOUNLINK=0x00100000\nSF_SNAPSHOT=0x00200000\n\n\n_filemode_table=(\n((S_IFLNK,\"l\"),\n(S_IFREG,\"-\"),\n(S_IFBLK,\"b\"),\n(S_IFDIR,\"d\"),\n(S_IFCHR,\"c\"),\n(S_IFIFO,\"p\")),\n\n((S_IRUSR,\"r\"),),\n((S_IWUSR,\"w\"),),\n((S_IXUSR |S_ISUID,\"s\"),\n(S_ISUID,\"S\"),\n(S_IXUSR,\"x\")),\n\n((S_IRGRP,\"r\"),),\n((S_IWGRP,\"w\"),),\n((S_IXGRP |S_ISGID,\"s\"),\n(S_ISGID,\"S\"),\n(S_IXGRP,\"x\")),\n\n((S_IROTH,\"r\"),),\n((S_IWOTH,\"w\"),),\n((S_IXOTH |S_ISVTX,\"t\"),\n(S_ISVTX,\"T\"),\n(S_IXOTH,\"x\"))\n)\n\ndef filemode(mode):\n ''\n perm=[]\n for table in _filemode_table:\n  for bit,char in table:\n   if mode&bit ==bit:\n    perm.append(char)\n    break\n  else :\n   perm.append(\"-\")\n return\"\".join(perm)\n"], "traceback": [".py", "import sys\nfrom browser import console\n\ndef print_exc(file=sys.stderr):\n exc=__BRYTHON__.current_exception\n if isinstance(exc,SyntaxError):\n  file.write('\\n module %s line %s'%(exc.args[1],exc.args[2]))\n  offset=exc.args[3]\n  file.write('\\n  '+exc.args[4])\n  file.write('\\n  '+offset *' '+'^')\n else :\n  file.write(exc.info)\n file.write('\\n'+exc.__name__)\n if exc.args:\n  file.write(': %s'%exc.args[0])\n file.write('\\n')\n \ndef format_exc(limit=None ,chain=True ):\n exc=__BRYTHON__.current_exception\n res=exc.info+'\\n'+exc.__name__\n if exc.args:\n  res +=': '+exc.args[0]\n return res+'\\n'\n \ndef format_exception(_type,value,tb,limit=None ,chain=True ):\n return ['%s\\n'%_type,'%s\\n'%value]\n \ndef extract_tb(tb,limit=None ):\n return tb"], "_ajax": [".js", "// ajax\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\n\nreturn {\n    urlencode: function(params){\n        var items = _b_.list(_b_.dict.$dict.items(params)), res=''\n        for(var i=0, _len_i = items.length; i < _len_i;i++){\n            var key = encodeURIComponent(_b_.str(items[i][0]));\n            if (_b_.isinstance(items[i][1],_b_.list)) {\n                for (j = 0; j < items[i][1].length; j++) {\n                    res += key +'=' + encodeURIComponent(_b_.str(items[i][1][j])) + '&'\n                }\n            } else {\n                res += key + '=' + encodeURIComponent(_b_.str(items[i][1])) + '&'\n            }\n        }\n        res = res.substr(0,res.length-1)\n        return res\n    }\n}\n\n})(__BRYTHON__)\n"], "external_import": [".py", "import os\nfrom browser import doc\nimport urllib.request\n\n\n\n\n\nclass ModuleFinder:\n def __init__(self,path_entry):\n  print(\"external_import here..\")\n  \n  self._module=None\n  if path_entry.startswith('http://'):\n   self.path_entry=path_entry\n  else :\n   raise ImportError()\n   \n def __str__(self):\n  return'<%s for \"%s\">'%(self.__class__.__name__,self.path_entry)\n  \n def find_module(self,fullname,path=None ):\n  path=path or self.path_entry\n  \n  for _ext in ['js','pyj','py']:\n   _fp,_url,_headers=urllib.request.urlopen(path+'/'+'%s.%s'%(fullname,_ext))\n   self._module=_fp.read()\n   _fp.close()\n   if self._module is not None :\n    print(\"module found at %s:%s\"%(path,fullname))\n    return ModuleLoader(path,fullname,self._module)\n    \n  print('module %s not found'%fullname)\n  raise ImportError()\n  return None\n  \nclass ModuleLoader:\n ''\n \n def __init__(self,filepath,name,module_source):\n  self._filepath=filepath\n  self._name=name\n  self._module_source=module_source\n  \n def get_source(self):\n  return self._module_source\n  \n def is_package(self):\n  return'.'in self._name\n  \n def load_module(self):\n  if self._name in sys.modules:\n  \n   mod=sys.modules[self._name]\n   return mod\n   \n  _src=self.get_source()\n  if self._filepath.endswith('.js'):\n   mod=JSObject(import_js_module(_src,self._filepath,self._name))\n  elif self._filepath.endswith('.py'):\n   mod=JSObject(import_py_module(_src,self._filepath,self._name))\n  elif self._filepath.endswith('.pyj'):\n   mod=JSObject(import_pyj_module(_src,self._filepath,self._name))\n  else :\n   raise ImportError('Invalid Module: %s'%self._filepath)\n   \n   \n  mod.__file__=self._filepath\n  mod.__name__=self._name\n  mod.__path__=os.path.abspath(self._filepath)\n  mod.__loader__=self\n  mod.__package__='.'.join(self._name.split('.')[:-1])\n  \n  if self.is_package():\n   print('adding path for package')\n   \n   \n   mod.__path__=[self._filepath]\n  else :\n   print('imported as regular module')\n   \n  print('creating a new module object for \"%s\"'%self._name)\n  sys.modules.setdefault(self._name,mod)\n  JSObject(__BRYTHON__.imported)[self._name]=mod\n  \n  return mod\n"], "importlib.basehook": [".py", "from javascript import JSObject\nfrom browser import window\nimport urllib.request\n\nclass TempMod:\n def __init__(self,name):\n  self.name=name\n  \n  \nclass BaseHook:\n def __init__(self,fullname=None ,path=None ):\n  self._fullname=fullname\n  self._path=path\n  self._modpath=''\n  self._module=''\n  \n def find_module(self,name=None ,path=None ):\n  if name is None :\n   name=self._fullname\n   \n  for _i in ('libs/%s.js'%name,'Lib/%s.py'%name,\n  'Lib/%s/__init__.py'%name):\n   _path=\"%s%s\"%(__BRYTHON__.brython_path,_i)\n   try :\n    _fp,_,_headers=urllib.request.urlopen(_path)\n    if _headers['status']!=200:\n     continue\n    self._module=_fp.read()\n    self._modpath=_path\n    return self\n   except urllib.error.HTTPError as e:\n    self._modpath=''\n    self._module=''\n    \n  raise ImportError\n  \n def is_package(self):\n  return'.'in self._fullname\n  \n def load_module(self,name):\n  if name is None :\n   name=self._fullname\n  window.eval('__BRYTHON__.imported[\"%s\"]={}'%name)\n  return JSObject(__BRYTHON__.run_py)(self._module,\n  self._modpath,TempMod(name))\n"], "csv": [".py", "\n\"\"\"\ncsv.py - read/write/investigate CSV files\n\"\"\"\n\nimport re\nfrom _csv import Error,__version__,writer,reader,register_dialect,unregister_dialect,get_dialect,list_dialects,field_size_limit,QUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONNUMERIC,QUOTE_NONE,__doc__\nfrom _csv import Dialect as _Dialect\n\nfrom io import StringIO\n\n__all__=[\"QUOTE_MINIMAL\",\"QUOTE_ALL\",\"QUOTE_NONNUMERIC\",\"QUOTE_NONE\",\n\"Error\",\"Dialect\",\"__doc__\",\"excel\",\"excel_tab\",\n\"field_size_limit\",\"reader\",\"writer\",\n\"register_dialect\",\"get_dialect\",\"list_dialects\",\"Sniffer\",\n\"unregister_dialect\",\"__version__\",\"DictReader\",\"DictWriter\"]\n\nclass Dialect:\n ''\n\n\n\n\n\n \n _name=\"\"\n _valid=False\n \n delimiter=None\n quotechar=None\n escapechar=None\n doublequote=None\n skipinitialspace=None\n lineterminator=None\n quoting=None\n \n def __init__(self):\n  if self.__class__ !=Dialect:\n   self._valid=True\n  self._validate()\n  \n def _validate(self):\n  try :\n   _Dialect(self)\n  except TypeError as e:\n  \n   raise Error(str(e))\n   \nclass excel(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\nregister_dialect(\"excel\",excel)\n\nclass excel_tab(excel):\n ''\n delimiter='\\t'\nregister_dialect(\"excel-tab\",excel_tab)\n\nclass unix_dialect(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\n'\n quoting=QUOTE_ALL\nregister_dialect(\"unix\",unix_dialect)\n\n\nclass DictReader:\n def __init__(self,f,fieldnames=None ,restkey=None ,restval=None ,\n dialect=\"excel\",*args,**kwds):\n  self._fieldnames=fieldnames\n  self.restkey=restkey\n  self.restval=restval\n  self.reader=reader(f,dialect,*args,**kwds)\n  self.dialect=dialect\n  self.line_num=0\n  \n def __iter__(self):\n  return self\n  \n @property\n def fieldnames(self):\n  if self._fieldnames is None :\n   try :\n    self._fieldnames=next(self.reader)\n   except StopIteration:\n    pass\n  self.line_num=self.reader.line_num\n  return self._fieldnames\n  \n @fieldnames.setter\n def fieldnames(self,value):\n  self._fieldnames=value\n  \n def __next__(self):\n  if self.line_num ==0:\n  \n   self.fieldnames\n  row=next(self.reader)\n  self.line_num=self.reader.line_num\n  \n  \n  \n  \n  while row ==[]:\n   row=next(self.reader)\n  d=dict(zip(self.fieldnames,row))\n  lf=len(self.fieldnames)\n  lr=len(row)\n  if lf <lr:\n   d[self.restkey]=row[lf:]\n  elif lf >lr:\n   for key in self.fieldnames[lr:]:\n    d[key]=self.restval\n  return d\n  \n  \nclass DictWriter:\n def __init__(self,f,fieldnames,restval=\"\",extrasaction=\"raise\",\n dialect=\"excel\",*args,**kwds):\n  self.fieldnames=fieldnames\n  self.restval=restval\n  if extrasaction.lower()not in (\"raise\",\"ignore\"):\n   raise ValueError(\"extrasaction (%s) must be 'raise' or 'ignore'\"\n   %extrasaction)\n  self.extrasaction=extrasaction\n  self.writer=writer(f,dialect,*args,**kwds)\n  \n def writeheader(self):\n  header=dict(zip(self.fieldnames,self.fieldnames))\n  self.writerow(header)\n  \n def _dict_to_list(self,rowdict):\n  if self.extrasaction ==\"raise\":\n   wrong_fields=[k for k in rowdict if k not in self.fieldnames]\n   if wrong_fields:\n    raise ValueError(\"dict contains fields not in fieldnames: \"\n    +\", \".join(wrong_fields))\n  return [rowdict.get(key,self.restval)for key in self.fieldnames]\n  \n def writerow(self,rowdict):\n  return self.writer.writerow(self._dict_to_list(rowdict))\n  \n def writerows(self,rowdicts):\n  rows=[]\n  for rowdict in rowdicts:\n   rows.append(self._dict_to_list(rowdict))\n  return self.writer.writerows(rows)\n  \n  \ntry :\n complex\nexcept NameError:\n complex=float\n \nclass Sniffer:\n ''\n\n\n \n def __init__(self):\n \n  self.preferred=[',','\\t',';',' ',':']\n  \n  \n def sniff(self,sample,delimiters=None ):\n  ''\n\n  \n  \n  quotechar,doublequote,delimiter,skipinitialspace=  self._guess_quote_and_delimiter(sample,delimiters)\n  if not delimiter:\n   delimiter,skipinitialspace=self._guess_delimiter(sample,\n   delimiters)\n   \n  if not delimiter:\n   raise Error(\"Could not determine delimiter\")\n   \n  class dialect(Dialect):\n   _name=\"sniffed\"\n   lineterminator='\\r\\n'\n   quoting=QUOTE_MINIMAL\n   \n   \n  dialect.doublequote=doublequote\n  dialect.delimiter=delimiter\n  \n  dialect.quotechar=quotechar or'\"'\n  dialect.skipinitialspace=skipinitialspace\n  \n  return dialect\n  \n  \n def _guess_quote_and_delimiter(self,data,delimiters):\n  ''\n\n\n\n\n\n\n\n\n  \n  \n  matches=[]\n  for restr in ('(?P<delim>[^\\w\\n\"\\'])(?P<space> ?)(?P<quote>[\"\\']).*?(?P=quote)(?P=delim)',\n  '(?:^|\\n)(?P<quote>[\"\\']).*?(?P=quote)(?P<delim>[^\\w\\n\"\\'])(?P<space> ?)',\n  '(?P<delim>>[^\\w\\n\"\\'])(?P<space> ?)(?P<quote>[\"\\']).*?(?P=quote)(?:$|\\n)',\n  '(?:^|\\n)(?P<quote>[\"\\']).*?(?P=quote)(?:$|\\n)'):\n   regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n   matches=regexp.findall(data)\n   if matches:\n    break\n    \n  if not matches:\n  \n   return ('',False ,None ,0)\n  quotes={}\n  delims={}\n  spaces=0\n  for m in matches:\n   n=regexp.groupindex['quote']-1\n   key=m[n]\n   if key:\n    quotes[key]=quotes.get(key,0)+1\n   try :\n    n=regexp.groupindex['delim']-1\n    key=m[n]\n   except KeyError:\n    continue\n   if key and (delimiters is None or key in delimiters):\n    delims[key]=delims.get(key,0)+1\n   try :\n    n=regexp.groupindex['space']-1\n   except KeyError:\n    continue\n   if m[n]:\n    spaces +=1\n    \n  quotechar=max(quotes,key=quotes.get)\n  \n  if delims:\n   delim=max(delims,key=delims.get)\n   skipinitialspace=delims[delim]==spaces\n   if delim =='\\n':\n    delim=''\n  else :\n  \n   delim=''\n   skipinitialspace=0\n   \n   \n   \n  dq_regexp=re.compile(\n  r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%  {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n  \n  \n  \n  if dq_regexp.search(data):\n   doublequote=True\n  else :\n   doublequote=False\n   \n  return (quotechar,doublequote,delim,skipinitialspace)\n  \n  \n def _guess_delimiter(self,data,delimiters):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  data=list(filter(None ,data.split('\\n')))\n  \n  ascii=[chr(c)for c in range(127)]\n  \n  \n  chunkLength=min(10,len(data))\n  iteration=0\n  charFrequency={}\n  modes={}\n  delims={}\n  start,end=0,min(chunkLength,len(data))\n  while start <len(data):\n   iteration +=1\n   for line in data[start:end]:\n    for char in ascii:\n     metaFrequency=charFrequency.get(char,{})\n     \n     freq=line.count(char)\n     \n     metaFrequency[freq]=metaFrequency.get(freq,0)+1\n     charFrequency[char]=metaFrequency\n     \n   for char in charFrequency.keys():\n    items=list(charFrequency[char].items())\n    if len(items)==1 and items[0][0]==0:\n     continue\n     \n    if len(items)>1:\n     modes[char]=max(items,key=lambda x:x[1])\n     \n     \n     items.remove(modes[char])\n     modes[char]=(modes[char][0],modes[char][1]\n     -sum(item[1]for item in items))\n    else :\n     modes[char]=items[0]\n     \n     \n   modeList=modes.items()\n   total=float(chunkLength *iteration)\n   \n   consistency=1.0\n   \n   threshold=0.9\n   while len(delims)==0 and consistency >=threshold:\n    for k,v in modeList:\n     if v[0]>0 and v[1]>0:\n      if ((v[1]/total)>=consistency and\n      (delimiters is None or k in delimiters)):\n       delims[k]=v\n    consistency -=0.01\n    \n   if len(delims)==1:\n    delim=list(delims.keys())[0]\n    skipinitialspace=(data[0].count(delim)==\n    data[0].count(\"%c \"%delim))\n    return (delim,skipinitialspace)\n    \n    \n   start=end\n   end +=chunkLength\n   \n  if not delims:\n   return ('',0)\n   \n   \n  if len(delims)>1:\n   for d in self.preferred:\n    if d in delims.keys():\n     skipinitialspace=(data[0].count(d)==\n     data[0].count(\"%c \"%d))\n     return (d,skipinitialspace)\n     \n     \n     \n  items=[(v,k)for (k,v)in delims.items()]\n  items.sort()\n  delim=items[-1][1]\n  \n  skipinitialspace=(data[0].count(delim)==\n  data[0].count(\"%c \"%delim))\n  return (delim,skipinitialspace)\n  \n  \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n  rdr=reader(StringIO(sample),self.sniff(sample))\n  \n  header=next(rdr)\n  \n  columns=len(header)\n  columnTypes={}\n  for i in range(columns):columnTypes[i]=None\n  \n  checked=0\n  for row in rdr:\n  \n   if checked >20:\n    break\n   checked +=1\n   \n   if len(row)!=columns:\n    continue\n    \n   for col in list(columnTypes.keys()):\n   \n    for thisType in [int,float,complex]:\n     try :\n      thisType(row[col])\n      break\n     except (ValueError,OverflowError):\n      pass\n    else :\n    \n     thisType=len(row[col])\n     \n    if thisType !=columnTypes[col]:\n     if columnTypes[col]is None :\n      columnTypes[col]=thisType\n     else :\n     \n     \n      del columnTypes[col]\n      \n      \n      \n  hasHeader=0\n  for col,colType in columnTypes.items():\n   if type(colType)==type(0):\n    if len(header[col])!=colType:\n     hasHeader +=1\n    else :\n     hasHeader -=1\n   else :\n    try :\n     colType(header[col])\n    except (ValueError,TypeError):\n     hasHeader +=1\n    else :\n     hasHeader -=1\n     \n  return hasHeader >0\n"], "encodings.cp1026": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1026',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'{'\n'\\xf1'\n'\\xc7'\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n'\\u011e'\n'\\u0130'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'['\n'\\xd1'\n'\\u015f'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\u0131'\n':'\n'\\xd6'\n'\\u015e'\n\"'\"\n'='\n'\\xdc'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'}'\n'`'\n'\\xa6'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'\\xf6'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n']'\n'$'\n'@'\n'\\xae'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xac'\n'|'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'\\xe7'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'~'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'\\u011f'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\\\'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\xfc'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'#'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\"'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "multiprocessing.util": [".py", "\n\n\n\n\n\n\n\n\nimport sys\nimport functools\nimport os\nimport itertools\nimport weakref\nimport atexit\nimport threading\n\nfrom subprocess import _args_from_interpreter_flags\n\nfrom multiprocessing.process import current_process,active_children\n\n__all__=[\n'sub_debug','debug','info','sub_warning','get_logger',\n'log_to_stderr','get_temp_dir','register_after_fork',\n'is_exiting','Finalize','ForkAwareThreadLock','ForkAwareLocal',\n'SUBDEBUG','SUBWARNING',\n]\n\n\n\n\n\nNOTSET=0\nSUBDEBUG=5\nDEBUG=10\nINFO=20\nSUBWARNING=25\n\nLOGGER_NAME='multiprocessing'\nDEFAULT_LOGGING_FORMAT='[%(levelname)s/%(processName)s] %(message)s'\n\n_logger=None\n_log_to_stderr=False\n\ndef sub_debug(msg,*args):\n if _logger:\n  _logger.log(SUBDEBUG,msg,*args)\n  \ndef debug(msg,*args):\n if _logger:\n  _logger.log(DEBUG,msg,*args)\n  \ndef info(msg,*args):\n if _logger:\n  _logger.log(INFO,msg,*args)\n  \ndef sub_warning(msg,*args):\n if _logger:\n  _logger.log(SUBWARNING,msg,*args)\n  \ndef get_logger():\n ''\n\n \n global _logger\n import logging\n \n logging._acquireLock()\n try :\n  if not _logger:\n  \n   _logger=logging.getLogger(LOGGER_NAME)\n   _logger.propagate=0\n   logging.addLevelName(SUBDEBUG,'SUBDEBUG')\n   logging.addLevelName(SUBWARNING,'SUBWARNING')\n   \n   \n   if hasattr(atexit,'unregister'):\n    atexit.unregister(_exit_function)\n    atexit.register(_exit_function)\n   else :\n    atexit._exithandlers.remove((_exit_function,(),{}))\n    atexit._exithandlers.append((_exit_function,(),{}))\n    \n finally :\n  logging._releaseLock()\n  \n return _logger\n \ndef log_to_stderr(level=None ):\n ''\n\n \n global _log_to_stderr\n import logging\n \n logger=get_logger()\n formatter=logging.Formatter(DEFAULT_LOGGING_FORMAT)\n handler=logging.StreamHandler()\n handler.setFormatter(formatter)\n logger.addHandler(handler)\n \n if level:\n  logger.setLevel(level)\n _log_to_stderr=True\n return _logger\n \n \n \n \n \ndef get_temp_dir():\n\n if current_process()._tempdir is None :\n  import shutil,tempfile\n  tempdir=tempfile.mkdtemp(prefix='pymp-')\n  info('created temp directory %s',tempdir)\n  Finalize(None ,shutil.rmtree,args=[tempdir],exitpriority=-100)\n  current_process()._tempdir=tempdir\n return current_process()._tempdir\n \n \n \n \n \n_afterfork_registry=weakref.WeakValueDictionary()\n_afterfork_counter=itertools.count()\n\ndef _run_after_forkers():\n items=list(_afterfork_registry.items())\n items.sort()\n for (index,ident,func),obj in items:\n  try :\n   func(obj)\n  except Exception as e:\n   info('after forker raised exception %s',e)\n   \ndef register_after_fork(obj,func):\n _afterfork_registry[(next(_afterfork_counter),id(obj),func)]=obj\n \n \n \n \n \n_finalizer_registry={}\n_finalizer_counter=itertools.count()\n\n\nclass Finalize(object):\n ''\n\n \n def __init__(self,obj,callback,args=(),kwargs=None ,exitpriority=None ):\n  assert exitpriority is None or type(exitpriority)is int\n  \n  if obj is not None :\n   self._weakref=weakref.ref(obj,self)\n  else :\n   assert exitpriority is not None\n   \n  self._callback=callback\n  self._args=args\n  self._kwargs=kwargs or {}\n  self._key=(exitpriority,next(_finalizer_counter))\n  self._pid=os.getpid()\n  \n  _finalizer_registry[self._key]=self\n  \n def __call__(self,wr=None ,\n \n \n _finalizer_registry=_finalizer_registry,\n sub_debug=sub_debug,getpid=os.getpid):\n  ''\n\n  \n  try :\n   del _finalizer_registry[self._key]\n  except KeyError:\n   sub_debug('finalizer no longer registered')\n  else :\n   if self._pid !=getpid():\n    sub_debug('finalizer ignored because different process')\n    res=None\n   else :\n    sub_debug('finalizer calling %s with args %s and kwargs %s',\n    self._callback,self._args,self._kwargs)\n    res=self._callback(*self._args,**self._kwargs)\n   self._weakref=self._callback=self._args=   self._kwargs=self._key=None\n   return res\n   \n def cancel(self):\n  ''\n\n  \n  try :\n   del _finalizer_registry[self._key]\n  except KeyError:\n   pass\n  else :\n   self._weakref=self._callback=self._args=   self._kwargs=self._key=None\n   \n def still_active(self):\n  ''\n\n  \n  return self._key in _finalizer_registry\n  \n def __repr__(self):\n  try :\n   obj=self._weakref()\n  except (AttributeError,TypeError):\n   obj=None\n   \n  if obj is None :\n   return'<Finalize object, dead>'\n   \n  x='<Finalize object, callback=%s'%  getattr(self._callback,'__name__',self._callback)\n  if self._args:\n   x +=', args='+str(self._args)\n  if self._kwargs:\n   x +=', kwargs='+str(self._kwargs)\n  if self._key[0]is not None :\n   x +=', exitprority='+str(self._key[0])\n  return x+'>'\n  \n  \ndef _run_finalizers(minpriority=None ):\n ''\n\n\n\n\n \n if _finalizer_registry is None :\n \n \n \n  return\n  \n if minpriority is None :\n  f=lambda p:p[0][0]is not None\n else :\n  f=lambda p:p[0][0]is not None and p[0][0]>=minpriority\n  \n items=[x for x in list(_finalizer_registry.items())if f(x)]\n items.sort(reverse=True )\n \n for key,finalizer in items:\n  sub_debug('calling %s',finalizer)\n  try :\n   finalizer()\n  except Exception:\n   import traceback\n   traceback.print_exc()\n   \n if minpriority is None :\n  _finalizer_registry.clear()\n  \n  \n  \n  \n  \ndef is_exiting():\n ''\n\n \n return _exiting or _exiting is None\n \n_exiting=False\n\ndef _exit_function(info=info,debug=debug,_run_finalizers=_run_finalizers,\nactive_children=active_children,\ncurrent_process=current_process):\n\n\n\n\n global _exiting\n \n if not _exiting:\n  _exiting=True\n  \n  info('process shutting down')\n  debug('running all \"atexit\" finalizers with priority >= 0')\n  _run_finalizers(0)\n  \n  if current_process()is not None :\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n   for p in active_children():\n    if p._daemonic:\n     info('calling terminate() for daemon %s',p.name)\n     p._popen.terminate()\n     \n   for p in active_children():\n    info('calling join() for process %s',p.name)\n    p.join()\n    \n  debug('running the remaining \"atexit\" finalizers')\n  _run_finalizers()\n  \natexit.register(_exit_function)\n\n\n\n\n\nclass ForkAwareThreadLock(object):\n def __init__(self):\n  self._reset()\n  register_after_fork(self,ForkAwareThreadLock._reset)\n  \n def _reset(self):\n  self._lock=threading.Lock()\n  self.acquire=self._lock.acquire\n  self.release=self._lock.release\n  \nclass ForkAwareLocal(threading.local):\n def __init__(self):\n  register_after_fork(self,lambda obj:obj.__dict__.clear())\n def __reduce__(self):\n  return type(self),()\n"], "heapq": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__about__=\"\"\"Heap queues\n\n[explanation by Fran\u00e7ois Pinard]\n\nHeaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for\nall k, counting elements from 0.  For the sake of comparison,\nnon-existing elements are considered to be infinite.  The interesting\nproperty of a heap is that a[0] is always its smallest element.\n\nThe strange invariant above is meant to be an efficient memory\nrepresentation for a tournament.  The numbers below are `k', not a[k]:\n\n                                   0\n\n                  1                                 2\n\n          3               4                5               6\n\n      7       8       9       10      11      12      13      14\n\n    15 16   17 18   19 20   21 22   23 24   25 26   27 28   29 30\n\n\nIn the tree above, each cell `k' is topping `2*k+1' and `2*k+2'.  In\nan usual binary tournament we see in sports, each cell is the winner\nover the two cells it tops, and we can trace the winner down the tree\nto see all opponents s/he had.  However, in many computer applications\nof such tournaments, we do not need to trace the history of a winner.\nTo be more memory efficient, when a winner is promoted, we try to\nreplace it by something else at a lower level, and the rule becomes\nthat a cell and the two cells it tops contain three different items,\nbut the top cell \"wins\" over the two topped cells.\n\nIf this heap invariant is protected at all time, index 0 is clearly\nthe overall winner.  The simplest algorithmic way to remove it and\nfind the \"next\" winner is to move some loser (let's say cell 30 in the\ndiagram above) into the 0 position, and then percolate this new 0 down\nthe tree, exchanging values, until the invariant is re-established.\nThis is clearly logarithmic on the total number of items in the tree.\nBy iterating over all items, you get an O(n ln n) sort.\n\nA nice feature of this sort is that you can efficiently insert new\nitems while the sort is going on, provided that the inserted items are\nnot \"better\" than the last 0'th element you extracted.  This is\nespecially useful in simulation contexts, where the tree holds all\nincoming events, and the \"win\" condition means the smallest scheduled\ntime.  When an event schedule other events for execution, they are\nscheduled into the future, so they can easily go into the heap.  So, a\nheap is a good structure for implementing schedulers (this is what I\nused for my MIDI sequencer :-).\n\nVarious structures for implementing schedulers have been extensively\nstudied, and heaps are good for this, as they are reasonably speedy,\nthe speed is almost constant, and the worst case is not much different\nthan the average case.  However, there are other representations which\nare more efficient overall, yet the worst cases might be terrible.\n\nHeaps are also very useful in big disk sorts.  You most probably all\nknow that a big sort implies producing \"runs\" (which are pre-sorted\nsequences, which size is usually related to the amount of CPU memory),\nfollowed by a merging passes for these runs, which merging is often\nvery cleverly organised[1].  It is very important that the initial\nsort produces the longest runs possible.  Tournaments are a good way\nto that.  If, using all the memory available to hold a tournament, you\nreplace and percolate items that happen to fit the current run, you'll\nproduce runs which are twice the size of the memory for random input,\nand much better for input fuzzily ordered.\n\nMoreover, if you output the 0'th item on disk and get an input which\nmay not fit in the current tournament (because the value \"wins\" over\nthe last output value), it cannot fit in the heap, so the size of the\nheap decreases.  The freed memory could be cleverly reused immediately\nfor progressively building a second heap, which grows at exactly the\nsame rate the first heap is melting.  When the first heap completely\nvanishes, you switch heaps and start a new run.  Clever and quite\neffective!\n\nIn a word, heaps are useful memory structures to know.  I use them in\na few applications, and I think it is good to keep a `heap' module\naround. :-)\n\n--------------------\n[1] The disk balancing algorithms which are current, nowadays, are\nmore annoying than clever, and this is a consequence of the seeking\ncapabilities of the disks.  On devices which cannot seek, like big\ntape drives, the story was quite different, and one had to be very\nclever to ensure (far in advance) that each tape movement will be the\nmost effective possible (that is, will best participate at\n\"progressing\" the merge).  Some tapes were even able to read\nbackwards, and this was also used to avoid the rewinding time.\nBelieve me, real good tape sorts were quite spectacular to watch!\nFrom all times, sorting has always been a Great Art! :-)\n\"\"\"\n\n__all__=['heappush','heappop','heapify','heapreplace','merge',\n'nlargest','nsmallest','heappushpop']\n\nfrom itertools import islice,count,tee,chain\n\ndef heappush(heap,item):\n ''\n heap.append(item)\n _siftdown(heap,0,len(heap)-1)\n \ndef heappop(heap):\n ''\n lastelt=heap.pop()\n if heap:\n  returnitem=heap[0]\n  heap[0]=lastelt\n  _siftup(heap,0)\n else :\n  returnitem=lastelt\n return returnitem\n \ndef heapreplace(heap,item):\n ''\n\n\n\n\n\n\n\n\n \n returnitem=heap[0]\n heap[0]=item\n _siftup(heap,0)\n return returnitem\n \ndef heappushpop(heap,item):\n ''\n if heap and heap[0]<item:\n  item,heap[0]=heap[0],item\n  _siftup(heap,0)\n return item\n \ndef heapify(x):\n ''\n n=len(x)\n \n \n \n \n \n for i in reversed(range(n //2)):\n  _siftup(x,i)\n  \ndef _heappushpop_max(heap,item):\n ''\n if heap and item <heap[0]:\n  item,heap[0]=heap[0],item\n  _siftup_max(heap,0)\n return item\n \ndef _heapify_max(x):\n ''\n n=len(x)\n for i in reversed(range(n //2)):\n  _siftup_max(x,i)\n  \ndef nlargest(n,iterable):\n ''\n\n\n \n if n <0:\n  return []\n it=iter(iterable)\n result=list(islice(it,n))\n if not result:\n  return result\n heapify(result)\n _heappushpop=heappushpop\n for elem in it:\n  _heappushpop(result,elem)\n result.sort(reverse=True )\n return result\n \ndef nsmallest(n,iterable):\n ''\n\n\n \n if n <0:\n  return []\n it=iter(iterable)\n result=list(islice(it,n))\n if not result:\n  return result\n _heapify_max(result)\n _heappushpop=_heappushpop_max\n for elem in it:\n  _heappushpop(result,elem)\n result.sort()\n return result\n \n \n \n \ndef _siftdown(heap,startpos,pos):\n newitem=heap[pos]\n \n \n while pos >startpos:\n  parentpos=(pos -1)>>1\n  parent=heap[parentpos]\n  if newitem <parent:\n   heap[pos]=parent\n   pos=parentpos\n   continue\n  break\n heap[pos]=newitem\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \ndef _siftup(heap,pos):\n endpos=len(heap)\n startpos=pos\n newitem=heap[pos]\n \n childpos=2 *pos+1\n while childpos <endpos:\n \n  rightpos=childpos+1\n  if rightpos <endpos and not heap[childpos]<heap[rightpos]:\n   childpos=rightpos\n   \n  heap[pos]=heap[childpos]\n  pos=childpos\n  childpos=2 *pos+1\n  \n  \n heap[pos]=newitem\n _siftdown(heap,startpos,pos)\n \ndef _siftdown_max(heap,startpos,pos):\n ''\n newitem=heap[pos]\n \n \n while pos >startpos:\n  parentpos=(pos -1)>>1\n  parent=heap[parentpos]\n  if parent <newitem:\n   heap[pos]=parent\n   pos=parentpos\n   continue\n  break\n heap[pos]=newitem\n \ndef _siftup_max(heap,pos):\n ''\n endpos=len(heap)\n startpos=pos\n newitem=heap[pos]\n \n childpos=2 *pos+1\n while childpos <endpos:\n \n  rightpos=childpos+1\n  if rightpos <endpos and not heap[rightpos]<heap[childpos]:\n   childpos=rightpos\n   \n  heap[pos]=heap[childpos]\n  pos=childpos\n  childpos=2 *pos+1\n  \n  \n heap[pos]=newitem\n _siftdown_max(heap,startpos,pos)\n \n \n \n \n \n \n \n \ndef merge(*iterables):\n ''\n\n\n\n\n\n\n\n\n \n _heappop,_heapreplace,_StopIteration=heappop,heapreplace,StopIteration\n _len=len\n \n h=[]\n h_append=h.append\n for itnum,it in enumerate(map(iter,iterables)):\n  try :\n   next=it.__next__\n   h_append([next(),itnum,next])\n  except _StopIteration:\n   pass\n heapify(h)\n \n while _len(h)>1:\n  try :\n   while True :\n    v,itnum,next=s=h[0]\n    yield v\n    s[0]=next()\n    _heapreplace(h,s)\n  except _StopIteration:\n   _heappop(h)\n if h:\n \n  v,itnum,next=h[0]\n  yield v\n  yield from next.__self__\n  \n  \n_nsmallest=nsmallest\ndef nsmallest(n,iterable,key=None ):\n ''\n\n\n \n \n if n ==1:\n  it=iter(iterable)\n  head=list(islice(it,1))\n  if not head:\n   return []\n  if key is None :\n   return [min(chain(head,it))]\n  return [min(chain(head,it),key=key)]\n  \n  \n try :\n  size=len(iterable)\n except (TypeError,AttributeError):\n  pass\n else :\n  if n >=size:\n   return sorted(iterable,key=key)[:n]\n   \n   \n if key is None :\n  it=zip(iterable,count())\n  result=_nsmallest(n,it)\n  return [r[0]for r in result]\n  \n  \n in1,in2=tee(iterable)\n it=zip(map(key,in1),count(),in2)\n result=_nsmallest(n,it)\n return [r[2]for r in result]\n \n_nlargest=nlargest\ndef nlargest(n,iterable,key=None ):\n ''\n\n\n \n \n \n if n ==1:\n  it=iter(iterable)\n  head=list(islice(it,1))\n  if not head:\n   return []\n  if key is None :\n   return [max(chain(head,it))]\n  return [max(chain(head,it),key=key)]\n  \n  \n try :\n  size=len(iterable)\n except (TypeError,AttributeError):\n  pass\n else :\n  if n >=size:\n   return sorted(iterable,key=key,reverse=True )[:n]\n   \n   \n if key is None :\n  it=zip(iterable,count(0,-1))\n  result=_nlargest(n,it)\n  return [r[0]for r in result]\n  \n  \n in1,in2=tee(iterable)\n it=zip(map(key,in1),count(0,-1),in2)\n result=_nlargest(n,it)\n return [r[2]for r in result]\n \nif __name__ ==\"__main__\":\n\n heap=[]\n data=[1,3,5,7,9,2,4,6,8,0]\n for item in data:\n  heappush(heap,item)\n sort=[]\n while heap:\n  sort.append(heappop(heap))\n print(sort)\n \n import doctest\n doctest.testmod()\n"], "posix": [".py", "''\n\n\n\n\nimport datetime\n\nfrom browser import window\n\ndef _randint(a,b):\n return int(window.Math.random()*(b -a+1)+a)\n \nF_OK=0\n\nO_APPEND=8\n\nO_BINARY=32768\n\nO_CREAT=256\n\nO_EXCL=1024\n\nO_NOINHERIT=128\n\nO_RANDOM=16\n\nO_RDONLY=0\n\nO_RDWR=2\n\nO_SEQUENTIAL=32\n\nO_SHORT_LIVED=4096\n\nO_TEMPORARY=64\n\nO_TEXT=16384\n\nO_TRUNC=512\n\nO_WRONLY=1\n\nP_DETACH=4\n\nP_NOWAIT=1\n\nP_NOWAITO=3\n\nP_OVERLAY=2\n\nP_WAIT=0\n\nR_OK=4\n\nTMP_MAX=32767\n\nW_OK=2\n\nX_OK=1\n\nclass __loader__:\n pass\n \ndef _exit(*args,**kw):\n ''\n \n pass\n \ndef _getdiskusage(*args,**kw):\n ''\n \n pass\n \ndef _getfileinformation(*args,**kw):\n pass\n \ndef _getfinalpathname(*args,**kw):\n pass\n \ndef _getfullpathname(*args,**kw):\n pass\n \n_have_functions=['MS_WINDOWS']\n\ndef _isdir(*args,**kw):\n ''\n pass\n \ndef abort(*args,**kw):\n ''\n\n \n pass\n \ndef access(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef chdir(*args,**kw):\n ''\n\n\n\n\n \n pass\n \ndef chmod(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef close(*args,**kw):\n ''\n \n pass\n \ndef closerange(*args,**kw):\n ''\n \n pass\n \ndef device_encoding(*args,**kw):\n ''\n\n \n pass\n \ndef dup(*args,**kw):\n ''\n \n pass\n \ndef dup2(*args,**kw):\n ''\n \n pass\n \nenviron={'PYTHONUSERBASE':' '}\n\nerror=OSError\n\ndef execv(*args,**kw):\n ''\n\n\n\n \n pass\n \ndef execve(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n \n pass\n \ndef fstat(*args,**kw):\n ''\n\n \n pass\n \ndef fsync(*args,**kw):\n ''\n \n pass\n \ndef get_terminal_size(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef getcwd(*args,**kw):\n ''\n \n return __BRYTHON__.brython_path\n \ndef getcwdb(*args,**kw):\n ''\n \n pass\n \ndef getlogin(*args,**kw):\n ''\n \n pass\n \ndef getpid(*args,**kw):\n ''\n \n return 0\n \ndef getppid(*args,**kw):\n ''\n\n\n \n pass\n \ndef isatty(*args,**kw):\n ''\n\n \n pass\n \ndef kill(*args,**kw):\n ''\n \n pass\n \ndef link(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef listdir(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef lseek(*args,**kw):\n ''\n\n \n pass\n \ndef lstat(*args,**kw):\n ''\n\n \n return stat_result()\n \ndef mkdir(*args,**kw):\n ''\n\n\n\n\n\n\n\n \n pass\n \ndef open(path,flags,mode=0o777,*args,dir_fd=None ):\n ''\n\n\n\n\n\n \n \n \n from browser.local_storage import storage\n \n class mystorage:\n  def __init__(self,path,flags):\n   self._path=path\n   self._pos=0\n   self._flags=flags\n   \n   if self._flags&O_RDONLY ==O_RDONLY:\n    self._data=storage.get(self._path,None )\n    if self._data is None :\n     raise FileNotFoundError(\"%s not found\"%self._path)\n   elif self._flags&O_WRONLY ==O_WRONLY:\n    storage[self._path]=''\n    \n  def seek(self,pos):\n   self._pos=pos\n   \n  def read(self,size=None ):\n   if size is None :\n    _result=self._data[self._pos:]\n    self._pos=len(self._data)\n    return _result\n    \n   assert size <=len(self._data)-self._pos\n   _result=self._data[self._pos:self._pos+size]\n   self._pos +=size\n   return _result\n   \n  def write(self,data):\n   storage[self._path]+=str(data)\n   \n  def close(self):\n   pass\n   \n return mystorage(path,flags)\n \ndef pipe(*args,**kw):\n ''\n \n pass\n \ndef putenv(*args,**kw):\n ''\n \n pass\n \ndef read(*args,**kw):\n ''\n \n pass\n \ndef readlink(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef remove(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef rename(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef replace(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef rmdir(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef spawnv(*args,**kw):\n ''\n\n\n\n\n \n pass\n \ndef spawnve(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef startfile(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef stat(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n return stat_result()\n \ndef stat_float_times(*args,**kw):\n ''\n\n\n\n\n \n pass\n \nclass stat_result:\n\n def __init__(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  self.st_atime=datetime.datetime.now()\n  self.st_mtime=self.st_ctime=self.st_atime_ns=  self.st_mtime_ns=self.st_ctime_ns=self.st_atime\n  self.st_uid=self.st_gid=self.st_ino=-1\n  self.st_mode=0\n  self.st_size=1\n  \nclass statvfs_result:\n pass\n \ndef strerror(*args,**kw):\n ''\n \n pass\n \ndef symlink(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef system(*args,**kw):\n ''\n \n pass\n \nclass terminal_size:\n pass\n \ndef times(*args,**kw):\n ''\n\n\n \n pass\n \nclass times_result:\n pass\n \ndef umask(*args,**kw):\n ''\n \n pass\n \nclass uname_result:\n pass\n \ndef unlink(path,*args,dir_fd=None ):\n ''\n\n\n\n\n\n \n pass\n \ndef urandom(n):\n ''\n \n randbytes=[_randint(0,255)for i in range(n)]\n return bytes(randbytes)\n \ndef utime(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef waitpid(*args,**kw):\n ''\n \n pass\n \ndef write(*args,**kw):\n ''\n \n pass\n \n \n \ndef WIFSIGNALED(a):\n return False\n \ndef WTERMSIG(status):\n return 0\n \ndef WIFSIGNALED(status):\n ''\n return False\n \ndef WIFEXITED(status):\n return False\n \ndef WEXITSTATUS(status):\n pass\n \ndef WNOHANG():\n return (0,0)\n"], "operator": [".py", "#!/usr/bin/env python3\n''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndef lt(a,b):\n ''\n return a <b\n__lt__=lt\n\ndef le(a,b):\n ''\n return a <=b\n__le__=le\n\ndef eq(a,b):\n ''\n return a ==b\n__eq__=eq\n\ndef ne(a,b):\n ''\n return a !=b\n__ne__=ne\n\ndef ge(a,b):\n ''\n return a >=b\n__ge__=ge\n\ndef gt(a,b):\n ''\n return a >b\n__gt__=gt\n\ndef not_(a):\n ''\n return not a\n__not__=not_\n\ndef truth(a):\n ''\n \n return bool(a)\n \ndef is_(a,b):\n ''\n return a is b\n \n \n \n \n \n \n \n \n \n \n \n__abs__=abs\nabs=abs\n\n\ndef add(a,b):\n ''\n return a+b\n__add__=add\n\ndef and_(a,b):\n ''\n return a&b\n__and__=and_\n\ndef floordiv(a,b):\n ''\n return a //b\n__floordiv__=floordiv\n\ndef index(a):\n ''\n return a.__index__()\n__index__=index\n\ndef inv(a):\n ''\n return ~a\n \ninvert=__inv__=__invert__=inv\n\ndef lshift(a,b):\n ''\n return a <<b\n__lshift__=lshift\n\ndef mod(a,b):\n ''\n return a %b\n__mod__=mod\n\ndef mul(a,b):\n ''\n return a *b\n__mul__=mul\n\ndef neg(a):\n ''\n return -a\n__neg__=neg\n\ndef or_(a,b):\n ''\n return a |b\n__or__=or_\n\ndef pos(a):\n ''\n return +a\n \n__pos__=pos\n\ndef pow(a,b):\n ''\n return a **b\n__pow__=pow\n\ndef rshift(a,b):\n ''\n return a >>b\n__rshift__=rshift\n\ndef sub(a,b):\n ''\n return a -b\n__sub__=sub\n\ndef truediv(a,b):\n ''\n return a /b\n__truediv__=truediv\n\ndef xor(a,b):\n ''\n return a ^b\n__xor__=xor\n\ndef concat(a,b):\n ''\n if not (hasattr(a,'__getitem__')and hasattr(b,'__getitem__')):\n  raise TypeError('a and b must be sequences')\n return a+b\n__concat__=concat\n\ndef contains(a,b):\n ''\n return b in a\n__contains__=contains\n\ndef countOf(a,b):\n ''\n count=0\n for i in a:\n  if i ==b:\n   count +=1\n return count\n \ndef delitem(a,b):\n ''\n del a[b]\n__delitem__=delitem\n\ndef getitem(a,b):\n ''\n return a[b]\n__getitem__=getitem\n\n\ndef indexOf(a,b):\n ''\n \n for i,j in enumerate(a):\n  if j ==b:\n   return i\n else :\n  raise ValueError('b not found in a')\n  \ndef setitem(a,b,c):\n ''\n a[b]=c\n__setitem__=setitem\n\n\n\nclass attrgetter:\n ''\n\n\n\n\n\n \n def __init__(self,attr,*attrs):\n  self._attrs=(attr,)\n  self._attrs +=attrs\n  if any(not isinstance(attr,str)for attr in self._attrs):\n   raise TypeError('attribute name must be a string')\n   \n @staticmethod\n def _resolve_attr(obj,attr):\n  for name in attr.split('.'):\n  \n   obj=getattr(obj,name)\n  return obj\n  \n def __call__(self,obj):\n  if len(self._attrs)==1:\n   return self._resolve_attr(obj,self._attrs[0])\n  return tuple(self._resolve_attr(obj,attr)for attr in self._attrs)\n  \nclass itemgetter:\n ''\n\n\n\n \n def __init__(self,item,*items):\n  self._items=(item,)\n  self._items +=items\n  \n def __call__(self,obj):\n  if len(self._items)==1:\n   return obj[self._items[0]]\n  return tuple(obj[item]for item in self._items)\n  \nclass methodcaller:\n ''\n\n\n\n\n \n \n def __init__(self,name,*args,**kwargs):\n  self._name=name\n  self._args=args\n  self._kwargs=kwargs\n  \n def __call__(self,obj):\n  return getattr(obj,self._name)(*self._args,**self._kwargs)\n  \n  \ndef iadd(a,b):\n ''\n a +=b\n return a\n__iadd__=iadd\n\ndef iand(a,b):\n ''\n a &=b\n return a\n__iand__=iand\n\ndef iconcat(a,b):\n ''\n if not (hasattr(a,'__getitem__')and hasattr(b,'__getitem__')):\n  raise TypeError('a and b must be sequences')\n a +=b\n return a\n__iconcat__=iconcat\n\ndef ifloordiv(a,b):\n ''\n a //=b\n return a\n__ifloordiv__=ifloordiv\n\ndef ilshift(a,b):\n ''\n a <<=b\n return a\n__ilshift__=ilshift\n\ndef imod(a,b):\n ''\n a %=b\n return a\n__imod__=imod\n\ndef imul(a,b):\n ''\n a *=b\n return a\n__imul__=imul\n\ndef ior(a,b):\n ''\n a |=b\n return a\n__ior__=ior\n\ndef ipow(a,b):\n ''\n a **=b\n return a\n__ipow__=ipow\n\ndef irshift(a,b):\n ''\n a >>=b\n return a\n__irshift__=irshift\n\ndef isub(a,b):\n ''\n a -=b\n return a\n__isub__=isub\n\ndef itruediv(a,b):\n ''\n a /=b\n return a\n__itruediv__=itruediv\n\ndef ixor(a,b):\n ''\n a ^=b\n return a\n__ixor__=ixor\n\ndef length_hint(obj,default=0):\n ''\n\n\n\n\n\n\n \n try :\n  return len(obj)\n except TypeError:\n  try :\n   val=obj.__length_hint__()\n   if val is NotImplemented:\n    raise TypeError\n  except (AttributeError,TypeError):\n   return default\n  else :\n   if not val >0:\n    raise ValueError('default must be > 0')\n   return val\n   \n   \n   \n   \n   \n   \n"], "sys": [".py", "\nfrom _sys import *\n\n_getframe=Getframe\nfrom javascript import JSObject\nfrom browser import window\n\nbrython_debug_mode=__BRYTHON__.debug\n\nargv=['__main__']\n\nbase_exec_prefix=__BRYTHON__.brython_path\n\nbase_prefix=__BRYTHON__.brython_path\n\nbuiltin_module_names=__BRYTHON__.builtin_module_names\n\nbyteorder='little'\n\ndef exc_info():\n exc=__BRYTHON__.current_exception\n if exc is None :\n  return (None ,None ,None )\n return (exc.__class__,exc,exc.traceback)\n \nexec_prefix=__BRYTHON__.brython_path\n\nexecutable=__BRYTHON__.brython_path+'/brython.js'\n\ndef exit(i=None ):\n raise SystemExit('')\n \nclass flag_class:\n def __init__(self):\n  self.debug=0\n  self.inspect=0\n  self.interactive=0\n  self.optimize=0\n  self.dont_write_bytecode=0\n  self.no_user_site=0\n  self.no_site=0\n  self.ignore_environment=0\n  self.verbose=0\n  self.bytes_warning=0\n  self.quiet=0\n  self.hash_randomization=1\n  \nflags=flag_class()\n\ndef getfilesystemencoding(*args,**kw):\n ''\n\n \n return'utf-8'\n \ndef getrecursionlimit():\n return 200\n \nmaxsize=2 **63 -1\n\nmaxunicode=1114111\n\n\n\n\n\n\nplatform=\"brython\"\n\nprefix=__BRYTHON__.brython_path\n\nversion='.'.join(str(x)for x in __BRYTHON__.version_info[:3])\nversion +=\" (default, %s) \\n[Javascript 1.5] on Brython\"%__BRYTHON__.compiled_date\nhexversion=0x03000000\n\nclass __version_info(object):\n def __init__(self,version_info):\n  self.version_info=version_info\n  self.major=version_info[0]\n  self.minor=version_info[1]\n  self.micro=version_info[2]\n  self.releaselevel=version_info[3]\n  self.serial=version_info[4]\n  \n def __getitem__(self,index):\n  if isinstance(self.version_info[index],list):\n   return tuple(self.version_info[index])\n  return self.version_info[index]\n  \n def hexversion(self):\n  try :\n   return'0%d0%d0%d'%(self.major,self.minor,self.micro)\n  finally :\n   return'0%d0000'%(self.major)\n   \n def __str__(self):\n  _s=\"sys.version(major=%d, minor=%d, micro=%d, releaselevel='%s', serial=%d)\"\n  return _s %(self.major,self.minor,self.micro,\n  self.releaselevel,self.serial)\n  \n  \n def __eq__(self,other):\n  if isinstance(other,tuple):\n   return (self.major,self.minor,self.micro)==other\n   \n  raise Error(\"Error! I don't know how to compare!\")\n  \n def __ge__(self,other):\n  if isinstance(other,tuple):\n   return (self.major,self.minor,self.micro)>=other\n   \n  raise Error(\"Error! I don't know how to compare!\")\n  \n def __gt__(self,other):\n  if isinstance(other,tuple):\n   return (self.major,self.minor,self.micro)>other\n   \n  raise Error(\"Error! I don't know how to compare!\")\n  \n def __le__(self,other):\n  if isinstance(other,tuple):\n   return (self.major,self.minor,self.micro)<=other\n   \n  raise Error(\"Error! I don't know how to compare!\")\n  \n def __lt__(self,other):\n  if isinstance(other,tuple):\n   return (self.major,self.minor,self.micro)<other\n   \n  raise Error(\"Error! I don't know how to compare!\")\n  \n def __ne__(self,other):\n  if isinstance(other,tuple):\n   return (self.major,self.minor,self.micro)!=other\n   \n  raise Error(\"Error! I don't know how to compare!\")\n  \n  \n  \nversion_info=__version_info(__BRYTHON__.version_info)\n\nclass _implementation:\n def __init__(self):\n  self.name='brython'\n  self.version=__version_info(__BRYTHON__.implementation)\n  self.hexversion=self.version.hexversion()\n  self.cache_tag=None\n  \n def __repr__(self):\n  return\"namespace(name='%s' version=%s hexversion='%s')\"%(self.name,self.version,self.hexversion)\n  \n def __str__(self):\n  return\"namespace(name='%s' version=%s hexversion='%s')\"%(self.name,self.version,self.hexversion)\n  \nimplementation=_implementation()\n\nclass _hash_info:\n def __init__(self):\n  self.width=32,\n  self.modulus=2147483647\n  self.inf=314159\n  self.nan=0\n  self.imag=1000003\n  self.algorithm='siphash24'\n  self.hash_bits=64\n  self.seed_bits=128\n  cutoff=0\n  \n def __repr(self):\n \n  return\"sys.hash_info(width=32, modulus=2147483647, inf=314159, nan=0, imag=1000003, algorithm='siphash24', hash_bits=64, seed_bits=128, cutoff=0)\"\n  \nhash_info=_hash_info()\n\nwarnoptions=[]\n\ndef getfilesystemencoding():\n return'utf-8'\n \n \n__stdout__=__BRYTHON__.stdout\n__stderr__=__BRYTHON__.stderr\n__stdin__=__BRYTHON__.stdin\n\n\ndel JSObject\ndel _implementation\n"], "encodings.koi8_u": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='koi8-u',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u2500'\n'\\u2502'\n'\\u250c'\n'\\u2510'\n'\\u2514'\n'\\u2518'\n'\\u251c'\n'\\u2524'\n'\\u252c'\n'\\u2534'\n'\\u253c'\n'\\u2580'\n'\\u2584'\n'\\u2588'\n'\\u258c'\n'\\u2590'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2320'\n'\\u25a0'\n'\\u2219'\n'\\u221a'\n'\\u2248'\n'\\u2264'\n'\\u2265'\n'\\xa0'\n'\\u2321'\n'\\xb0'\n'\\xb2'\n'\\xb7'\n'\\xf7'\n'\\u2550'\n'\\u2551'\n'\\u2552'\n'\\u0451'\n'\\u0454'\n'\\u2554'\n'\\u0456'\n'\\u0457'\n'\\u2557'\n'\\u2558'\n'\\u2559'\n'\\u255a'\n'\\u255b'\n'\\u0491'\n'\\u255d'\n'\\u255e'\n'\\u255f'\n'\\u2560'\n'\\u2561'\n'\\u0401'\n'\\u0404'\n'\\u2563'\n'\\u0406'\n'\\u0407'\n'\\u2566'\n'\\u2567'\n'\\u2568'\n'\\u2569'\n'\\u256a'\n'\\u0490'\n'\\u256c'\n'\\xa9'\n'\\u044e'\n'\\u0430'\n'\\u0431'\n'\\u0446'\n'\\u0434'\n'\\u0435'\n'\\u0444'\n'\\u0433'\n'\\u0445'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u044f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0436'\n'\\u0432'\n'\\u044c'\n'\\u044b'\n'\\u0437'\n'\\u0448'\n'\\u044d'\n'\\u0449'\n'\\u0447'\n'\\u044a'\n'\\u042e'\n'\\u0410'\n'\\u0411'\n'\\u0426'\n'\\u0414'\n'\\u0415'\n'\\u0424'\n'\\u0413'\n'\\u0425'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u042f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0416'\n'\\u0412'\n'\\u042c'\n'\\u042b'\n'\\u0417'\n'\\u0428'\n'\\u042d'\n'\\u0429'\n'\\u0427'\n'\\u042a'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "tempfile": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\n\"NamedTemporaryFile\",\"TemporaryFile\",\n\"SpooledTemporaryFile\",\"TemporaryDirectory\",\n\"mkstemp\",\"mkdtemp\",\n\"mktemp\",\n\"TMP_MAX\",\"gettempprefix\",\n\"tempdir\",\"gettempdir\"\n]\n\n\n\n\nimport warnings as _warnings\nimport sys as _sys\nimport io as _io\nimport os as _os\nimport errno as _errno\nfrom random import Random as _Random\n\ntry :\n import fcntl as _fcntl\nexcept ImportError:\n def _set_cloexec(fd):\n  pass\nelse :\n def _set_cloexec(fd):\n  try :\n   flags=_fcntl.fcntl(fd,_fcntl.F_GETFD,0)\n  except OSError:\n   pass\n  else :\n  \n   flags |=_fcntl.FD_CLOEXEC\n   _fcntl.fcntl(fd,_fcntl.F_SETFD,flags)\n   \n   \ntry :\n import _thread\nexcept ImportError:\n import _dummy_thread as _thread\n_allocate_lock=_thread.allocate_lock\n\n_text_openflags=_os.O_RDWR |_os.O_CREAT |_os.O_EXCL\nif hasattr(_os,'O_NOINHERIT'):\n _text_openflags |=_os.O_NOINHERIT\nif hasattr(_os,'O_NOFOLLOW'):\n _text_openflags |=_os.O_NOFOLLOW\n \n_bin_openflags=_text_openflags\nif hasattr(_os,'O_BINARY'):\n _bin_openflags |=_os.O_BINARY\n \nif hasattr(_os,'TMP_MAX'):\n TMP_MAX=_os.TMP_MAX\nelse :\n TMP_MAX=10000\n \n \n \ntemplate=\"tmp\"\n\n\n\n_once_lock=_allocate_lock()\n\nif hasattr(_os,\"lstat\"):\n _stat=_os.lstat\nelif hasattr(_os,\"stat\"):\n _stat=_os.stat\nelse :\n\n\n def _stat(fn):\n  f=open(fn)\n  f.close()\n  \ndef _exists(fn):\n try :\n  _stat(fn)\n except OSError:\n  return False\n else :\n  return True\n  \nclass _RandomNameSequence:\n ''\n\n\n\n\n \n \n characters=\"abcdefghijklmnopqrstuvwxyz0123456789_\"\n \n @property\n def rng(self):\n  cur_pid=_os.getpid()\n  if cur_pid !=getattr(self,'_rng_pid',None ):\n   self._rng=_Random()\n   self._rng_pid=cur_pid\n  return self._rng\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  c=self.characters\n  choose=self.rng.choice\n  letters=[choose(c)for dummy in\"123456\"]\n  return''.join(letters)\n  \ndef _candidate_tempdir_list():\n ''\n \n \n dirlist=[]\n \n \n for envname in'TMPDIR','TEMP','TMP':\n  dirname=_os.getenv(envname)\n  if dirname:dirlist.append(dirname)\n  \n  \n if _os.name =='nt':\n  dirlist.extend([r'c:\\temp',r'c:\\tmp',r'\\temp',r'\\tmp'])\n else :\n  dirlist.extend(['/tmp','/var/tmp','/usr/tmp'])\n  \n  \n try :\n  dirlist.append(_os.getcwd())\n except (AttributeError,OSError):\n  dirlist.append(_os.curdir)\n  \n return dirlist\n \ndef _get_default_tempdir():\n ''\n\n\n\n\n\n \n \n namer=_RandomNameSequence()\n dirlist=_candidate_tempdir_list()\n \n for dir in dirlist:\n  if dir !=_os.curdir:\n   dir=_os.path.normcase(_os.path.abspath(dir))\n   \n  for seq in range(100):\n   name=next(namer)\n   filename=_os.path.join(dir,name)\n   try :\n    fd=_os.open(filename,_bin_openflags,0o600)\n    try :\n     try :\n      with _io.open(fd,'wb',closefd=False )as fp:\n       fp.write(b'blat')\n     finally :\n      _os.close(fd)\n    finally :\n     _os.unlink(filename)\n    return dir\n   except FileExistsError:\n    pass\n   except OSError:\n    break\n raise FileNotFoundError(_errno.ENOENT,\n \"No usable temporary directory found in %s\"%\n dirlist)\n \n_name_sequence=None\n\ndef _get_candidate_names():\n ''\n \n global _name_sequence\n if _name_sequence is None :\n  _once_lock.acquire()\n  try :\n   if _name_sequence is None :\n    _name_sequence=_RandomNameSequence()\n  finally :\n   _once_lock.release()\n return _name_sequence\n \n \ndef _mkstemp_inner(dir,pre,suf,flags):\n ''\n \n names=_get_candidate_names()\n \n for seq in range(TMP_MAX):\n  name=next(names)\n  file=_os.path.join(dir,pre+name+suf)\n  try :\n   fd=_os.open(file,flags,0o600)\n   _set_cloexec(fd)\n   return (fd,_os.path.abspath(file))\n  except FileExistsError:\n   continue\n  except PermissionError:\n  \n  \n   if _os.name =='nt':\n    continue\n   else :\n    raise\n    \n raise FileExistsError(_errno.EEXIST,\n \"No usable temporary file name found\")\n \n \n \n \ndef gettempprefix():\n ''\n return template\n \ntempdir=None\n\ndef gettempdir():\n ''\n global tempdir\n if tempdir is None :\n  _once_lock.acquire()\n  try :\n   if tempdir is None :\n    tempdir=_get_default_tempdir()\n  finally :\n   _once_lock.release()\n return tempdir\n \ndef mkstemp(suffix=\"\",prefix=template,dir=None ,text=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if dir is None :\n  dir=gettempdir()\n  \n if text:\n  flags=_text_openflags\n else :\n  flags=_bin_openflags\n  \n return _mkstemp_inner(dir,prefix,suffix,flags)\n \n \ndef mkdtemp(suffix=\"\",prefix=template,dir=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n if dir is None :\n  dir=gettempdir()\n  \n names=_get_candidate_names()\n \n for seq in range(TMP_MAX):\n  name=next(names)\n  file=_os.path.join(dir,prefix+name+suffix)\n  try :\n   _os.mkdir(file,0o700)\n   return file\n  except FileExistsError:\n   continue\n   \n raise FileExistsError(_errno.EEXIST,\n \"No usable temporary directory name found\")\n \ndef mktemp(suffix=\"\",prefix=template,dir=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n if dir is None :\n  dir=gettempdir()\n  \n names=_get_candidate_names()\n for seq in range(TMP_MAX):\n  name=next(names)\n  file=_os.path.join(dir,prefix+name+suffix)\n  if not _exists(file):\n   return file\n   \n raise FileExistsError(_errno.EEXIST,\n \"No usable temporary filename found\")\n \n \nclass _TemporaryFileWrapper:\n ''\n\n\n\n\n \n \n def __init__(self,file,name,delete=True ):\n  self.file=file\n  self.name=name\n  self.close_called=False\n  self.delete=delete\n  \n def __getattr__(self,name):\n \n \n \n  file=self.__dict__['file']\n  a=getattr(file,name)\n  if not isinstance(a,int):\n   setattr(self,name,a)\n  return a\n  \n  \n  \n def __enter__(self):\n  self.file.__enter__()\n  return self\n  \n  \n def __iter__(self):\n  return iter(self.file)\n  \n  \n  \n  \n if _os.name !='nt':\n \n \n \n \n \n  unlink=_os.unlink\n  \n  def close(self):\n   if not self.close_called:\n    self.close_called=True\n    self.file.close()\n    if self.delete:\n     self.unlink(self.name)\n     \n  def __del__(self):\n   self.close()\n   \n   \n   \n  def __exit__(self,exc,value,tb):\n   result=self.file.__exit__(exc,value,tb)\n   self.close()\n   return result\n else :\n  def __exit__(self,exc,value,tb):\n   self.file.__exit__(exc,value,tb)\n   \n   \ndef NamedTemporaryFile(mode='w+b',buffering=-1,encoding=None ,\nnewline=None ,suffix=\"\",prefix=template,\ndir=None ,delete=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if dir is None :\n  dir=gettempdir()\n  \n flags=_bin_openflags\n \n \n \n if _os.name =='nt'and delete:\n  flags |=_os.O_TEMPORARY\n  \n (fd,name)=_mkstemp_inner(dir,prefix,suffix,flags)\n file=_io.open(fd,mode,buffering=buffering,\n newline=newline,encoding=encoding)\n \n return _TemporaryFileWrapper(file,name,delete)\n \nif _os.name !='posix'or _os.sys.platform =='cygwin':\n\n\n TemporaryFile=NamedTemporaryFile\n \nelse :\n def TemporaryFile(mode='w+b',buffering=-1,encoding=None ,\n newline=None ,suffix=\"\",prefix=template,\n dir=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if dir is None :\n   dir=gettempdir()\n   \n  flags=_bin_openflags\n  \n  (fd,name)=_mkstemp_inner(dir,prefix,suffix,flags)\n  try :\n   _os.unlink(name)\n   return _io.open(fd,mode,buffering=buffering,\n   newline=newline,encoding=encoding)\n  except :\n   _os.close(fd)\n   raise\n   \nclass SpooledTemporaryFile:\n ''\n\n\n \n _rolled=False\n \n def __init__(self,max_size=0,mode='w+b',buffering=-1,\n encoding=None ,newline=None ,\n suffix=\"\",prefix=template,dir=None ):\n  if'b'in mode:\n   self._file=_io.BytesIO()\n  else :\n  \n  \n  \n   self._file=_io.StringIO(newline=\"\\n\")\n  self._max_size=max_size\n  self._rolled=False\n  self._TemporaryFileArgs={'mode':mode,'buffering':buffering,\n  'suffix':suffix,'prefix':prefix,\n  'encoding':encoding,'newline':newline,\n  'dir':dir}\n  \n def _check(self,file):\n  if self._rolled:return\n  max_size=self._max_size\n  if max_size and file.tell()>max_size:\n   self.rollover()\n   \n def rollover(self):\n  if self._rolled:return\n  file=self._file\n  newfile=self._file=TemporaryFile(**self._TemporaryFileArgs)\n  del self._TemporaryFileArgs\n  \n  newfile.write(file.getvalue())\n  newfile.seek(file.tell(),0)\n  \n  self._rolled=True\n  \n  \n  \n  \n  \n  \n  \n def __enter__(self):\n  if self._file.closed:\n   raise ValueError(\"Cannot enter context with closed file\")\n  return self\n  \n def __exit__(self,exc,value,tb):\n  self._file.close()\n  \n  \n def __iter__(self):\n  return self._file.__iter__()\n  \n def close(self):\n  self._file.close()\n  \n @property\n def closed(self):\n  return self._file.closed\n  \n @property\n def encoding(self):\n  try :\n   return self._file.encoding\n  except AttributeError:\n   if'b'in self._TemporaryFileArgs['mode']:\n    raise\n   return self._TemporaryFileArgs['encoding']\n   \n def fileno(self):\n  self.rollover()\n  return self._file.fileno()\n  \n def flush(self):\n  self._file.flush()\n  \n def isatty(self):\n  return self._file.isatty()\n  \n @property\n def mode(self):\n  try :\n   return self._file.mode\n  except AttributeError:\n   return self._TemporaryFileArgs['mode']\n   \n @property\n def name(self):\n  try :\n   return self._file.name\n  except AttributeError:\n   return None\n   \n @property\n def newlines(self):\n  try :\n   return self._file.newlines\n  except AttributeError:\n   if'b'in self._TemporaryFileArgs['mode']:\n    raise\n   return self._TemporaryFileArgs['newline']\n   \n def read(self,*args):\n  return self._file.read(*args)\n  \n def readline(self,*args):\n  return self._file.readline(*args)\n  \n def readlines(self,*args):\n  return self._file.readlines(*args)\n  \n def seek(self,*args):\n  self._file.seek(*args)\n  \n @property\n def softspace(self):\n  return self._file.softspace\n  \n def tell(self):\n  return self._file.tell()\n  \n def truncate(self,size=None ):\n  if size is None :\n   self._file.truncate()\n  else :\n   if size >self._max_size:\n    self.rollover()\n   self._file.truncate(size)\n   \n def write(self,s):\n  file=self._file\n  rv=file.write(s)\n  self._check(file)\n  return rv\n  \n def writelines(self,iterable):\n  file=self._file\n  rv=file.writelines(iterable)\n  self._check(file)\n  return rv\n  \n  \nclass TemporaryDirectory(object):\n ''\n\n\n\n\n\n\n\n\n \n \n def __init__(self,suffix=\"\",prefix=template,dir=None ):\n  self._closed=False\n  self.name=None\n  self.name=mkdtemp(suffix,prefix,dir)\n  \n def __repr__(self):\n  return\"<{} {!r}>\".format(self.__class__.__name__,self.name)\n  \n def __enter__(self):\n  return self.name\n  \n def cleanup(self,_warn=False ):\n  if self.name and not self._closed:\n   try :\n    self._rmtree(self.name)\n   except (TypeError,AttributeError)as ex:\n   \n   \n   \n    if\"None\"not in str(ex):\n     raise\n    print(\"ERROR: {!r} while cleaning up {!r}\".format(ex,self,),\n    file=_sys.stderr)\n    return\n   self._closed=True\n   if _warn:\n    self._warn(\"Implicitly cleaning up {!r}\".format(self),\n    ResourceWarning)\n    \n def __exit__(self,exc,value,tb):\n  self.cleanup()\n  \n def __del__(self):\n \n  self.cleanup(_warn=True )\n  \n  \n  \n  \n  \n _listdir=staticmethod(_os.listdir)\n _path_join=staticmethod(_os.path.join)\n _isdir=staticmethod(_os.path.isdir)\n _islink=staticmethod(_os.path.islink)\n _remove=staticmethod(_os.remove)\n _rmdir=staticmethod(_os.rmdir)\n _os_error=OSError\n _warn=_warnings.warn\n \n def _rmtree(self,path):\n \n \n  for name in self._listdir(path):\n   fullname=self._path_join(path,name)\n   try :\n    isdir=self._isdir(fullname)and not self._islink(fullname)\n   except self._os_error:\n    isdir=False\n   if isdir:\n    self._rmtree(fullname)\n   else :\n    try :\n     self._remove(fullname)\n    except self._os_error:\n     pass\n  try :\n   self._rmdir(path)\n  except self._os_error:\n   pass\n"], "fractions": [".py", "\n\n\n\"\"\"Fraction, infinite-precision, real numbers.\"\"\"\n\nfrom decimal import Decimal\nimport math\nimport numbers\nimport operator\nimport re\nimport sys\n\n__all__=['Fraction','gcd']\n\n\n\ndef gcd(a,b):\n ''\n\n\n\n \n while b:\n  a,b=b,a %b\n return a\n \n \n \n_PyHASH_MODULUS=sys.hash_info.modulus\n\n\n_PyHASH_INF=sys.hash_info.inf\n\n_RATIONAL_FORMAT=re.compile(r\"\"\"\n    \\A\\s*                      # optional whitespace at the start, then\n    (?P<sign>[-+]?)            # an optional sign, then\n    (?=\\d|\\.\\d)                # lookahead for digit or .digit\n    (?P<num>\\d*)               # numerator (possibly empty)\n    (?:                        # followed by\n       (?:/(?P<denom>\\d+))?    # an optional denominator\n    |                          # or\n       (?:\\.(?P<decimal>\\d*))? # an optional fractional part\n       (?:E(?P<exp>[-+]?\\d+))? # and optional exponent\n    )\n    \\s*\\Z                      # and optional whitespace to finish\n\"\"\",re.VERBOSE |re.IGNORECASE)\n\n\nclass Fraction(numbers.Rational):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __slots__=('_numerator','_denominator')\n \n \n def __new__(cls,numerator=0,denominator=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self=super(Fraction,cls).__new__(cls)\n  \n  if denominator is None :\n   if isinstance(numerator,numbers.Rational):\n    self._numerator=numerator.numerator\n    self._denominator=numerator.denominator\n    return self\n    \n   elif isinstance(numerator,float):\n   \n    value=Fraction.from_float(numerator)\n    self._numerator=value._numerator\n    self._denominator=value._denominator\n    return self\n    \n   elif isinstance(numerator,Decimal):\n    value=Fraction.from_decimal(numerator)\n    self._numerator=value._numerator\n    self._denominator=value._denominator\n    return self\n    \n   elif isinstance(numerator,str):\n   \n    m=_RATIONAL_FORMAT.match(numerator)\n    if m is None :\n     raise ValueError('Invalid literal for Fraction: %r'%\n     numerator)\n    numerator=int(m.group('num')or'0')\n    denom=m.group('denom')\n    if denom:\n     denominator=int(denom)\n    else :\n     denominator=1\n     decimal=m.group('decimal')\n     if decimal:\n      scale=10 **len(decimal)\n      numerator=numerator *scale+int(decimal)\n      denominator *=scale\n     exp=m.group('exp')\n     if exp:\n      exp=int(exp)\n      if exp >=0:\n       numerator *=10 **exp\n      else :\n       denominator *=10 **-exp\n    if m.group('sign')=='-':\n     numerator=-numerator\n     \n   else :\n    raise TypeError(\"argument should be a string \"\n    \"or a Rational instance\")\n    \n  elif (isinstance(numerator,numbers.Rational)and\n  isinstance(denominator,numbers.Rational)):\n   numerator,denominator=(\n   numerator.numerator *denominator.denominator,\n   denominator.numerator *numerator.denominator\n   )\n  else :\n   raise TypeError(\"both arguments should be \"\n   \"Rational instances\")\n   \n  if denominator ==0:\n   raise ZeroDivisionError('Fraction(%s, 0)'%numerator)\n  g=gcd(numerator,denominator)\n  self._numerator=numerator //g\n  self._denominator=denominator //g\n  return self\n  \n @classmethod\n def from_float(cls,f):\n  ''\n\n\n\n  \n  if isinstance(f,numbers.Integral):\n   return cls(f)\n  elif not isinstance(f,float):\n   raise TypeError(\"%s.from_float() only takes floats, not %r (%s)\"%\n   (cls.__name__,f,type(f).__name__))\n  if math.isnan(f):\n   raise ValueError(\"Cannot convert %r to %s.\"%(f,cls.__name__))\n  if math.isinf(f):\n   raise OverflowError(\"Cannot convert %r to %s.\"%(f,cls.__name__))\n  return cls(*f.as_integer_ratio())\n  \n @classmethod\n def from_decimal(cls,dec):\n  ''\n  from decimal import Decimal\n  if isinstance(dec,numbers.Integral):\n   dec=Decimal(int(dec))\n  elif not isinstance(dec,Decimal):\n   raise TypeError(\n   \"%s.from_decimal() only takes Decimals, not %r (%s)\"%\n   (cls.__name__,dec,type(dec).__name__))\n  if dec.is_infinite():\n   raise OverflowError(\n   \"Cannot convert %s to %s.\"%(dec,cls.__name__))\n  if dec.is_nan():\n   raise ValueError(\"Cannot convert %s to %s.\"%(dec,cls.__name__))\n  sign,digits,exp=dec.as_tuple()\n  digits=int(''.join(map(str,digits)))\n  if sign:\n   digits=-digits\n  if exp >=0:\n   return cls(digits *10 **exp)\n  else :\n   return cls(digits,10 **-exp)\n   \n def limit_denominator(self,max_denominator=1000000):\n  ''\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  if max_denominator <1:\n   raise ValueError(\"max_denominator should be at least 1\")\n  if self._denominator <=max_denominator:\n   return Fraction(self)\n   \n  p0,q0,p1,q1=0,1,1,0\n  n,d=self._numerator,self._denominator\n  while True :\n   a=n //d\n   q2=q0+a *q1\n   if q2 >max_denominator:\n    break\n   p0,q0,p1,q1=p1,q1,p0+a *p1,q2\n   n,d=d,n -a *d\n   \n  k=(max_denominator -q0)//q1\n  bound1=Fraction(p0+k *p1,q0+k *q1)\n  bound2=Fraction(p1,q1)\n  if abs(bound2 -self)<=abs(bound1 -self):\n   return bound2\n  else :\n   return bound1\n   \n @property\n def numerator(a):\n  return a._numerator\n  \n @property\n def denominator(a):\n  return a._denominator\n  \n def __repr__(self):\n  ''\n  return ('Fraction(%s, %s)'%(self._numerator,self._denominator))\n  \n def __str__(self):\n  ''\n  if self._denominator ==1:\n   return str(self._numerator)\n  else :\n   return'%s/%s'%(self._numerator,self._denominator)\n   \n def _operator_fallbacks(monomorphic_operator,fallback_operator):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  def forward(a,b):\n   if isinstance(b,(int,Fraction)):\n    return monomorphic_operator(a,b)\n   elif isinstance(b,float):\n    return fallback_operator(float(a),b)\n   elif isinstance(b,complex):\n    return fallback_operator(complex(a),b)\n   else :\n    return NotImplemented\n  forward.__name__='__'+fallback_operator.__name__+'__'\n  forward.__doc__=monomorphic_operator.__doc__\n  \n  def reverse(b,a):\n   if isinstance(a,numbers.Rational):\n   \n    return monomorphic_operator(a,b)\n   elif isinstance(a,numbers.Real):\n    return fallback_operator(float(a),float(b))\n   elif isinstance(a,numbers.Complex):\n    return fallback_operator(complex(a),complex(b))\n   else :\n    return NotImplemented\n  reverse.__name__='__r'+fallback_operator.__name__+'__'\n  reverse.__doc__=monomorphic_operator.__doc__\n  \n  return forward,reverse\n  \n def _add(a,b):\n  ''\n  return Fraction(a.numerator *b.denominator+\n  b.numerator *a.denominator,\n  a.denominator *b.denominator)\n  \n __add__,__radd__=_operator_fallbacks(_add,operator.add)\n \n def _sub(a,b):\n  ''\n  return Fraction(a.numerator *b.denominator -\n  b.numerator *a.denominator,\n  a.denominator *b.denominator)\n  \n __sub__,__rsub__=_operator_fallbacks(_sub,operator.sub)\n \n def _mul(a,b):\n  ''\n  return Fraction(a.numerator *b.numerator,a.denominator *b.denominator)\n  \n __mul__,__rmul__=_operator_fallbacks(_mul,operator.mul)\n \n def _div(a,b):\n  ''\n  return Fraction(a.numerator *b.denominator,\n  a.denominator *b.numerator)\n  \n __truediv__,__rtruediv__=_operator_fallbacks(_div,operator.truediv)\n \n def __floordiv__(a,b):\n  ''\n  return math.floor(a /b)\n  \n def __rfloordiv__(b,a):\n  ''\n  return math.floor(a /b)\n  \n def __mod__(a,b):\n  ''\n  div=a //b\n  return a -b *div\n  \n def __rmod__(b,a):\n  ''\n  div=a //b\n  return a -b *div\n  \n def __pow__(a,b):\n  ''\n\n\n\n\n\n  \n  if isinstance(b,numbers.Rational):\n   if b.denominator ==1:\n    power=b.numerator\n    if power >=0:\n     return Fraction(a._numerator **power,\n     a._denominator **power)\n    else :\n     return Fraction(a._denominator **-power,\n     a._numerator **-power)\n   else :\n   \n   \n    return float(a)**float(b)\n  else :\n   return float(a)**b\n   \n def __rpow__(b,a):\n  ''\n  if b._denominator ==1 and b._numerator >=0:\n  \n   return a **b._numerator\n   \n  if isinstance(a,numbers.Rational):\n   return Fraction(a.numerator,a.denominator)**b\n   \n  if b._denominator ==1:\n   return a **b._numerator\n   \n  return a **float(b)\n  \n def __pos__(a):\n  ''\n  return Fraction(a._numerator,a._denominator)\n  \n def __neg__(a):\n  ''\n  return Fraction(-a._numerator,a._denominator)\n  \n def __abs__(a):\n  ''\n  return Fraction(abs(a._numerator),a._denominator)\n  \n def __trunc__(a):\n  ''\n  if a._numerator <0:\n   return -(-a._numerator //a._denominator)\n  else :\n   return a._numerator //a._denominator\n   \n def __floor__(a):\n  ''\n  return a.numerator //a.denominator\n  \n def __ceil__(a):\n  ''\n  \n  return -(-a.numerator //a.denominator)\n  \n def __round__(self,ndigits=None ):\n  ''\n\n\n  \n  if ndigits is None :\n   floor,remainder=divmod(self.numerator,self.denominator)\n   if remainder *2 <self.denominator:\n    return floor\n   elif remainder *2 >self.denominator:\n    return floor+1\n    \n   elif floor %2 ==0:\n    return floor\n   else :\n    return floor+1\n  shift=10 **abs(ndigits)\n  \n  \n  \n  if ndigits >0:\n   return Fraction(round(self *shift),shift)\n  else :\n   return Fraction(round(self /shift)*shift)\n   \n def __hash__(self):\n  ''\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  dinv=pow(self._denominator,_PyHASH_MODULUS -2,_PyHASH_MODULUS)\n  if not dinv:\n   hash_=_PyHASH_INF\n  else :\n   hash_=abs(self._numerator)*dinv %_PyHASH_MODULUS\n  result=hash_ if self >=0 else -hash_\n  return -2 if result ==-1 else result\n  \n def __eq__(a,b):\n  ''\n  if isinstance(b,numbers.Rational):\n   return (a._numerator ==b.numerator and\n   a._denominator ==b.denominator)\n  if isinstance(b,numbers.Complex)and b.imag ==0:\n   b=b.real\n  if isinstance(b,float):\n   if math.isnan(b)or math.isinf(b):\n   \n   \n    return 0.0 ==b\n   else :\n    return a ==a.from_float(b)\n  else :\n  \n  \n   return NotImplemented\n   \n def _richcmp(self,other,op):\n  ''\n\n\n\n\n\n\n\n  \n  \n  if isinstance(other,numbers.Rational):\n   return op(self._numerator *other.denominator,\n   self._denominator *other.numerator)\n  if isinstance(other,float):\n   if math.isnan(other)or math.isinf(other):\n    return op(0.0,other)\n   else :\n    return op(self,self.from_float(other))\n  else :\n   return NotImplemented\n   \n def __lt__(a,b):\n  ''\n  return a._richcmp(b,operator.lt)\n  \n def __gt__(a,b):\n  ''\n  return a._richcmp(b,operator.gt)\n  \n def __le__(a,b):\n  ''\n  return a._richcmp(b,operator.le)\n  \n def __ge__(a,b):\n  ''\n  return a._richcmp(b,operator.ge)\n  \n def __bool__(a):\n  ''\n  return a._numerator !=0\n  \n  \n  \n def __reduce__(self):\n  return (self.__class__,(str(self),))\n  \n def __copy__(self):\n  if type(self)==Fraction:\n   return self\n  return self.__class__(self._numerator,self._denominator)\n  \n def __deepcopy__(self,memo):\n  if type(self)==Fraction:\n   return self\n  return self.__class__(self._numerator,self._denominator)\n"], "xml.sax._exceptions": [".py", "''\n\n\n\n\n\n\n\n\nclass SAXException(Exception):\n ''\n\n\n\n\n\n\n \n \n def __init__(self,msg,exception=None ):\n  ''\n  \n  self._msg=msg\n  self._exception=exception\n  Exception.__init__(self,msg)\n  \n def getMessage(self):\n  ''\n  return self._msg\n  \n def getException(self):\n  ''\n  return self._exception\n  \n def __str__(self):\n  ''\n  return self._msg\n  \n def __getitem__(self,ix):\n  ''\n  \n  raise AttributeError(\"__getitem__\")\n  \n  \n  \n  \nclass SAXParseException(SAXException):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,msg,exception,locator):\n  ''\n  SAXException.__init__(self,msg,exception)\n  self._locator=locator\n  \n  \n  \n  \n  \n  self._systemId=self._locator.getSystemId()\n  self._colnum=self._locator.getColumnNumber()\n  self._linenum=self._locator.getLineNumber()\n  \n def getColumnNumber(self):\n  ''\n  \n  return self._colnum\n  \n def getLineNumber(self):\n  ''\n  return self._linenum\n  \n def getPublicId(self):\n  ''\n  return self._locator.getPublicId()\n  \n def getSystemId(self):\n  ''\n  return self._systemId\n  \n def __str__(self):\n  ''\n  sysid=self.getSystemId()\n  if sysid is None :\n   sysid=\"<unknown>\"\n  linenum=self.getLineNumber()\n  if linenum is None :\n   linenum=\"?\"\n  colnum=self.getColumnNumber()\n  if colnum is None :\n   colnum=\"?\"\n  return\"%s:%s:%s: %s\"%(sysid,linenum,colnum,self._msg)\n  \n  \n  \n  \nclass SAXNotRecognizedException(SAXException):\n ''\n\n\n\n \n pass\n \n \n \n \nclass SAXNotSupportedException(SAXException):\n ''\n\n\n\n\n \n \n pass\n \n \nclass SAXReaderNotAvailable(SAXNotSupportedException):\n ''\n\n\n\n\n \n \n pass\n"], "functools": [".py", "''\n\n\n\n\n\n\n\n\n\n__all__=['update_wrapper','wraps','WRAPPER_ASSIGNMENTS','WRAPPER_UPDATES',\n'total_ordering','cmp_to_key','lru_cache','reduce','partial']\n\nfrom _functools import partial,reduce\nfrom collections import namedtuple\ntry :\n from _thread import RLock\nexcept :\n class RLock:\n  ''\n  def __enter__(self):pass\n  def __exit__(self,exctype,excinst,exctb):pass\n  \n  \n  \n  \n  \n  \n  \n  \n  \nWRAPPER_ASSIGNMENTS=('__module__','__name__','__qualname__','__doc__',\n'__annotations__')\nWRAPPER_UPDATES=('__dict__',)\ndef update_wrapper(wrapper,\nwrapped,\nassigned=WRAPPER_ASSIGNMENTS,\nupdated=WRAPPER_UPDATES):\n ''\n\n\n\n\n\n\n\n\n\n \n wrapper.__wrapped__=wrapped\n for attr in assigned:\n  try :\n   value=getattr(wrapped,attr)\n  except AttributeError:\n   pass\n  else :\n   setattr(wrapper,attr,value)\n for attr in updated:\n  getattr(wrapper,attr).update(getattr(wrapped,attr,{}))\n  \n return wrapper\n \ndef wraps(wrapped,\nassigned=WRAPPER_ASSIGNMENTS,\nupdated=WRAPPER_UPDATES):\n ''\n\n\n\n\n\n\n \n return partial(update_wrapper,wrapped=wrapped,\n assigned=assigned,updated=updated)\n \n \n \n \n \n \ndef total_ordering(cls):\n ''\n convert={\n '__lt__':[('__gt__',lambda self,other:not (self <other or self ==other)),\n ('__le__',lambda self,other:self <other or self ==other),\n ('__ge__',lambda self,other:not self <other)],\n '__le__':[('__ge__',lambda self,other:not self <=other or self ==other),\n ('__lt__',lambda self,other:self <=other and not self ==other),\n ('__gt__',lambda self,other:not self <=other)],\n '__gt__':[('__lt__',lambda self,other:not (self >other or self ==other)),\n ('__ge__',lambda self,other:self >other or self ==other),\n ('__le__',lambda self,other:not self >other)],\n '__ge__':[('__le__',lambda self,other:(not self >=other)or self ==other),\n ('__gt__',lambda self,other:self >=other and not self ==other),\n ('__lt__',lambda self,other:not self >=other)]\n }\n \n roots=[op for op in convert if getattr(cls,op,None )is not getattr(object,op,None )]\n if not roots:\n  raise ValueError('must define at least one ordering operation: < > <= >=')\n root=max(roots)\n for opname,opfunc in convert[root]:\n  if opname not in roots:\n   opfunc.__name__=opname\n   opfunc.__doc__=getattr(int,opname).__doc__\n   setattr(cls,opname,opfunc)\n return cls\n \n \n \n \n \n \ndef cmp_to_key(mycmp):\n ''\n class K(object):\n  __slots__=['obj']\n  def __init__(self,obj):\n   self.obj=obj\n  def __lt__(self,other):\n   return mycmp(self.obj,other.obj)<0\n  def __gt__(self,other):\n   return mycmp(self.obj,other.obj)>0\n  def __eq__(self,other):\n   return mycmp(self.obj,other.obj)==0\n  def __le__(self,other):\n   return mycmp(self.obj,other.obj)<=0\n  def __ge__(self,other):\n   return mycmp(self.obj,other.obj)>=0\n  def __ne__(self,other):\n   return mycmp(self.obj,other.obj)!=0\n  __hash__=None\n return K\n \ntry :\n from _functools import cmp_to_key\nexcept ImportError:\n pass\n \n \n \n \n \n \n_CacheInfo=namedtuple(\"CacheInfo\",[\"hits\",\"misses\",\"maxsize\",\"currsize\"])\n\nclass _HashedSeq(list):\n ''\n\n\n\n \n \n __slots__='hashvalue'\n \n def __init__(self,tup,hash=hash):\n  self[:]=tup\n  self.hashvalue=hash(tup)\n  \n def __hash__(self):\n  return self.hashvalue\n  \ndef _make_key(args,kwds,typed,\nkwd_mark=(object(),),\nfasttypes={int,str,frozenset,type(None )},\nsorted=sorted,tuple=tuple,type=type,len=len):\n ''\n\n\n\n\n\n\n\n\n \n key=args\n if kwds:\n  sorted_items=sorted(kwds.items())\n  key +=kwd_mark\n  for item in sorted_items:\n   key +=item\n if typed:\n  key +=tuple(type(v)for v in args)\n  if kwds:\n   key +=tuple(type(v)for k,v in sorted_items)\n elif len(key)==1 and type(key[0])in fasttypes:\n  return key[0]\n return _HashedSeq(key)\n \ndef lru_cache(maxsize=128,typed=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n sentinel=object()\n make_key=_make_key\n PREV,NEXT,KEY,RESULT=0,1,2,3\n \n def decorating_function(user_function):\n \n  cache={}\n  hits=misses=0\n  full=False\n  cache_get=cache.get\n  lock=RLock()\n  root=[]\n  root[:]=[root,root,None ,None ]\n  \n  if maxsize ==0:\n  \n   def wrapper(*args,**kwds):\n   \n    nonlocal misses\n    result=user_function(*args,**kwds)\n    misses +=1\n    return result\n    \n  elif maxsize is None :\n  \n   def wrapper(*args,**kwds):\n   \n    nonlocal hits,misses\n    key=make_key(args,kwds,typed)\n    result=cache_get(key,sentinel)\n    if result is not sentinel:\n     hits +=1\n     return result\n    result=user_function(*args,**kwds)\n    cache[key]=result\n    misses +=1\n    return result\n    \n  else :\n  \n   def wrapper(*args,**kwds):\n   \n    nonlocal root,hits,misses,full\n    key=make_key(args,kwds,typed)\n    with lock:\n     link=cache_get(key)\n     if link is not None :\n     \n      link_prev,link_next,_key,result=link\n      link_prev[NEXT]=link_next\n      link_next[PREV]=link_prev\n      last=root[PREV]\n      last[NEXT]=root[PREV]=link\n      link[PREV]=last\n      link[NEXT]=root\n      hits +=1\n      return result\n    result=user_function(*args,**kwds)\n    with lock:\n     if key in cache:\n     \n     \n     \n     \n      pass\n     elif full:\n     \n      oldroot=root\n      oldroot[KEY]=key\n      oldroot[RESULT]=result\n      \n      \n      \n      \n      \n      \n      root=oldroot[NEXT]\n      oldkey=root[KEY]\n      oldresult=root[RESULT]\n      root[KEY]=root[RESULT]=None\n      \n      del cache[oldkey]\n      \n      \n      \n      cache[key]=oldroot\n     else :\n     \n      last=root[PREV]\n      link=[last,root,key,result]\n      last[NEXT]=root[PREV]=cache[key]=link\n      full=(len(cache)>=maxsize)\n     misses +=1\n    return result\n    \n  def cache_info():\n   ''\n   with lock:\n    return _CacheInfo(hits,misses,maxsize,len(cache))\n    \n  def cache_clear():\n   ''\n   nonlocal hits,misses,full\n   with lock:\n    cache.clear()\n    root[:]=[root,root,None ,None ]\n    hits=misses=0\n    full=False\n    \n  wrapper.cache_info=cache_info\n  wrapper.cache_clear=cache_clear\n  return update_wrapper(wrapper,user_function)\n  \n return decorating_function\n"], "pydoc_data": [".py", "", 1], "encodings.iso8859_4": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-4',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u0138'\n'\\u0156'\n'\\xa4'\n'\\u0128'\n'\\u013b'\n'\\xa7'\n'\\xa8'\n'\\u0160'\n'\\u0112'\n'\\u0122'\n'\\u0166'\n'\\xad'\n'\\u017d'\n'\\xaf'\n'\\xb0'\n'\\u0105'\n'\\u02db'\n'\\u0157'\n'\\xb4'\n'\\u0129'\n'\\u013c'\n'\\u02c7'\n'\\xb8'\n'\\u0161'\n'\\u0113'\n'\\u0123'\n'\\u0167'\n'\\u014a'\n'\\u017e'\n'\\u014b'\n'\\u0100'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\u012e'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u0116'\n'\\xcd'\n'\\xce'\n'\\u012a'\n'\\u0110'\n'\\u0145'\n'\\u014c'\n'\\u0136'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\u0172'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0168'\n'\\u016a'\n'\\xdf'\n'\\u0101'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\u012f'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u0117'\n'\\xed'\n'\\xee'\n'\\u012b'\n'\\u0111'\n'\\u0146'\n'\\u014d'\n'\\u0137'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\u0173'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0169'\n'\\u016b'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "webbrowser": [".py", "from browser import window\n\n__all__=[\"Error\",\"open\",\"open_new\",\"open_new_tab\"]\n\nclass Error(Exception):\n pass\n \n_target={0:'',1:'_blank',2:'_new'}\n\n\ndef open(url,new=0,autoraise=True ):\n ''\n\n\n \n if window.open(url,_target[new]):\n  return True\n return False\n \ndef open_new(url):\n return open(url,1)\n \ndef open_new_tab(url):\n return open(url,2)\n \n \n"], "sre_compile": [".py", "\n\n\n\n\n\n\n\n\n\n\"\"\"Internal support module for sre\"\"\"\n\n\nimport sys\nimport _sre\nimport sre_parse\nfrom sre_constants import *\nfrom _sre import MAXREPEAT\n\n\nassert _sre.MAGIC ==MAGIC,\"SRE module mismatch\"\n\nif _sre.CODESIZE ==2:\n MAXCODE=65535\nelse :\n MAXCODE=0xFFFFFFFF\n \ndef _identityfunction(x):\n return x\n \n \n_LITERAL_CODES=set([LITERAL,NOT_LITERAL])\n_REPEATING_CODES=set([REPEAT,MIN_REPEAT,MAX_REPEAT])\n_SUCCESS_CODES=set([SUCCESS,FAILURE])\n_ASSERT_CODES=set([ASSERT,ASSERT_NOT])\n\ndef _compile(code,pattern,flags):\n\n emit=code.append\n _len=len\n LITERAL_CODES=_LITERAL_CODES\n REPEATING_CODES=_REPEATING_CODES\n SUCCESS_CODES=_SUCCESS_CODES\n ASSERT_CODES=_ASSERT_CODES\n for op,av in pattern:\n \n \n  if op in LITERAL_CODES:\n   if flags&SRE_FLAG_IGNORECASE:\n    emit(OPCODES[OP_IGNORE[op]])\n    emit(_sre.getlower(av,flags))\n   else :\n    emit(OPCODES[op])\n    emit(av)\n  elif op is IN:\n   if flags&SRE_FLAG_IGNORECASE:\n    emit(OPCODES[OP_IGNORE[op]])\n    def fixup(literal,flags=flags):\n     return _sre.getlower(literal,flags)\n   else :\n    emit(OPCODES[op])\n    fixup=_identityfunction\n   skip=_len(code);emit(0)\n   _compile_charset(av,flags,code,fixup)\n   code[skip]=_len(code)-skip\n  elif op is ANY:\n   if flags&SRE_FLAG_DOTALL:\n    emit(OPCODES[ANY_ALL])\n   else :\n    emit(OPCODES[ANY])\n  elif op in REPEATING_CODES:\n   if flags&SRE_FLAG_TEMPLATE:\n    raise error(\"internal: unsupported template operator\")\n    emit(OPCODES[REPEAT])\n    skip=_len(code);emit(0)\n    emit(av[0])\n    emit(av[1])\n    _compile(code,av[2],flags)\n    emit(OPCODES[SUCCESS])\n    code[skip]=_len(code)-skip\n   elif _simple(av)and op is not REPEAT:\n    if op is MAX_REPEAT:\n     emit(OPCODES[REPEAT_ONE])\n    else :\n     emit(OPCODES[MIN_REPEAT_ONE])\n    skip=_len(code);emit(0)\n    emit(av[0])\n    emit(av[1])\n    _compile(code,av[2],flags)\n    emit(OPCODES[SUCCESS])\n    code[skip]=_len(code)-skip\n   else :\n    emit(OPCODES[REPEAT])\n    skip=_len(code);emit(0)\n    emit(av[0])\n    emit(av[1])\n    _compile(code,av[2],flags)\n    code[skip]=_len(code)-skip\n    if op is MAX_REPEAT:\n     emit(OPCODES[MAX_UNTIL])\n    else :\n     emit(OPCODES[MIN_UNTIL])\n  elif op is SUBPATTERN:\n   if av[0]:\n    emit(OPCODES[MARK])\n    emit((av[0]-1)*2)\n    \n   _compile(code,av[1],flags)\n   if av[0]:\n    emit(OPCODES[MARK])\n    emit((av[0]-1)*2+1)\n  elif op in SUCCESS_CODES:\n   emit(OPCODES[op])\n  elif op in ASSERT_CODES:\n   emit(OPCODES[op])\n   skip=_len(code);emit(0)\n   if av[0]>=0:\n    emit(0)\n   else :\n    lo,hi=av[1].getwidth()\n    if lo !=hi:\n     raise error(\"look-behind requires fixed-width pattern\")\n    emit(lo)\n   _compile(code,av[1],flags)\n   emit(OPCODES[SUCCESS])\n   code[skip]=_len(code)-skip\n  elif op is CALL:\n   emit(OPCODES[op])\n   skip=_len(code);emit(0)\n   _compile(code,av,flags)\n   emit(OPCODES[SUCCESS])\n   code[skip]=_len(code)-skip\n  elif op is AT:\n   emit(OPCODES[op])\n   if flags&SRE_FLAG_MULTILINE:\n    av=AT_MULTILINE.get(av,av)\n   if flags&SRE_FLAG_LOCALE:\n    av=AT_LOCALE.get(av,av)\n   elif flags&SRE_FLAG_UNICODE:\n    av=AT_UNICODE.get(av,av)\n   emit(ATCODES[av])\n  elif op is BRANCH:\n   emit(OPCODES[op])\n   tail=[]\n   tailappend=tail.append\n   for av in av[1]:\n    skip=_len(code);emit(0)\n    \n    _compile(code,av,flags)\n    emit(OPCODES[JUMP])\n    tailappend(_len(code));emit(0)\n    code[skip]=_len(code)-skip\n   emit(0)\n   for tail in tail:\n    code[tail]=_len(code)-tail\n  elif op is CATEGORY:\n   emit(OPCODES[op])\n   if flags&SRE_FLAG_LOCALE:\n    av=CH_LOCALE[av]\n   elif flags&SRE_FLAG_UNICODE:\n    av=CH_UNICODE[av]\n   emit(CHCODES[av])\n  elif op is GROUPREF:\n   if flags&SRE_FLAG_IGNORECASE:\n    emit(OPCODES[OP_IGNORE[op]])\n   else :\n    emit(OPCODES[op])\n   emit(av -1)\n  elif op is GROUPREF_EXISTS:\n   emit(OPCODES[op])\n   emit(av[0]-1)\n   skipyes=_len(code);emit(0)\n   _compile(code,av[1],flags)\n   if av[2]:\n    emit(OPCODES[JUMP])\n    skipno=_len(code);emit(0)\n    code[skipyes]=_len(code)-skipyes+1\n    _compile(code,av[2],flags)\n    code[skipno]=_len(code)-skipno\n   else :\n    code[skipyes]=_len(code)-skipyes+1\n  else :\n   raise ValueError(\"unsupported operand type\",op)\n   \ndef _compile_charset(charset,flags,code,fixup=None ):\n\n emit=code.append\n if fixup is None :\n  fixup=_identityfunction\n for op,av in _optimize_charset(charset,fixup):\n  emit(OPCODES[op])\n  if op is NEGATE:\n   pass\n  elif op is LITERAL:\n   emit(fixup(av))\n  elif op is RANGE:\n   emit(fixup(av[0]))\n   emit(fixup(av[1]))\n  elif op is CHARSET:\n   code.extend(av)\n  elif op is BIGCHARSET:\n   code.extend(av)\n  elif op is CATEGORY:\n   if flags&SRE_FLAG_LOCALE:\n    emit(CHCODES[CH_LOCALE[av]])\n   elif flags&SRE_FLAG_UNICODE:\n    emit(CHCODES[CH_UNICODE[av]])\n   else :\n    emit(CHCODES[av])\n  else :\n   raise error(\"internal: unsupported set operator\")\n emit(OPCODES[FAILURE])\n \n \ndef _optimize_charset(charset,fixup):\n\n out=[]\n outappend=out.append\n charmap=[0]*256\n try :\n  for op,av in charset:\n   if op is NEGATE:\n    outappend((op,av))\n   elif op is LITERAL:\n    charmap[fixup(av)]=1\n   elif op is RANGE:\n    for i in range(fixup(av[0]),fixup(av[1])+1):\n     charmap[i]=1\n   elif op is CATEGORY:\n   \n    return charset\n except IndexError:\n \n  return _optimize_unicode(charset,fixup)\n  \n i=p=n=0\n runs=[]\n runsappend=runs.append\n for c in charmap:\n  if c:\n   if n ==0:\n    p=i\n   n=n+1\n  elif n:\n   runsappend((p,n))\n   n=0\n  i=i+1\n if n:\n  runsappend((p,n))\n if len(runs)<=2:\n \n  for p,n in runs:\n   if n ==1:\n    outappend((LITERAL,p))\n   else :\n    outappend((RANGE,(p,p+n -1)))\n  if len(out)<len(charset):\n   return out\n else :\n \n  data=_mk_bitmap(charmap)\n  outappend((CHARSET,data))\n  return out\n return charset\n \ndef _mk_bitmap(bits):\n data=[]\n dataappend=data.append\n if _sre.CODESIZE ==2:\n  start=(1,0)\n else :\n  start=(1,0)\n m,v=start\n for c in bits:\n  if c:\n   v=v+m\n  m=m+m\n  if m >MAXCODE:\n   dataappend(v)\n   m,v=start\n return data\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \ndef _optimize_unicode(charset,fixup):\n try :\n  import array\n except ImportError:\n  return charset\n charmap=[0]*65536\n negate=0\n try :\n  for op,av in charset:\n   if op is NEGATE:\n    negate=1\n   elif op is LITERAL:\n    charmap[fixup(av)]=1\n   elif op is RANGE:\n    for i in range(fixup(av[0]),fixup(av[1])+1):\n     charmap[i]=1\n   elif op is CATEGORY:\n   \n    return charset\n except IndexError:\n \n  return charset\n if negate:\n  if sys.maxunicode !=65535:\n  \n  \n  \n   return charset\n  for i in range(65536):\n   charmap[i]=not charmap[i]\n comps={}\n mapping=[0]*256\n block=0\n data=[]\n for i in range(256):\n  chunk=tuple(charmap[i *256:(i+1)*256])\n  new=comps.setdefault(chunk,block)\n  mapping[i]=new\n  if new ==block:\n   block=block+1\n   data=data+_mk_bitmap(chunk)\n header=[block]\n if _sre.CODESIZE ==2:\n  code='H'\n else :\n  code='I'\n  \n mapping=array.array('b',mapping).tobytes()\n \n mapping=array.array(code,mapping)\n assert mapping.itemsize ==_sre.CODESIZE\n assert len(mapping)*mapping.itemsize ==256\n header=header+mapping.tolist()\n data[0:0]=header\n return [(BIGCHARSET,data)]\n \ndef _simple(av):\n\n lo,hi=av[2].getwidth()\n if lo ==0 and hi ==MAXREPEAT:\n  raise error(\"nothing to repeat\")\n return lo ==hi ==1 and av[2][0][0]!=SUBPATTERN\n \ndef _compile_info(code,pattern,flags):\n\n\n\n lo,hi=pattern.getwidth()\n \n if lo ==0:\n  return\n  \n prefix=[]\n prefixappend=prefix.append\n prefix_skip=0\n charset=[]\n charsetappend=charset.append\n if not (flags&SRE_FLAG_IGNORECASE):\n \n  for op,av in pattern.data:\n  \n   if op is LITERAL:\n    if len(prefix)==prefix_skip:\n     prefix_skip=prefix_skip+1\n    prefixappend(av)\n   elif op is SUBPATTERN and len(av[1])==1:\n    op,av=av[1][0]\n    if op is LITERAL:\n     prefixappend(av)\n    else :\n     break\n   else :\n    break\n    \n  if not prefix and pattern.data:\n   op,av=pattern.data[0]\n   if op is SUBPATTERN and av[1]:\n    op,av=av[1][0]\n    if op is LITERAL:\n     charsetappend((op,av))\n    elif op is BRANCH:\n     c=[]\n     cappend=c.append\n     for p in av[1]:\n      if not p:\n       break\n      op,av=p[0]\n      if op is LITERAL:\n       cappend((op,av))\n      else :\n       break\n     else :\n      charset=c\n   elif op is BRANCH:\n    c=[]\n    cappend=c.append\n    for p in av[1]:\n     if not p:\n      break\n     op,av=p[0]\n     if op is LITERAL:\n      cappend((op,av))\n     else :\n      break\n    else :\n     charset=c\n   elif op is IN:\n    charset=av\n    \n    \n    \n    \n    \n    \n    \n emit=code.append\n emit(OPCODES[INFO])\n skip=len(code);emit(0)\n \n mask=0\n if prefix:\n  mask=SRE_INFO_PREFIX\n  if len(prefix)==prefix_skip ==len(pattern.data):\n   mask=mask+SRE_INFO_LITERAL\n elif charset:\n  mask=mask+SRE_INFO_CHARSET\n emit(mask)\n \n if lo <MAXCODE:\n  emit(lo)\n else :\n  emit(MAXCODE)\n  prefix=prefix[:MAXCODE]\n if hi <MAXCODE:\n  emit(hi)\n else :\n  emit(0)\n  \n  \n if prefix:\n  emit(len(prefix))\n  emit(prefix_skip)\n  code.extend(prefix)\n  \n  table=[-1]+([0]*len(prefix))\n  for i in range(len(prefix)):\n   table[i+1]=table[i]+1\n   while table[i+1]>0 and prefix[i]!=prefix[table[i+1]-1]:\n    table[i+1]=table[table[i+1]-1]+1\n  code.extend(table[1:])\n elif charset:\n  _compile_charset(charset,flags,code)\n code[skip]=len(code)-skip\n \ndef isstring(obj):\n return isinstance(obj,(str,bytes))\n \ndef _code(p,flags):\n\n flags=p.pattern.flags |flags\n code=[]\n \n \n _compile_info(code,p,flags)\n \n \n _compile(code,p.data,flags)\n \n code.append(OPCODES[SUCCESS])\n \n return code\n \ndef compile(p,flags=0):\n\n\n\n if isstring(p):\n  pattern=p\n  p=sre_parse.parse(p,flags)\n else :\n  pattern=None\n  \n  \n code=_code(p,flags)\n \n \n \n \n \n if p.pattern.groups >100:\n  raise AssertionError(\n  \"sorry, but this version only supports 100 named groups\"\n  )\n  \n  \n groupindex=p.pattern.groupdict\n indexgroup=[None ]*p.pattern.groups\n for k,i in groupindex.items():\n  indexgroup[i]=k\n  \n return _sre.compile(\n pattern,flags |p.pattern.flags,code,\n p.pattern.groups -1,\n groupindex,indexgroup\n )\n"], "encodings.mac_cyrillic": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-cyrillic',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u2020'\n'\\xb0'\n'\\u0490'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\u0406'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\u0402'\n'\\u0452'\n'\\u2260'\n'\\u0403'\n'\\u0453'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\u0456'\n'\\xb5'\n'\\u0491'\n'\\u0408'\n'\\u0404'\n'\\u0454'\n'\\u0407'\n'\\u0457'\n'\\u0409'\n'\\u0459'\n'\\u040a'\n'\\u045a'\n'\\u0458'\n'\\u0405'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u040b'\n'\\u045b'\n'\\u040c'\n'\\u045c'\n'\\u0455'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u201e'\n'\\u040e'\n'\\u045e'\n'\\u040f'\n'\\u045f'\n'\\u2116'\n'\\u0401'\n'\\u0451'\n'\\u044f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u20ac'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "io": [".py", "import builtins\n\nopen=builtins.open\n\n\nSEEK_SET=0\nSEEK_CUR=1\nSEEK_END=2\n\nr\"\"\"File-like objects that read from or write to a string buffer.\n\nThis implements (nearly) all stdio methods.\n\nf = StringIO()      # ready for writing\nf = StringIO(buf)   # ready for reading\nf.close()           # explicitly release resources held\nflag = f.isatty()   # always false\npos = f.tell()      # get current position\nf.seek(pos)         # set current position\nf.seek(pos, mode)   # mode 0: absolute; 1: relative; 2: relative to EOF\nbuf = f.read()      # read until EOF\nbuf = f.read(n)     # read up to n bytes\nbuf = f.readline()  # read until end of line ('\\n') or EOF\nlist = f.readlines()# list of f.readline() results until EOF\nf.truncate([size])  # truncate file at to at most size (default: current pos)\nf.write(buf)        # write at current position\nf.writelines(list)  # for line in list: f.write(line)\nf.getvalue()        # return whole file's contents as a string\n\nNotes:\n- Using a real file is often faster (but less convenient).\n- There's also a much faster implementation in C, called cStringIO, but\n  it's not subclassable.\n- fileno() is left unimplemented so that code which uses it triggers\n  an exception early.\n- Seeking far beyond EOF and then writing will insert real null\n  bytes that occupy space in the buffer.\n- There's a simple test set (see end of this file).\n\"\"\"\ntry :\n from errno import EINVAL\nexcept ImportError:\n EINVAL=22\n \n__all__=[\"StringIO\"]\n\ndef _complain_ifclosed(closed):\n if closed:\n  raise ValueError(\"I/O operation on closed file\")\n  \nclass StringIO:\n ''\n\n\n\n\n\n\n\n\n\n \n def __init__(self,buf=''):\n  self.buf=buf\n  self.len=len(buf)\n  self.buflist=[]\n  self.pos=0\n  self.closed=False\n  self.softspace=0\n  \n def __iter__(self):\n  return self\n  \n def next(self):\n  ''\n\n\n\n\n  \n  _complain_ifclosed(self.closed)\n  r=self.readline()\n  if not r:\n   raise StopIteration\n  return r\n  \n def close(self):\n  ''\n  \n  if not self.closed:\n   self.closed=True\n   del self.buf,self.pos\n   \n def isatty(self):\n  ''\n\n  \n  _complain_ifclosed(self.closed)\n  return False\n  \n def seek(self,pos,mode=0):\n  ''\n\n\n\n\n\n\n  \n  _complain_ifclosed(self.closed)\n  if self.buflist:\n   self.buf +=''.join(self.buflist)\n   self.buflist=[]\n  if mode ==1:\n   pos +=self.pos\n  elif mode ==2:\n   pos +=self.len\n  self.pos=max(0,pos)\n  \n def tell(self):\n  ''\n  _complain_ifclosed(self.closed)\n  return self.pos\n  \n def read(self,n=-1):\n  ''\n\n\n\n\n\n  \n  _complain_ifclosed(self.closed)\n  if self.buflist:\n   self.buf +=''.join(self.buflist)\n   self.buflist=[]\n  if n is None or n <0:\n   newpos=self.len\n  else :\n   newpos=min(self.pos+n,self.len)\n  r=self.buf[self.pos:newpos]\n  self.pos=newpos\n  return r\n  \n def readline(self,length=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  _complain_ifclosed(self.closed)\n  if self.buflist:\n   self.buf +=''.join(self.buflist)\n   self.buflist=[]\n  i=self.buf.find('\\n',self.pos)\n  if i <0:\n   newpos=self.len\n  else :\n   newpos=i+1\n  if length is not None and length >=0:\n   if self.pos+length <newpos:\n    newpos=self.pos+length\n  r=self.buf[self.pos:newpos]\n  self.pos=newpos\n  return r\n  \n def readlines(self,sizehint=0):\n  ''\n\n\n\n\n\n  \n  total=0\n  lines=[]\n  line=self.readline()\n  while line:\n   lines.append(line)\n   total +=len(line)\n   if 0 <sizehint <=total:\n    break\n   line=self.readline()\n  return lines\n  \n def truncate(self,size=None ):\n  ''\n\n\n\n\n\n\n\n\n  \n  _complain_ifclosed(self.closed)\n  if size is None :\n   size=self.pos\n  elif size <0:\n   raise IOError(EINVAL,\"Negative size not allowed\")\n  elif size <self.pos:\n   self.pos=size\n  self.buf=self.getvalue()[:size]\n  self.len=size\n  \n def write(self,s):\n  ''\n\n\n  \n  _complain_ifclosed(self.closed)\n  if not s:return\n  spos=self.pos\n  slen=self.len\n  if spos ==slen:\n   self.buflist.append(s)\n   self.len=self.pos=spos+len(s)\n   return\n  if spos >slen:\n   self.buflist.append('\\0'*(spos -slen))\n   slen=spos\n  newpos=spos+len(s)\n  if spos <slen:\n   if self.buflist:\n    self.buf +=''.join(self.buflist)\n   self.buflist=[self.buf[:spos],s,self.buf[newpos:]]\n   self.buf=''\n   if newpos >slen:\n    slen=newpos\n  else :\n   self.buflist.append(s)\n   slen=newpos\n  self.len=slen\n  self.pos=newpos\n  \n def writelines(self,iterable):\n  ''\n\n\n\n\n\n  \n  write=self.write\n  for line in iterable:\n   write(line)\n   \n def flush(self):\n  ''\n  \n  _complain_ifclosed(self.closed)\n  \n def getvalue(self):\n  ''\n\n\n\n\n\n\n\n\n  \n  _complain_ifclosed(self.closed)\n  if self.buflist:\n   self.buf +=''.join(self.buflist)\n   self.buflist=[]\n  return self.buf\n  \n  \nTextIOWrapper=StringIO\n\nclass RawIOBase:\n\n def read(self,n=-1):\n  pass\n def readall(self):\n  pass\n def readinto(self,b):\n  pass\n def write(self,b):\n  pass\n  \n  \nBufferedIOBase=RawIOBase\nBufferedReader=RawIOBase\n\n\n"], "encodings.iso8859_5": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-5',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0401'\n'\\u0402'\n'\\u0403'\n'\\u0404'\n'\\u0405'\n'\\u0406'\n'\\u0407'\n'\\u0408'\n'\\u0409'\n'\\u040a'\n'\\u040b'\n'\\u040c'\n'\\xad'\n'\\u040e'\n'\\u040f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n'\\u2116'\n'\\u0451'\n'\\u0452'\n'\\u0453'\n'\\u0454'\n'\\u0455'\n'\\u0456'\n'\\u0457'\n'\\u0458'\n'\\u0459'\n'\\u045a'\n'\\u045b'\n'\\u045c'\n'\\xa7'\n'\\u045e'\n'\\u045f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_browser": [".js", "var $module=(function($B) {\n  return {\n    alert:function(message){window.alert($B.builtins.str(message))},\n    confirm: $B.JSObject(window.confirm),\n    console:$B.JSObject(window.console),\n    document:$B.DOMNode(document),\n    doc: $B.DOMNode(document),   //want to use document instead of doc\n    DOMEvent:$B.DOMEvent,\n    DOMNode:$B.DOMNode,\n    mouseCoords: function(ev){return $B.JSObject($mouseCoords(ev))},\n    prompt: function(message, default_value){\n        return $B.JSObject(window.prompt(message, default_value||''))\n    },\n    reload: function(){\n        // Try to reload all scripts and all imported modules\n        var scripts=document.getElementsByTagName('script'),$elts=[]\n        // Freeze the list of scripts here ; other scripts can be inserted on\n        // the fly by viruses\n        for(var i=0;i<scripts.length;i++){\n            var script = scripts[i]\n            if(script.type!=\"text/python\" && script.type!=\"text/python3\"){\n                $elts.push(script)\n            }\n        }\n        console.log('scripts to reload', $elts)\n    },\n    win: $B.win,\n    window: $B.win,\n    URLParameter:function(name) {\n       name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n       var regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\"),\n           results = regex.exec(location.search);\n       results= results === null ? \"\" : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n       return $B.builtins.str(results);\n    }\n  }\n})(__BRYTHON__)\n"], "warnings": [".py", "''\n\n\n\n\nimport linecache\nimport sys\n\n__all__=[\"warn\",\"showwarning\",\"formatwarning\",\"filterwarnings\",\n\"resetwarnings\",\"catch_warnings\"]\n\n\ndef showwarning(message,category,filename,lineno,file=None ,line=None ):\n ''\n if file is None :\n  file=sys.stderr\n try :\n  file.write(formatwarning(message,category,filename,lineno,line))\n except IOError:\n  pass\n  \ndef formatwarning(message,category,filename,lineno,line=None ):\n ''\n s=\"%s:%s: %s: %s\\n\"%(filename,lineno,category.__name__,message)\n line=linecache.getline(filename,lineno)if line is None else line\n if line:\n  line=line.strip()\n  s +=\"  %s\\n\"%line\n return s\n \ndef filterwarnings(action,message=\"\",category=Warning,module=\"\",lineno=0,\nappend=False ):\n ''\n\n\n\n\n\n\n\n\n \n import re\n assert action in (\"error\",\"ignore\",\"always\",\"default\",\"module\",\n \"once\"),\"invalid action: %r\"%(action,)\n assert isinstance(message,str),\"message must be a string\"\n assert isinstance(category,type),\"category must be a class\"\n assert issubclass(category,Warning),\"category must be a Warning subclass\"\n assert isinstance(module,str),\"module must be a string\"\n assert isinstance(lineno,int)and lineno >=0, \"lineno must be an int >= 0\"\n item=(action,re.compile(message,re.I),category,\n re.compile(module),lineno)\n if append:\n  filters.append(item)\n else :\n  filters.insert(0,item)\n  \ndef simplefilter(action,category=Warning,lineno=0,append=False ):\n ''\n\n\n\n\n\n\n\n \n assert action in (\"error\",\"ignore\",\"always\",\"default\",\"module\",\n \"once\"),\"invalid action: %r\"%(action,)\n assert isinstance(lineno,int)and lineno >=0, \"lineno must be an int >= 0\"\n item=(action,None ,category,None ,lineno)\n if append:\n  filters.append(item)\n else :\n  filters.insert(0,item)\n  \ndef resetwarnings():\n ''\n filters[:]=[]\n \nclass _OptionError(Exception):\n ''\n pass\n \n \ndef _processoptions(args):\n for arg in args:\n  try :\n   _setoption(arg)\n  except _OptionError as msg:\n   print(\"Invalid -W option ignored:\",msg,file=sys.stderr)\n   \n   \ndef _setoption(arg):\n import re\n parts=arg.split(':')\n if len(parts)>5:\n  raise _OptionError(\"too many fields (max 5): %r\"%(arg,))\n while len(parts)<5:\n  parts.append('')\n action,message,category,module,lineno=[s.strip()\n for s in parts]\n action=_getaction(action)\n message=re.escape(message)\n category=_getcategory(category)\n module=re.escape(module)\n if module:\n  module=module+'$'\n if lineno:\n  try :\n   lineno=int(lineno)\n   if lineno <0:\n    raise ValueError\n  except (ValueError,OverflowError):\n   raise _OptionError(\"invalid lineno %r\"%(lineno,))\n else :\n  lineno=0\n filterwarnings(action,message,category,module,lineno)\n \n \ndef _getaction(action):\n if not action:\n  return\"default\"\n if action ==\"all\":return\"always\"\n for a in ('default','always','ignore','module','once','error'):\n  if a.startswith(action):\n   return a\n raise _OptionError(\"invalid action: %r\"%(action,))\n \n \ndef _getcategory(category):\n import re\n if not category:\n  return Warning\n if re.match(\"^[a-zA-Z0-9_]+$\",category):\n  try :\n   cat=eval(category)\n  except NameError:\n   raise _OptionError(\"unknown warning category: %r\"%(category,))\n else :\n  i=category.rfind(\".\")\n  module=category[:i]\n  klass=category[i+1:]\n  try :\n   m=__import__(module,None ,None ,[klass])\n  except ImportError:\n   raise _OptionError(\"invalid module name: %r\"%(module,))\n  try :\n   cat=getattr(m,klass)\n  except AttributeError:\n   raise _OptionError(\"unknown warning category: %r\"%(category,))\n if not issubclass(cat,Warning):\n  raise _OptionError(\"invalid warning category: %r\"%(category,))\n return cat\n \n \n \ndef warn(message,category=None ,stacklevel=1):\n ''\n \n if isinstance(message,Warning):\n  category=message.__class__\n  \n if category is None :\n  category=UserWarning\n assert issubclass(category,Warning)\n \n try :\n  caller=sys._getframe(stacklevel)\n except ValueError:\n  globals=sys.__dict__\n  lineno=1\n else :\n  globals=caller.f_globals\n  lineno=caller.f_lineno\n if'__name__'in globals:\n  module=globals['__name__']\n else :\n  module=\"<string>\"\n filename=globals.get('__file__')\n if filename:\n  fnl=filename.lower()\n  if fnl.endswith((\".pyc\",\".pyo\")):\n   filename=filename[:-1]\n else :\n  if module ==\"__main__\":\n   try :\n    filename=sys.argv[0]\n   except AttributeError:\n   \n    filename='__main__'\n  if not filename:\n   filename=module\n registry=globals.setdefault(\"__warningregistry__\",{})\n warn_explicit(message,category,filename,lineno,module,registry,\n globals)\n \ndef warn_explicit(message,category,filename,lineno,\nmodule=None ,registry=None ,module_globals=None ):\n lineno=int(lineno)\n if module is None :\n  module=filename or\"<unknown>\"\n  if module[-3:].lower()==\".py\":\n   module=module[:-3]\n if registry is None :\n  registry={}\n if isinstance(message,Warning):\n  text=str(message)\n  category=message.__class__\n else :\n  text=message\n  message=category(message)\n key=(text,category,lineno)\n \n if registry.get(key):\n  return\n  \n for item in filters:\n  action,msg,cat,mod,ln=item\n  if ((msg is None or msg.match(text))and\n  issubclass(category,cat)and\n  (mod is None or mod.match(module))and\n  (ln ==0 or lineno ==ln)):\n   break\n else :\n  action=defaultaction\n  \n if action ==\"ignore\":\n  registry[key]=1\n  return\n  \n  \n  \n linecache.getlines(filename,module_globals)\n \n if action ==\"error\":\n  raise message\n  \n if action ==\"once\":\n  registry[key]=1\n  oncekey=(text,category)\n  if onceregistry.get(oncekey):\n   return\n  onceregistry[oncekey]=1\n elif action ==\"always\":\n  pass\n elif action ==\"module\":\n  registry[key]=1\n  altkey=(text,category,0)\n  if registry.get(altkey):\n   return\n  registry[altkey]=1\n elif action ==\"default\":\n  registry[key]=1\n else :\n \n  raise RuntimeError(\n  \"Unrecognized action (%r) in warnings.filters:\\n %s\"%\n  (action,item))\n if not callable(showwarning):\n  raise TypeError(\"warnings.showwarning() must be set to a \"\n  \"function or method\")\n  \n showwarning(message,category,filename,lineno)\n \n \nclass WarningMessage(object):\n\n ''\n \n _WARNING_DETAILS=(\"message\",\"category\",\"filename\",\"lineno\",\"file\",\n \"line\")\n \n def __init__(self,message,category,filename,lineno,file=None ,\n line=None ):\n  local_values=locals()\n  for attr in self._WARNING_DETAILS:\n   setattr(self,attr,local_values[attr])\n  self._category_name=category.__name__ if category else None\n  \n def __str__(self):\n  return (\"{message : %r, category : %r, filename : %r, lineno : %s, \"\n  \"line : %r}\"%(self.message,self._category_name,\n  self.filename,self.lineno,self.line))\n  \n  \nclass catch_warnings(object):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,*,record=False ,module=None ):\n  ''\n\n\n\n\n\n  \n  self._record=record\n  self._module=sys.modules['warnings']if module is None else module\n  self._entered=False\n  \n def __repr__(self):\n  args=[]\n  if self._record:\n   args.append(\"record=True\")\n  if self._module is not sys.modules['warnings']:\n   args.append(\"module=%r\"%self._module)\n  name=type(self).__name__\n  return\"%s(%s)\"%(name,\", \".join(args))\n  \n def __enter__(self):\n  if self._entered:\n   raise RuntimeError(\"Cannot enter %r twice\"%self)\n  self._entered=True\n  self._filters=self._module.filters\n  self._module.filters=self._filters[:]\n  self._showwarning=self._module.showwarning\n  if self._record:\n   log=[]\n   def showwarning(*args,**kwargs):\n    log.append(WarningMessage(*args,**kwargs))\n   self._module.showwarning=showwarning\n   return log\n  else :\n   return None\n   \n def __exit__(self,*exc_info):\n  if not self._entered:\n   raise RuntimeError(\"Cannot exit %r without entering first\"%self)\n  self._module.filters=self._filters\n  self._module.showwarning=self._showwarning\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n_warnings_defaults=False\ntry :\n from _warnings import (filters,_defaultaction,_onceregistry,\n warn,warn_explicit)\n defaultaction=_defaultaction\n onceregistry=_onceregistry\n _warnings_defaults=True\nexcept ImportError:\n filters=[]\n defaultaction=\"default\"\n onceregistry={}\n \n \n \n_processoptions(sys.warnoptions)\nif not _warnings_defaults:\n silence=[ImportWarning,PendingDeprecationWarning]\n silence.append(DeprecationWarning)\n for cls in silence:\n  simplefilter(\"ignore\",category=cls)\n bytes_warning=sys.flags.bytes_warning\n if bytes_warning >1:\n  bytes_action=\"error\"\n elif bytes_warning:\n  bytes_action=\"default\"\n else :\n  bytes_action=\"ignore\"\n simplefilter(bytes_action,category=BytesWarning,append=1)\n \n if hasattr(sys,'gettotalrefcount'):\n  resource_action=\"always\"\n else :\n  resource_action=\"ignore\"\n simplefilter(resource_action,category=ResourceWarning,append=1)\n \ndel _warnings_defaults\n"], "zipfile": [".py", "''\n\n\n\n\nimport io\nimport os\nimport re\nimport imp\nimport sys\nimport time\nimport stat\nimport shutil\nimport struct\nimport binascii\n\n\"\"\"\ntry:\n    import zlib # We may need its compression method\n    crc32 = zlib.crc32\nexcept ImportError:\n    zlib = None\n    crc32 = binascii.crc32\n\ntry:\n    import bz2 # We may need its compression method\nexcept ImportError:\n    bz2 = None\n\ntry:\n    import lzma # We may need its compression method\nexcept ImportError:\n    lzma = None\n\"\"\"\nzlib=None\ncrc32=binascii.crc32\nbz2=None\nlzma=None\n\n__all__=[\"BadZipFile\",\"BadZipfile\",\"error\",\n\"ZIP_STORED\",\"ZIP_DEFLATED\",\"ZIP_BZIP2\",\"ZIP_LZMA\",\n\"is_zipfile\",\"ZipInfo\",\"ZipFile\",\"PyZipFile\",\"LargeZipFile\"]\n\nclass BadZipFile(Exception):\n pass\n \n \nclass LargeZipFile(Exception):\n ''\n\n\n \n \nerror=BadZipfile=BadZipFile\n\n\nZIP64_LIMIT=(1 <<31)-1\nZIP_FILECOUNT_LIMIT=1 <<16\nZIP_MAX_COMMENT=(1 <<16)-1\n\n\nZIP_STORED=0\nZIP_DEFLATED=8\nZIP_BZIP2=12\nZIP_LZMA=14\n\n\nDEFAULT_VERSION=20\nZIP64_VERSION=45\nBZIP2_VERSION=46\nLZMA_VERSION=63\n\nMAX_EXTRACT_VERSION=63\n\n\n\n\n\n\n\n\n\nstructEndArchive=b\"<4s4H2LH\"\nstringEndArchive=b\"PK\\005\\006\"\nsizeEndCentDir=struct.calcsize(structEndArchive)\n\n_ECD_SIGNATURE=0\n_ECD_DISK_NUMBER=1\n_ECD_DISK_START=2\n_ECD_ENTRIES_THIS_DISK=3\n_ECD_ENTRIES_TOTAL=4\n_ECD_SIZE=5\n_ECD_OFFSET=6\n_ECD_COMMENT_SIZE=7\n\n\n_ECD_COMMENT=8\n_ECD_LOCATION=9\n\n\n\nstructCentralDir=\"<4s4B4HL2L5H2L\"\nstringCentralDir=b\"PK\\001\\002\"\nsizeCentralDir=struct.calcsize(structCentralDir)\n\n\n_CD_SIGNATURE=0\n_CD_CREATE_VERSION=1\n_CD_CREATE_SYSTEM=2\n_CD_EXTRACT_VERSION=3\n_CD_EXTRACT_SYSTEM=4\n_CD_FLAG_BITS=5\n_CD_COMPRESS_TYPE=6\n_CD_TIME=7\n_CD_DATE=8\n_CD_CRC=9\n_CD_COMPRESSED_SIZE=10\n_CD_UNCOMPRESSED_SIZE=11\n_CD_FILENAME_LENGTH=12\n_CD_EXTRA_FIELD_LENGTH=13\n_CD_COMMENT_LENGTH=14\n_CD_DISK_NUMBER_START=15\n_CD_INTERNAL_FILE_ATTRIBUTES=16\n_CD_EXTERNAL_FILE_ATTRIBUTES=17\n_CD_LOCAL_HEADER_OFFSET=18\n\n\n\nstructFileHeader=\"<4s2B4HL2L2H\"\nstringFileHeader=b\"PK\\003\\004\"\nsizeFileHeader=struct.calcsize(structFileHeader)\n\n_FH_SIGNATURE=0\n_FH_EXTRACT_VERSION=1\n_FH_EXTRACT_SYSTEM=2\n_FH_GENERAL_PURPOSE_FLAG_BITS=3\n_FH_COMPRESSION_METHOD=4\n_FH_LAST_MOD_TIME=5\n_FH_LAST_MOD_DATE=6\n_FH_CRC=7\n_FH_COMPRESSED_SIZE=8\n_FH_UNCOMPRESSED_SIZE=9\n_FH_FILENAME_LENGTH=10\n_FH_EXTRA_FIELD_LENGTH=11\n\n\nstructEndArchive64Locator=\"<4sLQL\"\nstringEndArchive64Locator=b\"PK\\x06\\x07\"\nsizeEndCentDir64Locator=struct.calcsize(structEndArchive64Locator)\n\n\n\nstructEndArchive64=\"<4sQ2H2L4Q\"\nstringEndArchive64=b\"PK\\x06\\x06\"\nsizeEndCentDir64=struct.calcsize(structEndArchive64)\n\n_CD64_SIGNATURE=0\n_CD64_DIRECTORY_RECSIZE=1\n_CD64_CREATE_VERSION=2\n_CD64_EXTRACT_VERSION=3\n_CD64_DISK_NUMBER=4\n_CD64_DISK_NUMBER_START=5\n_CD64_NUMBER_ENTRIES_THIS_DISK=6\n_CD64_NUMBER_ENTRIES_TOTAL=7\n_CD64_DIRECTORY_SIZE=8\n_CD64_OFFSET_START_CENTDIR=9\n\ndef _check_zipfile(fp):\n try :\n  if _EndRecData(fp):\n   return True\n except IOError:\n  pass\n return False\n \ndef is_zipfile(filename):\n ''\n\n\n \n result=False\n try :\n  if hasattr(filename,\"read\"):\n   result=_check_zipfile(fp=filename)\n  else :\n   with open(filename,\"rb\")as fp:\n    result=_check_zipfile(fp)\n except IOError:\n  pass\n return result\n \ndef _EndRecData64(fpin,offset,endrec):\n ''\n\n \n try :\n  fpin.seek(offset -sizeEndCentDir64Locator,2)\n except IOError:\n \n \n  return endrec\n  \n data=fpin.read(sizeEndCentDir64Locator)\n if len(data)!=sizeEndCentDir64Locator:\n  return endrec\n sig,diskno,reloff,disks=struct.unpack(structEndArchive64Locator,data)\n if sig !=stringEndArchive64Locator:\n  return endrec\n  \n if diskno !=0 or disks !=1:\n  raise BadZipFile(\"zipfiles that span multiple disks are not supported\")\n  \n  \n fpin.seek(offset -sizeEndCentDir64Locator -sizeEndCentDir64,2)\n data=fpin.read(sizeEndCentDir64)\n if len(data)!=sizeEndCentDir64:\n  return endrec\n sig,sz,create_version,read_version,disk_num,disk_dir, dircount,dircount2,dirsize,diroffset= struct.unpack(structEndArchive64,data)\n if sig !=stringEndArchive64:\n  return endrec\n  \n  \n endrec[_ECD_SIGNATURE]=sig\n endrec[_ECD_DISK_NUMBER]=disk_num\n endrec[_ECD_DISK_START]=disk_dir\n endrec[_ECD_ENTRIES_THIS_DISK]=dircount\n endrec[_ECD_ENTRIES_TOTAL]=dircount2\n endrec[_ECD_SIZE]=dirsize\n endrec[_ECD_OFFSET]=diroffset\n return endrec\n \n \ndef _EndRecData(fpin):\n ''\n\n\n \n \n \n fpin.seek(0,2)\n filesize=fpin.tell()\n \n \n \n \n try :\n  fpin.seek(-sizeEndCentDir,2)\n except IOError:\n  return None\n data=fpin.read()\n if (len(data)==sizeEndCentDir and\n data[0:4]==stringEndArchive and\n data[-2:]==b\"\\000\\000\"):\n \n  endrec=struct.unpack(structEndArchive,data)\n  endrec=list(endrec)\n  \n  \n  endrec.append(b\"\")\n  endrec.append(filesize -sizeEndCentDir)\n  \n  \n  return _EndRecData64(fpin,-sizeEndCentDir,endrec)\n  \n  \n  \n  \n  \n  \n maxCommentStart=max(filesize -(1 <<16)-sizeEndCentDir,0)\n fpin.seek(maxCommentStart,0)\n data=fpin.read()\n start=data.rfind(stringEndArchive)\n if start >=0:\n \n  recData=data[start:start+sizeEndCentDir]\n  if len(recData)!=sizeEndCentDir:\n  \n   return None\n  endrec=list(struct.unpack(structEndArchive,recData))\n  commentSize=endrec[_ECD_COMMENT_SIZE]\n  comment=data[start+sizeEndCentDir:start+sizeEndCentDir+commentSize]\n  endrec.append(comment)\n  endrec.append(maxCommentStart+start)\n  \n  \n  return _EndRecData64(fpin,maxCommentStart+start -filesize,\n  endrec)\n  \n  \n return None\n \n \nclass ZipInfo(object):\n ''\n \n __slots__=(\n 'orig_filename',\n 'filename',\n 'date_time',\n 'compress_type',\n 'comment',\n 'extra',\n 'create_system',\n 'create_version',\n 'extract_version',\n 'reserved',\n 'flag_bits',\n 'volume',\n 'internal_attr',\n 'external_attr',\n 'header_offset',\n 'CRC',\n 'compress_size',\n 'file_size',\n '_raw_time',\n )\n \n def __init__(self,filename=\"NoName\",date_time=(1980,1,1,0,0,0)):\n  self.orig_filename=filename\n  \n  \n  \n  null_byte=filename.find(chr(0))\n  if null_byte >=0:\n   filename=filename[0:null_byte]\n   \n   \n   \n  if os.sep !=\"/\"and os.sep in filename:\n   filename=filename.replace(os.sep,\"/\")\n   \n  self.filename=filename\n  self.date_time=date_time\n  \n  if date_time[0]<1980:\n   raise ValueError('ZIP does not support timestamps before 1980')\n   \n   \n  self.compress_type=ZIP_STORED\n  self.comment=b\"\"\n  self.extra=b\"\"\n  if sys.platform =='win32':\n   self.create_system=0\n  else :\n  \n   self.create_system=3\n  self.create_version=DEFAULT_VERSION\n  self.extract_version=DEFAULT_VERSION\n  self.reserved=0\n  self.flag_bits=0\n  self.volume=0\n  self.internal_attr=0\n  self.external_attr=0\n  \n  \n  \n  \n  \n  \n def FileHeader(self,zip64=None ):\n  ''\n  dt=self.date_time\n  dosdate=(dt[0]-1980)<<9 |dt[1]<<5 |dt[2]\n  dostime=dt[3]<<11 |dt[4]<<5 |(dt[5]//2)\n  if self.flag_bits&0x08:\n  \n   CRC=compress_size=file_size=0\n  else :\n   CRC=self.CRC\n   compress_size=self.compress_size\n   file_size=self.file_size\n   \n  extra=self.extra\n  \n  min_version=0\n  if zip64 is None :\n   zip64=file_size >ZIP64_LIMIT or compress_size >ZIP64_LIMIT\n  if zip64:\n   fmt='<HHQQ'\n   extra=extra+struct.pack(fmt,\n   1,struct.calcsize(fmt)-4,file_size,compress_size)\n  if file_size >ZIP64_LIMIT or compress_size >ZIP64_LIMIT:\n   if not zip64:\n    raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n    \n    \n   file_size=0xffffffff\n   compress_size=0xffffffff\n   min_version=ZIP64_VERSION\n   \n  if self.compress_type ==ZIP_BZIP2:\n   min_version=max(BZIP2_VERSION,min_version)\n  elif self.compress_type ==ZIP_LZMA:\n   min_version=max(LZMA_VERSION,min_version)\n   \n  self.extract_version=max(min_version,self.extract_version)\n  self.create_version=max(min_version,self.create_version)\n  filename,flag_bits=self._encodeFilenameFlags()\n  header=struct.pack(structFileHeader,stringFileHeader,\n  self.extract_version,self.reserved,flag_bits,\n  self.compress_type,dostime,dosdate,CRC,\n  compress_size,file_size,\n  len(filename),len(extra))\n  return header+filename+extra\n  \n def _encodeFilenameFlags(self):\n  try :\n   return self.filename.encode('ascii'),self.flag_bits\n  except UnicodeEncodeError:\n   return self.filename.encode('utf-8'),self.flag_bits |0x800\n   \n def _decodeExtra(self):\n \n  extra=self.extra\n  unpack=struct.unpack\n  while extra:\n   tp,ln=unpack('<HH',extra[:4])\n   if tp ==1:\n    if ln >=24:\n     counts=unpack('<QQQ',extra[4:28])\n    elif ln ==16:\n     counts=unpack('<QQ',extra[4:20])\n    elif ln ==8:\n     counts=unpack('<Q',extra[4:12])\n    elif ln ==0:\n     counts=()\n    else :\n     raise RuntimeError(\"Corrupt extra field %s\"%(ln,))\n     \n    idx=0\n    \n    \n    if self.file_size in (0xffffffffffffffff,0xffffffff):\n     self.file_size=counts[idx]\n     idx +=1\n     \n    if self.compress_size ==0xFFFFFFFF:\n     self.compress_size=counts[idx]\n     idx +=1\n     \n    if self.header_offset ==0xffffffff:\n     old=self.header_offset\n     self.header_offset=counts[idx]\n     idx +=1\n     \n   extra=extra[ln+4:]\n   \n   \nclass _ZipDecrypter:\n ''\n\n\n\n\n\n\n\n\n\n \n \n def _GenerateCRCTable():\n  ''\n\n\n\n\n  \n  poly=0xedb88320\n  table=[0]*256\n  for i in range(256):\n   crc=i\n   for j in range(8):\n    if crc&1:\n     crc=((crc >>1)&0x7FFFFFFF)^poly\n    else :\n     crc=((crc >>1)&0x7FFFFFFF)\n   table[i]=crc\n  return table\n crctable=_GenerateCRCTable()\n \n def _crc32(self,ch,crc):\n  ''\n  return ((crc >>8)&0xffffff)^self.crctable[(crc ^ch)&0xff]\n  \n def __init__(self,pwd):\n  self.key0=305419896\n  self.key1=591751049\n  self.key2=878082192\n  for p in pwd:\n   self._UpdateKeys(p)\n   \n def _UpdateKeys(self,c):\n  self.key0=self._crc32(c,self.key0)\n  self.key1=(self.key1+(self.key0&255))&4294967295\n  self.key1=(self.key1 *134775813+1)&4294967295\n  self.key2=self._crc32((self.key1 >>24)&255,self.key2)\n  \n def __call__(self,c):\n  ''\n  assert isinstance(c,int)\n  k=self.key2 |2\n  c=c ^(((k *(k ^1))>>8)&255)\n  self._UpdateKeys(c)\n  return c\n  \n  \nclass LZMACompressor:\n\n def __init__(self):\n  self._comp=None\n  \n def _init(self):\n  props=lzma._encode_filter_properties({'id':lzma.FILTER_LZMA1})\n  self._comp=lzma.LZMACompressor(lzma.FORMAT_RAW,filters=[\n  lzma._decode_filter_properties(lzma.FILTER_LZMA1,props)\n  ])\n  return struct.pack('<BBH',9,4,len(props))+props\n  \n def compress(self,data):\n  if self._comp is None :\n   return self._init()+self._comp.compress(data)\n  return self._comp.compress(data)\n  \n def flush(self):\n  if self._comp is None :\n   return self._init()+self._comp.flush()\n  return self._comp.flush()\n  \n  \nclass LZMADecompressor:\n\n def __init__(self):\n  self._decomp=None\n  self._unconsumed=b''\n  self.eof=False\n  \n def decompress(self,data):\n  if self._decomp is None :\n   self._unconsumed +=data\n   if len(self._unconsumed)<=4:\n    return b''\n   psize,=struct.unpack('<H',self._unconsumed[2:4])\n   if len(self._unconsumed)<=4+psize:\n    return b''\n    \n   self._decomp=lzma.LZMADecompressor(lzma.FORMAT_RAW,filters=[\n   lzma._decode_filter_properties(lzma.FILTER_LZMA1,\n   self._unconsumed[4:4+psize])\n   ])\n   data=self._unconsumed[4+psize:]\n   del self._unconsumed\n   \n  result=self._decomp.decompress(data)\n  self.eof=self._decomp.eof\n  return result\n  \n  \ncompressor_names={\n0:'store',\n1:'shrink',\n2:'reduce',\n3:'reduce',\n4:'reduce',\n5:'reduce',\n6:'implode',\n7:'tokenize',\n8:'deflate',\n9:'deflate64',\n10:'implode',\n12:'bzip2',\n14:'lzma',\n18:'terse',\n19:'lz77',\n97:'wavpack',\n98:'ppmd',\n}\n\ndef _check_compression(compression):\n if compression ==ZIP_STORED:\n  pass\n elif compression ==ZIP_DEFLATED:\n  if not zlib:\n   raise RuntimeError(\n   \"Compression requires the (missing) zlib module\")\n elif compression ==ZIP_BZIP2:\n  if not bz2:\n   raise RuntimeError(\n   \"Compression requires the (missing) bz2 module\")\n elif compression ==ZIP_LZMA:\n  if not lzma:\n   raise RuntimeError(\n   \"Compression requires the (missing) lzma module\")\n else :\n  raise RuntimeError(\"That compression method is not supported\")\n  \n  \ndef _get_compressor(compress_type):\n if compress_type ==ZIP_DEFLATED:\n  return zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,\n  zlib.DEFLATED,-15)\n elif compress_type ==ZIP_BZIP2:\n  return bz2.BZ2Compressor()\n elif compress_type ==ZIP_LZMA:\n  return LZMACompressor()\n else :\n  return None\n  \n  \ndef _get_decompressor(compress_type):\n if compress_type ==ZIP_STORED:\n  return None\n elif compress_type ==ZIP_DEFLATED:\n  return zlib.decompressobj(-15)\n elif compress_type ==ZIP_BZIP2:\n  return bz2.BZ2Decompressor()\n elif compress_type ==ZIP_LZMA:\n  return LZMADecompressor()\n else :\n  descr=compressor_names.get(compress_type)\n  if descr:\n   raise NotImplementedError(\"compression type %d (%s)\"%(compress_type,descr))\n  else :\n   raise NotImplementedError(\"compression type %d\"%(compress_type,))\n   \n   \nclass ZipExtFile(io.BufferedIOBase):\n ''\n\n \n \n \n MAX_N=1 <<31 -1\n \n \n MIN_READ_SIZE=4096\n \n \n PATTERN=re.compile(br'^(?P<chunk>[^\\r\\n]+)|(?P<newline>\\n|\\r\\n?)')\n \n def __init__(self,fileobj,mode,zipinfo,decrypter=None ,\n close_fileobj=False ):\n  self._fileobj=fileobj\n  self._decrypter=decrypter\n  self._close_fileobj=close_fileobj\n  \n  self._compress_type=zipinfo.compress_type\n  self._compress_left=zipinfo.compress_size\n  self._left=zipinfo.file_size\n  \n  self._decompressor=_get_decompressor(self._compress_type)\n  \n  self._eof=False\n  self._readbuffer=b''\n  self._offset=0\n  \n  self._universal='U'in mode\n  self.newlines=None\n  \n  \n  \n  if self._decrypter is not None :\n   self._compress_left -=12\n   \n  self.mode=mode\n  self.name=zipinfo.filename\n  \n  if hasattr(zipinfo,'CRC'):\n   self._expected_crc=zipinfo.CRC\n   self._running_crc=crc32(b'')&0xffffffff\n  else :\n   self._expected_crc=None\n   \n def readline(self,limit=-1):\n  ''\n\n\n  \n  \n  if not self._universal and limit <0:\n  \n   i=self._readbuffer.find(b'\\n',self._offset)+1\n   if i >0:\n    line=self._readbuffer[self._offset:i]\n    self._offset=i\n    return line\n    \n  if not self._universal:\n   return io.BufferedIOBase.readline(self,limit)\n   \n  line=b''\n  while limit <0 or len(line)<limit:\n   readahead=self.peek(2)\n   if readahead ==b'':\n    return line\n    \n    \n    \n    \n    \n    \n    \n    \n    \n   match=self.PATTERN.search(readahead)\n   newline=match.group('newline')\n   if newline is not None :\n    if self.newlines is None :\n     self.newlines=[]\n    if newline not in self.newlines:\n     self.newlines.append(newline)\n    self._offset +=len(newline)\n    return line+b'\\n'\n    \n   chunk=match.group('chunk')\n   if limit >=0:\n    chunk=chunk[:limit -len(line)]\n    \n   self._offset +=len(chunk)\n   line +=chunk\n   \n  return line\n  \n def peek(self,n=1):\n  ''\n  if n >len(self._readbuffer)-self._offset:\n   chunk=self.read(n)\n   if len(chunk)>self._offset:\n    self._readbuffer=chunk+self._readbuffer[self._offset:]\n    self._offset=0\n   else :\n    self._offset -=len(chunk)\n    \n    \n  return self._readbuffer[self._offset:self._offset+512]\n  \n def readable(self):\n  return True\n  \n def read(self,n=-1):\n  ''\n\n  \n  if n is None or n <0:\n   buf=self._readbuffer[self._offset:]\n   self._readbuffer=b''\n   self._offset=0\n   while not self._eof:\n    buf +=self._read1(self.MAX_N)\n   return buf\n   \n  end=n+self._offset\n  if end <len(self._readbuffer):\n   buf=self._readbuffer[self._offset:end]\n   self._offset=end\n   return buf\n   \n  n=end -len(self._readbuffer)\n  buf=self._readbuffer[self._offset:]\n  self._readbuffer=b''\n  self._offset=0\n  while n >0 and not self._eof:\n   data=self._read1(n)\n   if n <len(data):\n    self._readbuffer=data\n    self._offset=n\n    buf +=data[:n]\n    break\n   buf +=data\n   n -=len(data)\n  return buf\n  \n def _update_crc(self,newdata):\n \n  if self._expected_crc is None :\n  \n   return\n  self._running_crc=crc32(newdata,self._running_crc)&0xffffffff\n  \n  if self._eof and self._running_crc !=self._expected_crc:\n   raise BadZipFile(\"Bad CRC-32 for file %r\"%self.name)\n   \n def read1(self,n):\n  ''\n  \n  if n is None or n <0:\n   buf=self._readbuffer[self._offset:]\n   self._readbuffer=b''\n   self._offset=0\n   while not self._eof:\n    data=self._read1(self.MAX_N)\n    if data:\n     buf +=data\n     break\n   return buf\n   \n  end=n+self._offset\n  if end <len(self._readbuffer):\n   buf=self._readbuffer[self._offset:end]\n   self._offset=end\n   return buf\n   \n  n=end -len(self._readbuffer)\n  buf=self._readbuffer[self._offset:]\n  self._readbuffer=b''\n  self._offset=0\n  if n >0:\n   while not self._eof:\n    data=self._read1(n)\n    if n <len(data):\n     self._readbuffer=data\n     self._offset=n\n     buf +=data[:n]\n     break\n    if data:\n     buf +=data\n     break\n  return buf\n  \n def _read1(self,n):\n \n \n  if self._eof or n <=0:\n   return b''\n   \n   \n  if self._compress_type ==ZIP_DEFLATED:\n  \n   data=self._decompressor.unconsumed_tail\n   if n >len(data):\n    data +=self._read2(n -len(data))\n  else :\n   data=self._read2(n)\n   \n  if self._compress_type ==ZIP_STORED:\n   self._eof=self._compress_left <=0\n  elif self._compress_type ==ZIP_DEFLATED:\n   n=max(n,self.MIN_READ_SIZE)\n   data=self._decompressor.decompress(data,n)\n   self._eof=(self._decompressor.eof or\n   self._compress_left <=0 and\n   not self._decompressor.unconsumed_tail)\n   if self._eof:\n    data +=self._decompressor.flush()\n  else :\n   data=self._decompressor.decompress(data)\n   self._eof=self._decompressor.eof or self._compress_left <=0\n   \n  data=data[:self._left]\n  self._left -=len(data)\n  if self._left <=0:\n   self._eof=True\n  self._update_crc(data)\n  return data\n  \n def _read2(self,n):\n  if self._compress_left <=0:\n   return b''\n   \n  n=max(n,self.MIN_READ_SIZE)\n  n=min(n,self._compress_left)\n  \n  data=self._fileobj.read(n)\n  self._compress_left -=len(data)\n  \n  if self._decrypter is not None :\n   data=bytes(map(self._decrypter,data))\n  return data\n  \n def close(self):\n  try :\n   if self._close_fileobj:\n    self._fileobj.close()\n  finally :\n   super().close()\n   \n   \nclass ZipFile:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n fp=None\n _windows_illegal_name_trans_table=None\n \n def __init__(self,file,mode=\"r\",compression=ZIP_STORED,allowZip64=False ):\n  ''\n  if mode not in (\"r\",\"w\",\"a\"):\n   raise RuntimeError('ZipFile() requires mode \"r\", \"w\", or \"a\"')\n   \n  _check_compression(compression)\n  \n  self._allowZip64=allowZip64\n  self._didModify=False\n  self.debug=0\n  self.NameToInfo={}\n  self.filelist=[]\n  self.compression=compression\n  self.mode=key=mode.replace('b','')[0]\n  self.pwd=None\n  self._comment=b''\n  \n  \n  if isinstance(file,str):\n  \n   self._filePassed=0\n   self.filename=file\n   modeDict={'r':'rb','w':'wb','a':'r+b'}\n   try :\n    self.fp=io.open(file,modeDict[mode])\n   except IOError:\n    if mode =='a':\n     mode=key='w'\n     self.fp=io.open(file,modeDict[mode])\n    else :\n     raise\n  else :\n   self._filePassed=1\n   self.fp=file\n   self.filename=getattr(file,'name',None )\n   \n  try :\n   if key =='r':\n    self._RealGetContents()\n   elif key =='w':\n   \n   \n    self._didModify=True\n   elif key =='a':\n    try :\n    \n     self._RealGetContents()\n     \n     self.fp.seek(self.start_dir,0)\n    except BadZipFile:\n    \n     self.fp.seek(0,2)\n     \n     \n     \n     self._didModify=True\n   else :\n    raise RuntimeError('Mode must be \"r\", \"w\" or \"a\"')\n  except :\n   fp=self.fp\n   self.fp=None\n   if not self._filePassed:\n    fp.close()\n   raise\n   \n def __enter__(self):\n  return self\n  \n def __exit__(self,type,value,traceback):\n  self.close()\n  \n def _RealGetContents(self):\n  ''\n  fp=self.fp\n  try :\n   endrec=_EndRecData(fp)\n  except IOError:\n   raise BadZipFile(\"File is not a zip file\")\n  if not endrec:\n   raise BadZipFile(\"File is not a zip file\")\n  if self.debug >1:\n   print(endrec)\n  size_cd=endrec[_ECD_SIZE]\n  offset_cd=endrec[_ECD_OFFSET]\n  self._comment=endrec[_ECD_COMMENT]\n  \n  \n  concat=endrec[_ECD_LOCATION]-size_cd -offset_cd\n  if endrec[_ECD_SIGNATURE]==stringEndArchive64:\n  \n   concat -=(sizeEndCentDir64+sizeEndCentDir64Locator)\n   \n  if self.debug >2:\n   inferred=concat+offset_cd\n   print(\"given, inferred, offset\",offset_cd,inferred,concat)\n   \n  self.start_dir=offset_cd+concat\n  fp.seek(self.start_dir,0)\n  data=fp.read(size_cd)\n  fp=io.BytesIO(data)\n  total=0\n  while total <size_cd:\n   centdir=fp.read(sizeCentralDir)\n   if len(centdir)!=sizeCentralDir:\n    raise BadZipFile(\"Truncated central directory\")\n   centdir=struct.unpack(structCentralDir,centdir)\n   if centdir[_CD_SIGNATURE]!=stringCentralDir:\n    raise BadZipFile(\"Bad magic number for central directory\")\n   if self.debug >2:\n    print(centdir)\n   filename=fp.read(centdir[_CD_FILENAME_LENGTH])\n   flags=centdir[5]\n   if flags&0x800:\n   \n    filename=filename.decode('utf-8')\n   else :\n   \n    filename=filename.decode('cp437')\n    \n   x=ZipInfo(filename)\n   x.extra=fp.read(centdir[_CD_EXTRA_FIELD_LENGTH])\n   x.comment=fp.read(centdir[_CD_COMMENT_LENGTH])\n   x.header_offset=centdir[_CD_LOCAL_HEADER_OFFSET]\n   (x.create_version,x.create_system,x.extract_version,x.reserved,\n   x.flag_bits,x.compress_type,t,d,\n   x.CRC,x.compress_size,x.file_size)=centdir[1:12]\n   if x.extract_version >MAX_EXTRACT_VERSION:\n    raise NotImplementedError(\"zip file version %.1f\"%\n    (x.extract_version /10))\n   x.volume,x.internal_attr,x.external_attr=centdir[15:18]\n   \n   x._raw_time=t\n   x.date_time=((d >>9)+1980,(d >>5)&0xF,d&0x1F,\n   t >>11,(t >>5)&0x3F,(t&0x1F)*2)\n   \n   x._decodeExtra()\n   x.header_offset=x.header_offset+concat\n   self.filelist.append(x)\n   self.NameToInfo[x.filename]=x\n   \n   \n   total=(total+sizeCentralDir+centdir[_CD_FILENAME_LENGTH]\n   +centdir[_CD_EXTRA_FIELD_LENGTH]\n   +centdir[_CD_COMMENT_LENGTH])\n   \n   if self.debug >2:\n    print(\"total\",total)\n    \n    \n def namelist(self):\n  ''\n  return [data.filename for data in self.filelist]\n  \n def infolist(self):\n  ''\n  \n  return self.filelist\n  \n def printdir(self,file=None ):\n  ''\n  print(\"%-46s %19s %12s\"%(\"File Name\",\"Modified    \",\"Size\"),\n  file=file)\n  for zinfo in self.filelist:\n   date=\"%d-%02d-%02d %02d:%02d:%02d\"%zinfo.date_time[:6]\n   print(\"%-46s %s %12d\"%(zinfo.filename,date,zinfo.file_size),\n   file=file)\n   \n def testzip(self):\n  ''\n  chunk_size=2 **20\n  for zinfo in self.filelist:\n   try :\n   \n   \n    with self.open(zinfo.filename,\"r\")as f:\n     while f.read(chunk_size):\n      pass\n   except BadZipFile:\n    return zinfo.filename\n    \n def getinfo(self,name):\n  ''\n  info=self.NameToInfo.get(name)\n  if info is None :\n   raise KeyError(\n   'There is no item named %r in the archive'%name)\n   \n  return info\n  \n def setpassword(self,pwd):\n  ''\n  if pwd and not isinstance(pwd,bytes):\n   raise TypeError(\"pwd: expected bytes, got %s\"%type(pwd))\n  if pwd:\n   self.pwd=pwd\n  else :\n   self.pwd=None\n   \n @property\n def comment(self):\n  ''\n  return self._comment\n  \n @comment.setter\n def comment(self,comment):\n  if not isinstance(comment,bytes):\n   raise TypeError(\"comment: expected bytes, got %s\"%type(comment))\n   \n  if len(comment)>=ZIP_MAX_COMMENT:\n   if self.debug:\n    print('Archive comment is too long; truncating to %d bytes'\n    %ZIP_MAX_COMMENT)\n   comment=comment[:ZIP_MAX_COMMENT]\n  self._comment=comment\n  self._didModify=True\n  \n def read(self,name,pwd=None ):\n  ''\n  with self.open(name,\"r\",pwd)as fp:\n   return fp.read()\n   \n def open(self,name,mode=\"r\",pwd=None ):\n  ''\n  if mode not in (\"r\",\"U\",\"rU\"):\n   raise RuntimeError('open() requires mode \"r\", \"U\", or \"rU\"')\n  if pwd and not isinstance(pwd,bytes):\n   raise TypeError(\"pwd: expected bytes, got %s\"%type(pwd))\n  if not self.fp:\n   raise RuntimeError(\n   \"Attempt to read ZIP archive that was already closed\")\n   \n   \n   \n  if self._filePassed:\n   zef_file=self.fp\n  else :\n   zef_file=io.open(self.filename,'rb')\n   \n  try :\n  \n   if isinstance(name,ZipInfo):\n   \n    zinfo=name\n   else :\n   \n    zinfo=self.getinfo(name)\n   zef_file.seek(zinfo.header_offset,0)\n   \n   \n   fheader=zef_file.read(sizeFileHeader)\n   if len(fheader)!=sizeFileHeader:\n    raise BadZipFile(\"Truncated file header\")\n   fheader=struct.unpack(structFileHeader,fheader)\n   if fheader[_FH_SIGNATURE]!=stringFileHeader:\n    raise BadZipFile(\"Bad magic number for file header\")\n    \n   fname=zef_file.read(fheader[_FH_FILENAME_LENGTH])\n   if fheader[_FH_EXTRA_FIELD_LENGTH]:\n    zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])\n    \n   if zinfo.flag_bits&0x20:\n   \n    raise NotImplementedError(\"compressed patched data (flag bit 5)\")\n    \n   if zinfo.flag_bits&0x40:\n   \n    raise NotImplementedError(\"strong encryption (flag bit 6)\")\n    \n   if zinfo.flag_bits&0x800:\n   \n    fname_str=fname.decode(\"utf-8\")\n   else :\n    fname_str=fname.decode(\"cp437\")\n    \n   if fname_str !=zinfo.orig_filename:\n    raise BadZipFile(\n    'File name in directory %r and header %r differ.'\n    %(zinfo.orig_filename,fname))\n    \n    \n   is_encrypted=zinfo.flag_bits&0x1\n   zd=None\n   if is_encrypted:\n    if not pwd:\n     pwd=self.pwd\n    if not pwd:\n     raise RuntimeError(\"File %s is encrypted, password \"\n     \"required for extraction\"%name)\n     \n    zd=_ZipDecrypter(pwd)\n    \n    \n    \n    \n    \n    header=zef_file.read(12)\n    h=list(map(zd,header[0:12]))\n    if zinfo.flag_bits&0x8:\n    \n     check_byte=(zinfo._raw_time >>8)&0xff\n    else :\n    \n     check_byte=(zinfo.CRC >>24)&0xff\n    if h[11]!=check_byte:\n     raise RuntimeError(\"Bad password for file\",name)\n     \n   return ZipExtFile(zef_file,mode,zinfo,zd,\n   close_fileobj=not self._filePassed)\n  except :\n   if not self._filePassed:\n    zef_file.close()\n   raise\n   \n def extract(self,member,path=None ,pwd=None ):\n  ''\n\n\n\n  \n  if not isinstance(member,ZipInfo):\n   member=self.getinfo(member)\n   \n  if path is None :\n   path=os.getcwd()\n   \n  return self._extract_member(member,path,pwd)\n  \n def extractall(self,path=None ,members=None ,pwd=None ):\n  ''\n\n\n\n  \n  if members is None :\n   members=self.namelist()\n   \n  for zipinfo in members:\n   self.extract(zipinfo,path,pwd)\n   \n @classmethod\n def _sanitize_windows_name(cls,arcname,pathsep):\n  ''\n  table=cls._windows_illegal_name_trans_table\n  if not table:\n   illegal=':<>|\"?*'\n   table=str.maketrans(illegal,'_'*len(illegal))\n   cls._windows_illegal_name_trans_table=table\n  arcname=arcname.translate(table)\n  \n  arcname=(x.rstrip('.')for x in arcname.split(pathsep))\n  \n  arcname=pathsep.join(x for x in arcname if x)\n  return arcname\n  \n def _extract_member(self,member,targetpath,pwd):\n  ''\n\n  \n  \n  \n  arcname=member.filename.replace('/',os.path.sep)\n  \n  if os.path.altsep:\n   arcname=arcname.replace(os.path.altsep,os.path.sep)\n   \n   \n  arcname=os.path.splitdrive(arcname)[1]\n  invalid_path_parts=('',os.path.curdir,os.path.pardir)\n  arcname=os.path.sep.join(x for x in arcname.split(os.path.sep)\n  if x not in invalid_path_parts)\n  if os.path.sep =='\\\\':\n  \n   arcname=self._sanitize_windows_name(arcname,os.path.sep)\n   \n  targetpath=os.path.join(targetpath,arcname)\n  targetpath=os.path.normpath(targetpath)\n  \n  \n  upperdirs=os.path.dirname(targetpath)\n  if upperdirs and not os.path.exists(upperdirs):\n   os.makedirs(upperdirs)\n   \n  if member.filename[-1]=='/':\n   if not os.path.isdir(targetpath):\n    os.mkdir(targetpath)\n   return targetpath\n   \n  with self.open(member,pwd=pwd)as source,  open(targetpath,\"wb\")as target:\n   shutil.copyfileobj(source,target)\n   \n  return targetpath\n  \n def _writecheck(self,zinfo):\n  ''\n  if zinfo.filename in self.NameToInfo:\n   if self.debug:\n    print(\"Duplicate name:\",zinfo.filename)\n  if self.mode not in (\"w\",\"a\"):\n   raise RuntimeError('write() requires mode \"w\" or \"a\"')\n  if not self.fp:\n   raise RuntimeError(\n   \"Attempt to write ZIP archive that was already closed\")\n  _check_compression(zinfo.compress_type)\n  if zinfo.file_size >ZIP64_LIMIT:\n   if not self._allowZip64:\n    raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n  if zinfo.header_offset >ZIP64_LIMIT:\n   if not self._allowZip64:\n    raise LargeZipFile(\n    \"Zipfile size would require ZIP64 extensions\")\n    \n def write(self,filename,arcname=None ,compress_type=None ):\n  ''\n  \n  if not self.fp:\n   raise RuntimeError(\n   \"Attempt to write to ZIP archive that was already closed\")\n   \n  st=os.stat(filename)\n  isdir=stat.S_ISDIR(st.st_mode)\n  mtime=time.localtime(st.st_mtime)\n  date_time=mtime[0:6]\n  \n  if arcname is None :\n   arcname=filename\n  arcname=os.path.normpath(os.path.splitdrive(arcname)[1])\n  while arcname[0]in (os.sep,os.altsep):\n   arcname=arcname[1:]\n  if isdir:\n   arcname +='/'\n  zinfo=ZipInfo(arcname,date_time)\n  zinfo.external_attr=(st[0]&0xFFFF)<<16\n  if compress_type is None :\n   zinfo.compress_type=self.compression\n  else :\n   zinfo.compress_type=compress_type\n   \n  zinfo.file_size=st.st_size\n  zinfo.flag_bits=0x00\n  zinfo.header_offset=self.fp.tell()\n  if zinfo.compress_type ==ZIP_LZMA:\n  \n   zinfo.flag_bits |=0x02\n   \n  self._writecheck(zinfo)\n  self._didModify=True\n  \n  if isdir:\n   zinfo.file_size=0\n   zinfo.compress_size=0\n   zinfo.CRC=0\n   self.filelist.append(zinfo)\n   self.NameToInfo[zinfo.filename]=zinfo\n   self.fp.write(zinfo.FileHeader(False ))\n   return\n   \n  cmpr=_get_compressor(zinfo.compress_type)\n  with open(filename,\"rb\")as fp:\n  \n   zinfo.CRC=CRC=0\n   zinfo.compress_size=compress_size=0\n   \n   zip64=self._allowZip64 and   zinfo.file_size *1.05 >ZIP64_LIMIT\n   self.fp.write(zinfo.FileHeader(zip64))\n   file_size=0\n   while 1:\n    buf=fp.read(1024 *8)\n    if not buf:\n     break\n    file_size=file_size+len(buf)\n    CRC=crc32(buf,CRC)&0xffffffff\n    if cmpr:\n     buf=cmpr.compress(buf)\n     compress_size=compress_size+len(buf)\n    self.fp.write(buf)\n  if cmpr:\n   buf=cmpr.flush()\n   compress_size=compress_size+len(buf)\n   self.fp.write(buf)\n   zinfo.compress_size=compress_size\n  else :\n   zinfo.compress_size=file_size\n  zinfo.CRC=CRC\n  zinfo.file_size=file_size\n  if not zip64 and self._allowZip64:\n   if file_size >ZIP64_LIMIT:\n    raise RuntimeError('File size has increased during compressing')\n   if compress_size >ZIP64_LIMIT:\n    raise RuntimeError('Compressed size larger than uncompressed size')\n    \n    \n  position=self.fp.tell()\n  self.fp.seek(zinfo.header_offset,0)\n  self.fp.write(zinfo.FileHeader(zip64))\n  self.fp.seek(position,0)\n  self.filelist.append(zinfo)\n  self.NameToInfo[zinfo.filename]=zinfo\n  \n def writestr(self,zinfo_or_arcname,data,compress_type=None ):\n  ''\n\n\n\n  \n  if isinstance(data,str):\n   data=data.encode(\"utf-8\")\n  if not isinstance(zinfo_or_arcname,ZipInfo):\n   zinfo=ZipInfo(filename=zinfo_or_arcname,\n   date_time=time.localtime(time.time())[:6])\n   zinfo.compress_type=self.compression\n   zinfo.external_attr=0o600 <<16\n  else :\n   zinfo=zinfo_or_arcname\n   \n  if not self.fp:\n   raise RuntimeError(\n   \"Attempt to write to ZIP archive that was already closed\")\n   \n  zinfo.file_size=len(data)\n  zinfo.header_offset=self.fp.tell()\n  if compress_type is not None :\n   zinfo.compress_type=compress_type\n  if zinfo.compress_type ==ZIP_LZMA:\n  \n   zinfo.flag_bits |=0x02\n   \n  self._writecheck(zinfo)\n  self._didModify=True\n  zinfo.CRC=crc32(data)&0xffffffff\n  co=_get_compressor(zinfo.compress_type)\n  if co:\n   data=co.compress(data)+co.flush()\n   zinfo.compress_size=len(data)\n  else :\n   zinfo.compress_size=zinfo.file_size\n  zip64=zinfo.file_size >ZIP64_LIMIT or  zinfo.compress_size >ZIP64_LIMIT\n  if zip64 and not self._allowZip64:\n   raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n  self.fp.write(zinfo.FileHeader(zip64))\n  self.fp.write(data)\n  if zinfo.flag_bits&0x08:\n  \n   fmt='<LQQ'if zip64 else'<LLL'\n   self.fp.write(struct.pack(fmt,zinfo.CRC,zinfo.compress_size,\n   zinfo.file_size))\n  self.fp.flush()\n  self.filelist.append(zinfo)\n  self.NameToInfo[zinfo.filename]=zinfo\n  \n def __del__(self):\n  ''\n  self.close()\n  \n def close(self):\n  ''\n  \n  if self.fp is None :\n   return\n   \n  try :\n   if self.mode in (\"w\",\"a\")and self._didModify:\n    count=0\n    pos1=self.fp.tell()\n    for zinfo in self.filelist:\n     count=count+1\n     dt=zinfo.date_time\n     dosdate=(dt[0]-1980)<<9 |dt[1]<<5 |dt[2]\n     dostime=dt[3]<<11 |dt[4]<<5 |(dt[5]//2)\n     extra=[]\n     if zinfo.file_size >ZIP64_LIMIT     or zinfo.compress_size >ZIP64_LIMIT:\n      extra.append(zinfo.file_size)\n      extra.append(zinfo.compress_size)\n      file_size=0xffffffff\n      compress_size=0xffffffff\n     else :\n      file_size=zinfo.file_size\n      compress_size=zinfo.compress_size\n      \n     if zinfo.header_offset >ZIP64_LIMIT:\n      extra.append(zinfo.header_offset)\n      header_offset=0xffffffff\n     else :\n      header_offset=zinfo.header_offset\n      \n     extra_data=zinfo.extra\n     min_version=0\n     if extra:\n     \n      extra_data=struct.pack(\n      '<HH'+'Q'*len(extra),\n      1,8 *len(extra),*extra)+extra_data\n      \n      min_version=ZIP64_VERSION\n      \n     if zinfo.compress_type ==ZIP_BZIP2:\n      min_version=max(BZIP2_VERSION,min_version)\n     elif zinfo.compress_type ==ZIP_LZMA:\n      min_version=max(LZMA_VERSION,min_version)\n      \n     extract_version=max(min_version,zinfo.extract_version)\n     create_version=max(min_version,zinfo.create_version)\n     try :\n      filename,flag_bits=zinfo._encodeFilenameFlags()\n      centdir=struct.pack(structCentralDir,\n      stringCentralDir,create_version,\n      zinfo.create_system,extract_version,zinfo.reserved,\n      flag_bits,zinfo.compress_type,dostime,dosdate,\n      zinfo.CRC,compress_size,file_size,\n      len(filename),len(extra_data),len(zinfo.comment),\n      0,zinfo.internal_attr,zinfo.external_attr,\n      header_offset)\n     except DeprecationWarning:\n      print((structCentralDir,stringCentralDir,create_version,\n      zinfo.create_system,extract_version,zinfo.reserved,\n      zinfo.flag_bits,zinfo.compress_type,dostime,dosdate,\n      zinfo.CRC,compress_size,file_size,\n      len(zinfo.filename),len(extra_data),len(zinfo.comment),\n      0,zinfo.internal_attr,zinfo.external_attr,\n      header_offset),file=sys.stderr)\n      raise\n     self.fp.write(centdir)\n     self.fp.write(filename)\n     self.fp.write(extra_data)\n     self.fp.write(zinfo.comment)\n     \n    pos2=self.fp.tell()\n    \n    centDirCount=count\n    centDirSize=pos2 -pos1\n    centDirOffset=pos1\n    if (centDirCount >=ZIP_FILECOUNT_LIMIT or\n    centDirOffset >ZIP64_LIMIT or\n    centDirSize >ZIP64_LIMIT):\n    \n     zip64endrec=struct.pack(\n     structEndArchive64,stringEndArchive64,\n     44,45,45,0,0,centDirCount,centDirCount,\n     centDirSize,centDirOffset)\n     self.fp.write(zip64endrec)\n     \n     zip64locrec=struct.pack(\n     structEndArchive64Locator,\n     stringEndArchive64Locator,0,pos2,1)\n     self.fp.write(zip64locrec)\n     centDirCount=min(centDirCount,0xFFFF)\n     centDirSize=min(centDirSize,0xFFFFFFFF)\n     centDirOffset=min(centDirOffset,0xFFFFFFFF)\n     \n    endrec=struct.pack(structEndArchive,stringEndArchive,\n    0,0,centDirCount,centDirCount,\n    centDirSize,centDirOffset,len(self._comment))\n    self.fp.write(endrec)\n    self.fp.write(self._comment)\n    self.fp.flush()\n  finally :\n   fp=self.fp\n   self.fp=None\n   if not self._filePassed:\n    fp.close()\n    \n    \nclass PyZipFile(ZipFile):\n ''\n \n def __init__(self,file,mode=\"r\",compression=ZIP_STORED,\n allowZip64=False ,optimize=-1):\n  ZipFile.__init__(self,file,mode=mode,compression=compression,\n  allowZip64=allowZip64)\n  self._optimize=optimize\n  \n def writepy(self,pathname,basename=\"\"):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  dir,name=os.path.split(pathname)\n  if os.path.isdir(pathname):\n   initname=os.path.join(pathname,\"__init__.py\")\n   if os.path.isfile(initname):\n   \n    if basename:\n     basename=\"%s/%s\"%(basename,name)\n    else :\n     basename=name\n    if self.debug:\n     print(\"Adding package in\",pathname,\"as\",basename)\n    fname,arcname=self._get_codename(initname[0:-3],basename)\n    if self.debug:\n     print(\"Adding\",arcname)\n    self.write(fname,arcname)\n    dirlist=os.listdir(pathname)\n    dirlist.remove(\"__init__.py\")\n    \n    for filename in dirlist:\n     path=os.path.join(pathname,filename)\n     root,ext=os.path.splitext(filename)\n     if os.path.isdir(path):\n      if os.path.isfile(os.path.join(path,\"__init__.py\")):\n      \n       self.writepy(path,basename)\n     elif ext ==\".py\":\n      fname,arcname=self._get_codename(path[0:-3],\n      basename)\n      if self.debug:\n       print(\"Adding\",arcname)\n      self.write(fname,arcname)\n   else :\n   \n    if self.debug:\n     print(\"Adding files from directory\",pathname)\n    for filename in os.listdir(pathname):\n     path=os.path.join(pathname,filename)\n     root,ext=os.path.splitext(filename)\n     if ext ==\".py\":\n      fname,arcname=self._get_codename(path[0:-3],\n      basename)\n      if self.debug:\n       print(\"Adding\",arcname)\n      self.write(fname,arcname)\n  else :\n   if pathname[-3:]!=\".py\":\n    raise RuntimeError(\n    'Files added with writepy() must end with \".py\"')\n   fname,arcname=self._get_codename(pathname[0:-3],basename)\n   if self.debug:\n    print(\"Adding file\",arcname)\n   self.write(fname,arcname)\n   \n def _get_codename(self,pathname,basename):\n  ''\n\n\n\n\n  \n  def _compile(file,optimize=-1):\n   import py_compile\n   if self.debug:\n    print(\"Compiling\",file)\n   try :\n    py_compile.compile(file,doraise=True ,optimize=optimize)\n   except py_compile.PyCompileError as err:\n    print(err.msg)\n    return False\n   return True\n   \n  file_py=pathname+\".py\"\n  file_pyc=pathname+\".pyc\"\n  file_pyo=pathname+\".pyo\"\n  pycache_pyc=imp.cache_from_source(file_py,True )\n  pycache_pyo=imp.cache_from_source(file_py,False )\n  if self._optimize ==-1:\n  \n   if (os.path.isfile(file_pyo)and\n   os.stat(file_pyo).st_mtime >=os.stat(file_py).st_mtime):\n   \n    arcname=fname=file_pyo\n   elif (os.path.isfile(file_pyc)and\n   os.stat(file_pyc).st_mtime >=os.stat(file_py).st_mtime):\n   \n    arcname=fname=file_pyc\n   elif (os.path.isfile(pycache_pyc)and\n   os.stat(pycache_pyc).st_mtime >=os.stat(file_py).st_mtime):\n   \n   \n    fname=pycache_pyc\n    arcname=file_pyc\n   elif (os.path.isfile(pycache_pyo)and\n   os.stat(pycache_pyo).st_mtime >=os.stat(file_py).st_mtime):\n   \n   \n    fname=pycache_pyo\n    arcname=file_pyo\n   else :\n   \n    if _compile(file_py):\n     fname=(pycache_pyc if __debug__ else pycache_pyo)\n     arcname=(file_pyc if __debug__ else file_pyo)\n    else :\n     fname=arcname=file_py\n  else :\n  \n   if self._optimize ==0:\n    fname=pycache_pyc\n    arcname=file_pyc\n   else :\n    fname=pycache_pyo\n    arcname=file_pyo\n   if not (os.path.isfile(fname)and\n   os.stat(fname).st_mtime >=os.stat(file_py).st_mtime):\n    if not _compile(file_py,optimize=self._optimize):\n     fname=arcname=file_py\n  archivename=os.path.split(arcname)[1]\n  if basename:\n   archivename=\"%s/%s\"%(basename,archivename)\n  return (fname,archivename)\n  \n  \ndef main(args=None ):\n import textwrap\n USAGE=textwrap.dedent(\"\"\"\\\n        Usage:\n            zipfile.py -l zipfile.zip        # Show listing of a zipfile\n            zipfile.py -t zipfile.zip        # Test if a zipfile is valid\n            zipfile.py -e zipfile.zip target # Extract zipfile into target dir\n            zipfile.py -c zipfile.zip src ... # Create zipfile from sources\n        \"\"\")\n if args is None :\n  args=sys.argv[1:]\n  \n if not args or args[0]not in ('-l','-c','-e','-t'):\n  print(USAGE)\n  sys.exit(1)\n  \n if args[0]=='-l':\n  if len(args)!=2:\n   print(USAGE)\n   sys.exit(1)\n  with ZipFile(args[1],'r')as zf:\n   zf.printdir()\n   \n elif args[0]=='-t':\n  if len(args)!=2:\n   print(USAGE)\n   sys.exit(1)\n  with ZipFile(args[1],'r')as zf:\n   badfile=zf.testzip()\n  if badfile:\n   print(\"The following enclosed file is corrupted: {!r}\".format(badfile))\n  print(\"Done testing\")\n  \n elif args[0]=='-e':\n  if len(args)!=3:\n   print(USAGE)\n   sys.exit(1)\n   \n  with ZipFile(args[1],'r')as zf:\n   out=args[2]\n   for path in zf.namelist():\n    if path.startswith('./'):\n     tgt=os.path.join(out,path[2:])\n    else :\n     tgt=os.path.join(out,path)\n     \n    tgtdir=os.path.dirname(tgt)\n    if not os.path.exists(tgtdir):\n     os.makedirs(tgtdir)\n    with open(tgt,'wb')as fp:\n     fp.write(zf.read(path))\n     \n elif args[0]=='-c':\n  if len(args)<3:\n   print(USAGE)\n   sys.exit(1)\n   \n  def addToZip(zf,path,zippath):\n   if os.path.isfile(path):\n    zf.write(path,zippath,ZIP_DEFLATED)\n   elif os.path.isdir(path):\n    for nm in os.listdir(path):\n     addToZip(zf,\n     os.path.join(path,nm),os.path.join(zippath,nm))\n     \n     \n  with ZipFile(args[1],'w',allowZip64=True )as zf:\n   for src in args[2:]:\n    addToZip(zf,src,os.path.basename(src))\n    \nif __name__ ==\"__main__\":\n main()\n"], "encodings.cp1255": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1255',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\u20aa'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xd7'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xf7'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\u05b0'\n'\\u05b1'\n'\\u05b2'\n'\\u05b3'\n'\\u05b4'\n'\\u05b5'\n'\\u05b6'\n'\\u05b7'\n'\\u05b8'\n'\\u05b9'\n'\\ufffe'\n'\\u05bb'\n'\\u05bc'\n'\\u05bd'\n'\\u05be'\n'\\u05bf'\n'\\u05c0'\n'\\u05c1'\n'\\u05c2'\n'\\u05c3'\n'\\u05f0'\n'\\u05f1'\n'\\u05f2'\n'\\u05f3'\n'\\u05f4'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\ufffe'\n'\\ufffe'\n'\\u200e'\n'\\u200f'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.iso8859_2": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-2',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u02d8'\n'\\u0141'\n'\\xa4'\n'\\u013d'\n'\\u015a'\n'\\xa7'\n'\\xa8'\n'\\u0160'\n'\\u015e'\n'\\u0164'\n'\\u0179'\n'\\xad'\n'\\u017d'\n'\\u017b'\n'\\xb0'\n'\\u0105'\n'\\u02db'\n'\\u0142'\n'\\xb4'\n'\\u013e'\n'\\u015b'\n'\\u02c7'\n'\\xb8'\n'\\u0161'\n'\\u015f'\n'\\u0165'\n'\\u017a'\n'\\u02dd'\n'\\u017e'\n'\\u017c'\n'\\u0154'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\u0139'\n'\\u0106'\n'\\xc7'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u011a'\n'\\xcd'\n'\\xce'\n'\\u010e'\n'\\u0110'\n'\\u0143'\n'\\u0147'\n'\\xd3'\n'\\xd4'\n'\\u0150'\n'\\xd6'\n'\\xd7'\n'\\u0158'\n'\\u016e'\n'\\xda'\n'\\u0170'\n'\\xdc'\n'\\xdd'\n'\\u0162'\n'\\xdf'\n'\\u0155'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\u013a'\n'\\u0107'\n'\\xe7'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u011b'\n'\\xed'\n'\\xee'\n'\\u010f'\n'\\u0111'\n'\\u0144'\n'\\u0148'\n'\\xf3'\n'\\xf4'\n'\\u0151'\n'\\xf6'\n'\\xf7'\n'\\u0159'\n'\\u016f'\n'\\xfa'\n'\\u0171'\n'\\xfc'\n'\\xfd'\n'\\u0163'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.cp850": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp850',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x00d7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x00c0,\n0x00b8:0x00a9,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x00a2,\n0x00be:0x00a5,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x00e3,\n0x00c7:0x00c3,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x00f0,\n0x00d1:0x00d0,\n0x00d2:0x00ca,\n0x00d3:0x00cb,\n0x00d4:0x00c8,\n0x00d5:0x0131,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x00cf,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x00a6,\n0x00de:0x00cc,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x00d2,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:0x00fe,\n0x00e8:0x00de,\n0x00e9:0x00da,\n0x00ea:0x00db,\n0x00eb:0x00d9,\n0x00ec:0x00fd,\n0x00ed:0x00dd,\n0x00ee:0x00af,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x2017,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\xd7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\xc0'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\xe3'\n'\\xc3'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\xf0'\n'\\xd0'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\u0131'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\xcc'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\xd2'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\xfe'\n'\\xde'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\xfd'\n'\\xdd'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\u2017'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x00bd,\n0x00a3:0x009c,\n0x00a4:0x00cf,\n0x00a5:0x00be,\n0x00a6:0x00dd,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x00b8,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00af:0x00ee,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b4:0x00ef,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b8:0x00f7,\n0x00b9:0x00fb,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00bf:0x00a8,\n0x00c0:0x00b7,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c3:0x00c7,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c8:0x00d4,\n0x00c9:0x0090,\n0x00ca:0x00d2,\n0x00cb:0x00d3,\n0x00cc:0x00de,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00cf:0x00d8,\n0x00d0:0x00d1,\n0x00d1:0x00a5,\n0x00d2:0x00e3,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00d8:0x009d,\n0x00d9:0x00eb,\n0x00da:0x00e9,\n0x00db:0x00ea,\n0x00dc:0x009a,\n0x00dd:0x00ed,\n0x00de:0x00e8,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x00c6,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f0:0x00d0,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00fd:0x00ec,\n0x00fe:0x00e7,\n0x00ff:0x0098,\n0x0131:0x00d5,\n0x0192:0x009f,\n0x2017:0x00f2,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[None ,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[None ]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n  return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n  assert n ==0\n  return year -1,12,31\n  \n  \n  \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n  month -=1\n  preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us):\n\n result=\"%02d:%02d:%02d\"%(hh,mm,ss)\n if us:\n  result +=\".%06d\"%us\n return result\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i <n:\n  ch=format[i]\n  i +=1\n  if ch =='%':\n   if i <n:\n    ch=format[i]\n    i +=1\n    if ch =='f':\n     if freplace is None :\n      freplace='%06d'%getattr(object,\n      'microsecond',0)\n     newformat.append(freplace)\n    elif ch =='z':\n     if zreplace is None :\n      zreplace=\"\"\n      if hasattr(object,\"utcoffset\"):\n       offset=object.utcoffset()\n       if offset is not None :\n        sign='+'\n        if offset.days <0:\n         offset=-offset\n         sign='-'\n        h,m=divmod(offset,timedelta(hours=1))\n        assert not m %timedelta(minutes=1),\"whole minute\"\n        m //=timedelta(minutes=1)\n        zreplace='%c%02d%02d'%(sign,h,m)\n     assert'%'not in zreplace\n     newformat.append(zreplace)\n    elif ch =='Z':\n     if Zreplace is None :\n      Zreplace=\"\"\n      if hasattr(object,\"tzname\"):\n       s=object.tzname()\n       if s is not None :\n       \n        Zreplace=s.replace('%','%%')\n     newformat.append(Zreplace)\n    else :\n     push('%')\n     push(ch)\n   else :\n    push('%')\n  else :\n   push(ch)\n newformat=\"\".join(newformat)\n return _time.strftime(newformat,timetuple)\n \ndef _call_tzinfo_method(tzinfo,methname,tzinfoarg):\n if tzinfo is None :\n  return None\n return getattr(tzinfo,methname)(tzinfoarg)\n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n  raise TypeError(\"tzinfo.tzname() must return None or string, \"\n  \"not '%s'\"%type(name))\n  \n  \n  \n  \n  \n  \n  \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n  return\n if not isinstance(offset,timedelta):\n  raise TypeError(\"tzinfo.%s() must return None \"\n  \"or timedelta, not '%s'\"%(name,type(offset)))\n if offset %timedelta(minutes=1)or offset.microseconds:\n  raise ValueError(\"tzinfo.%s() must return a whole number \"\n  \"of minutes, got %s\"%(name,offset))\n if not -timedelta(1)<offset <timedelta(1):\n  raise ValueError(\"%s()=%s, must be must be strictly between\"\n  \" -timedelta(hours=24) and timedelta(hours=24)\"\n  %(name,offset))\n  \ndef _check_date_fields(year,month,day):\n if not isinstance(year,int):\n  raise TypeError('int expected')\n if not MINYEAR <=year <=MAXYEAR:\n  raise ValueError('year must be in %d..%d'%(MINYEAR,MAXYEAR),year)\n if not 1 <=month <=12:\n  raise ValueError('month must be in 1..12',month)\n dim=_days_in_month(year,month)\n if not 1 <=day <=dim:\n  raise ValueError('day must be in 1..%d'%dim,day)\n  \ndef _check_time_fields(hour,minute,second,microsecond):\n if not isinstance(hour,int):\n  raise TypeError('int expected')\n if not 0 <=hour <=23:\n  raise ValueError('hour must be in 0..23',hour)\n if not 0 <=minute <=59:\n  raise ValueError('minute must be in 0..59',minute)\n if not 0 <=second <=59:\n  raise ValueError('second must be in 0..59',second)\n if not 0 <=microsecond <=999999:\n  raise ValueError('microsecond must be in 0..999999',microsecond)\n  \ndef _check_tzinfo_arg(tz):\n if tz is not None and not isinstance(tz,tzinfo):\n  raise TypeError(\"tzinfo argument must be None or of a tzinfo subclass\")\n  \ndef _cmperror(x,y):\n raise TypeError(\"can't compare '%s' to '%s'\"%(\n type(x).__name__,type(y).__name__))\n \nclass timedelta:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_days','_seconds','_microseconds'\n \n def __new__(cls,days=0,seconds=0,microseconds=0,\n milliseconds=0,minutes=0,hours=0,weeks=0):\n \n \n \n \n \n \n \n \n \n \n \n \n  d=s=us=0\n  \n  \n  days +=weeks *7\n  seconds +=minutes *60+hours *3600\n  microseconds +=milliseconds *1000\n  \n  \n  \n  if isinstance(days,float):\n   dayfrac,days=_math.modf(days)\n   daysecondsfrac,daysecondswhole=_math.modf(dayfrac *(24. *3600.))\n   assert daysecondswhole ==int(daysecondswhole)\n   s=int(daysecondswhole)\n   assert days ==int(days)\n   d=int(days)\n  else :\n   daysecondsfrac=0.0\n   d=days\n  assert isinstance(daysecondsfrac,float)\n  assert abs(daysecondsfrac)<=1.0\n  assert isinstance(d,int)\n  assert abs(s)<=24 *3600\n  \n  \n  if isinstance(seconds,float):\n   secondsfrac,seconds=_math.modf(seconds)\n   assert seconds ==int(seconds)\n   seconds=int(seconds)\n   secondsfrac +=daysecondsfrac\n   assert abs(secondsfrac)<=2.0\n  else :\n   secondsfrac=daysecondsfrac\n   \n  assert isinstance(secondsfrac,float)\n  assert abs(secondsfrac)<=2.0\n  \n  assert isinstance(seconds,int)\n  days,seconds=divmod(seconds,24 *3600)\n  d +=days\n  s +=int(seconds)\n  assert isinstance(s,int)\n  assert abs(s)<=2 *24 *3600\n  \n  \n  usdouble=secondsfrac *1e6\n  assert abs(usdouble)<2.1e6\n  \n  \n  if isinstance(microseconds,float):\n   microseconds +=usdouble\n   microseconds=round(microseconds,0)\n   seconds,microseconds=divmod(microseconds,1e6)\n   assert microseconds ==int(microseconds)\n   assert seconds ==int(seconds)\n   days,seconds=divmod(seconds,24. *3600.)\n   assert days ==int(days)\n   assert seconds ==int(seconds)\n   d +=int(days)\n   s +=int(seconds)\n   assert isinstance(s,int)\n   assert abs(s)<=3 *24 *3600\n  else :\n   seconds,microseconds=divmod(microseconds,1000000)\n   days,seconds=divmod(seconds,24 *3600)\n   d +=days\n   s +=int(seconds)\n   assert isinstance(s,int)\n   assert abs(s)<=3 *24 *3600\n   microseconds=float(microseconds)\n   microseconds +=usdouble\n   microseconds=round(microseconds,0)\n  assert abs(s)<=3 *24 *3600\n  assert abs(microseconds)<3.1e6\n  \n  \n  assert isinstance(microseconds,float)\n  assert int(microseconds)==microseconds\n  us=int(microseconds)\n  seconds,us=divmod(us,1000000)\n  s +=seconds\n  assert isinstance(s,int)\n  days,s=divmod(s,24 *3600)\n  d +=days\n  \n  assert isinstance(d,int)\n  assert isinstance(s,int)and 0 <=s <24 *3600\n  assert isinstance(us,int)and 0 <=us <1000000\n  \n  self=object.__new__(cls)\n  \n  self._days=d\n  self._seconds=s\n  self._microseconds=us\n  if abs(d)>999999999:\n   raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n   \n  return self\n  \n def __repr__(self):\n  if self._microseconds:\n   return\"%s(%d, %d, %d)\"%('datetime.'+self.__class__.__name__,\n   self._days,\n   self._seconds,\n   self._microseconds)\n  if self._seconds:\n   return\"%s(%d, %d)\"%('datetime.'+self.__class__.__name__,\n   self._days,\n   self._seconds)\n  return\"%s(%d)\"%('datetime.'+self.__class__.__name__,self._days)\n  \n def __str__(self):\n  mm,ss=divmod(self._seconds,60)\n  hh,mm=divmod(mm,60)\n  s=\"%d:%02d:%02d\"%(hh,mm,ss)\n  if self._days:\n   def plural(n):\n    return n,abs(n)!=1 and\"s\"or\"\"\n   s=(\"%d day%s, \"%plural(self._days))+s\n  if self._microseconds:\n   s=s+\".%06d\"%self._microseconds\n  return s\n  \n def total_seconds(self):\n  ''\n  return ((self.days *86400+self.seconds)*10 **6+\n  self.microseconds)/10 **6\n  \n  \n @property\n def days(self):\n  ''\n  return self._days\n  \n @property\n def seconds(self):\n  ''\n  return self._seconds\n  \n @property\n def microseconds(self):\n  ''\n  return self._microseconds\n  \n def __add__(self,other):\n  if isinstance(other,timedelta):\n  \n  \n   return timedelta(self._days+other._days,\n   self._seconds+other._seconds,\n   self._microseconds+other._microseconds)\n  return NotImplemented\n  \n __radd__=__add__\n \n def __sub__(self,other):\n  if isinstance(other,timedelta):\n  \n  \n   return timedelta(self._days -other._days,\n   self._seconds -other._seconds,\n   self._microseconds -other._microseconds)\n  return NotImplemented\n  \n def __rsub__(self,other):\n  if isinstance(other,timedelta):\n   return -self+other\n  return NotImplemented\n  \n def __neg__(self):\n \n \n  return timedelta(-self._days,\n  -self._seconds,\n  -self._microseconds)\n  \n def __pos__(self):\n  return self\n  \n def __abs__(self):\n  if self._days <0:\n   return -self\n  else :\n   return self\n   \n def __mul__(self,other):\n  if isinstance(other,int):\n  \n  \n   return timedelta(self._days *other,\n   self._seconds *other,\n   self._microseconds *other)\n  if isinstance(other,float):\n   a,b=other.as_integer_ratio()\n   return self *a /b\n  return NotImplemented\n  \n __rmul__=__mul__\n \n def _to_microseconds(self):\n  return ((self._days *(24 *3600)+self._seconds)*1000000+\n  self._microseconds)\n  \n def __floordiv__(self,other):\n  if not isinstance(other,(int,timedelta)):\n   return NotImplemented\n  usec=self._to_microseconds()\n  if isinstance(other,timedelta):\n   return usec //other._to_microseconds()\n  if isinstance(other,int):\n   return timedelta(0,0,usec //other)\n   \n def __truediv__(self,other):\n  if not isinstance(other,(int,float,timedelta)):\n   return NotImplemented\n  usec=self._to_microseconds()\n  if isinstance(other,timedelta):\n   return usec /other._to_microseconds()\n  if isinstance(other,int):\n   return timedelta(0,0,usec /other)\n  if isinstance(other,float):\n   a,b=other.as_integer_ratio()\n   return timedelta(0,0,b *usec /a)\n   \n def __mod__(self,other):\n  if isinstance(other,timedelta):\n   r=self._to_microseconds()%other._to_microseconds()\n   return timedelta(0,0,r)\n  return NotImplemented\n  \n def __divmod__(self,other):\n  if isinstance(other,timedelta):\n   q,r=divmod(self._to_microseconds(),\n   other._to_microseconds())\n   return q,timedelta(0,0,r)\n  return NotImplemented\n  \n  \n  \n def __eq__(self,other):\n  if isinstance(other,timedelta):\n   return self._cmp(other)==0\n  else :\n   return False\n   \n def __ne__(self,other):\n  if isinstance(other,timedelta):\n   return self._cmp(other)!=0\n  else :\n   return True\n   \n def __le__(self,other):\n  if isinstance(other,timedelta):\n   return self._cmp(other)<=0\n  else :\n   _cmperror(self,other)\n   \n def __lt__(self,other):\n  if isinstance(other,timedelta):\n   return self._cmp(other)<0\n  else :\n   _cmperror(self,other)\n   \n def __ge__(self,other):\n  if isinstance(other,timedelta):\n   return self._cmp(other)>=0\n  else :\n   _cmperror(self,other)\n   \n def __gt__(self,other):\n  if isinstance(other,timedelta):\n   return self._cmp(other)>0\n  else :\n   _cmperror(self,other)\n   \n def _cmp(self,other):\n  assert isinstance(other,timedelta)\n  return _cmp(self._getstate(),other._getstate())\n  \n def __hash__(self):\n  return hash(self._getstate())\n  \n def __bool__(self):\n  return (self._days !=0 or\n  self._seconds !=0 or\n  self._microseconds !=0)\n  \n  \n  \n def _getstate(self):\n  return (self._days,self._seconds,self._microseconds)\n  \n def __reduce__(self):\n  return (self.__class__,self._getstate())\n  \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day'\n \n def __new__(cls,year,month=None ,day=None ):\n  ''\n\n\n\n\n  \n  if (isinstance(year,bytes)and len(year)==4 and\n  1 <=year[2]<=12 and month is None ):\n  \n   self=object.__new__(cls)\n   self.__setstate(year)\n   return self\n  _check_date_fields(year,month,day)\n  self=object.__new__(cls)\n  self._year=year\n  self._month=month\n  self._day=day\n  return self\n  \n  \n  \n @classmethod\n def fromtimestamp(cls,t):\n  ''\n  y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n  return cls(y,m,d)\n  \n @classmethod\n def today(cls):\n  ''\n  t=_time.time()\n  return cls.fromtimestamp(t)\n  \n @classmethod\n def fromordinal(cls,n):\n  ''\n\n\n\n  \n  y,m,d=_ord2ymd(n)\n  return cls(y,m,d)\n  \n  \n  \n def __repr__(self):\n  ''\n\n\n\n\n\n\n\n\n  \n  return\"%s(%d, %d, %d)\"%('datetime.'+self.__class__.__name__,\n  self._year,\n  self._month,\n  self._day)\n  \n  \n  \n  \n  \n  \n def ctime(self):\n  ''\n  weekday=self.toordinal()%7 or 7\n  return\"%s %s %2d 00:00:00 %04d\"%(\n  _DAYNAMES[weekday],\n  _MONTHNAMES[self._month],\n  self._day,self._year)\n  \n def strftime(self,fmt):\n  ''\n  return _wrap_strftime(self,fmt,self.timetuple())\n  \n def __format__(self,fmt):\n  if len(fmt)!=0:\n   return self.strftime(fmt)\n  return str(self)\n  \n def isoformat(self):\n  ''\n\n\n\n\n\n\n  \n  return\"%04d-%02d-%02d\"%(self._year,self._month,self._day)\n  \n __str__=isoformat\n \n \n @property\n def year(self):\n  ''\n  return self._year\n  \n @property\n def month(self):\n  ''\n  return self._month\n  \n @property\n def day(self):\n  ''\n  return self._day\n  \n  \n  \n def timetuple(self):\n  ''\n  return _build_struct_time(self._year,self._month,self._day,\n  0,0,0,-1)\n  \n def toordinal(self):\n  ''\n\n\n\n  \n  return _ymd2ord(self._year,self._month,self._day)\n  \n def replace(self,year=None ,month=None ,day=None ):\n  ''\n  if year is None :\n   year=self._year\n  if month is None :\n   month=self._month\n  if day is None :\n   day=self._day\n  _check_date_fields(year,month,day)\n  return date(year,month,day)\n  \n  \n  \n def __eq__(self,other):\n  if isinstance(other,date):\n   return self._cmp(other)==0\n  return NotImplemented\n  \n def __ne__(self,other):\n  if isinstance(other,date):\n   return self._cmp(other)!=0\n  return NotImplemented\n  \n def __le__(self,other):\n  if isinstance(other,date):\n   return self._cmp(other)<=0\n  return NotImplemented\n  \n def __lt__(self,other):\n  if isinstance(other,date):\n   return self._cmp(other)<0\n  return NotImplemented\n  \n def __ge__(self,other):\n  if isinstance(other,date):\n   return self._cmp(other)>=0\n  return NotImplemented\n  \n def __gt__(self,other):\n  if isinstance(other,date):\n   return self._cmp(other)>0\n  return NotImplemented\n  \n def _cmp(self,other):\n  assert isinstance(other,date)\n  y,m,d=self._year,self._month,self._day\n  y2,m2,d2=other._year,other._month,other._day\n  return _cmp((y,m,d),(y2,m2,d2))\n  \n def __hash__(self):\n  ''\n  return hash(self._getstate())\n  \n  \n  \n def __add__(self,other):\n  ''\n  if isinstance(other,timedelta):\n   o=self.toordinal()+other.days\n   if 0 <o <=_MAXORDINAL:\n    return date.fromordinal(o)\n   raise OverflowError(\"result out of range\")\n  return NotImplemented\n  \n __radd__=__add__\n \n def __sub__(self,other):\n  ''\n  if isinstance(other,timedelta):\n   return self+timedelta(-other.days)\n  if isinstance(other,date):\n   days1=self.toordinal()\n   days2=other.toordinal()\n   return timedelta(days1 -days2)\n  return NotImplemented\n  \n def weekday(self):\n  ''\n  return (self.toordinal()+6)%7\n  \n  \n  \n def isoweekday(self):\n  ''\n  \n  return self.toordinal()%7 or 7\n  \n def isocalendar(self):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  year=self._year\n  week1monday=_isoweek1monday(year)\n  today=_ymd2ord(self._year,self._month,self._day)\n  \n  week,day=divmod(today -week1monday,7)\n  if week <0:\n   year -=1\n   week1monday=_isoweek1monday(year)\n   week,day=divmod(today -week1monday,7)\n  elif week >=52:\n   if today >=_isoweek1monday(year+1):\n    year +=1\n    week=0\n  return year,week+1,day+1\n  \n  \n  \n def _getstate(self):\n  yhi,ylo=divmod(self._year,256)\n  return bytes([yhi,ylo,self._month,self._day]),\n  \n def __setstate(self,string):\n  if len(string)!=4 or not (1 <=string[2]<=12):\n   raise TypeError(\"not enough arguments\")\n  yhi,ylo,self._month,self._day=string\n  self._year=yhi *256+ylo\n  \n def __reduce__(self):\n  return (self.__class__,self._getstate())\n  \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n def tzname(self,dt):\n  ''\n  raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n  \n def utcoffset(self,dt):\n  ''\n  raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n  \n def dst(self,dt):\n  ''\n\n\n\n  \n  raise NotImplementedError(\"tzinfo subclass must override dst()\")\n  \n def fromutc(self,dt):\n  ''\n  \n  if not isinstance(dt,datetime):\n   raise TypeError(\"fromutc() requires a datetime argument\")\n  if dt.tzinfo is not self:\n   raise ValueError(\"dt.tzinfo is not self\")\n   \n  dtoff=dt.utcoffset()\n  if dtoff is None :\n   raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n   \"result\")\n   \n   \n   \n  dtdst=dt.dst()\n  if dtdst is None :\n   raise ValueError(\"fromutc() requires a non-None dst() result\")\n  delta=dtoff -dtdst\n  if delta:\n   dt +=delta\n   dtdst=dt.dst()\n   if dtdst is None :\n    raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n    \"results; cannot convert\")\n  return dt+dtdst\n  \n  \n  \n def __reduce__(self):\n  getinitargs=getattr(self,\"__getinitargs__\",None )\n  if getinitargs:\n   args=getinitargs()\n  else :\n   args=()\n  getstate=getattr(self,\"__getstate__\",None )\n  if getstate:\n   state=getstate()\n  else :\n   state=getattr(self,\"__dict__\",None )or None\n  if state is None :\n   return (self.__class__,args)\n  else :\n   return (self.__class__,args,state)\n   \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ):\n  ''\n\n\n\n\n\n\n  \n  self=object.__new__(cls)\n  if isinstance(hour,bytes)and len(hour)==6:\n  \n   self.__setstate(hour,minute or None )\n   return self\n  _check_tzinfo_arg(tzinfo)\n  _check_time_fields(hour,minute,second,microsecond)\n  self._hour=hour\n  self._minute=minute\n  self._second=second\n  self._microsecond=microsecond\n  self._tzinfo=tzinfo\n  return self\n  \n  \n @property\n def hour(self):\n  ''\n  return self._hour\n  \n @property\n def minute(self):\n  ''\n  return self._minute\n  \n @property\n def second(self):\n  ''\n  return self._second\n  \n @property\n def microsecond(self):\n  ''\n  return self._microsecond\n  \n @property\n def tzinfo(self):\n  ''\n  return self._tzinfo\n  \n  \n  \n  \n  \n def __eq__(self,other):\n  if isinstance(other,time):\n   return self._cmp(other,allow_mixed=True )==0\n  else :\n   return False\n   \n def __ne__(self,other):\n  if isinstance(other,time):\n   return self._cmp(other,allow_mixed=True )!=0\n  else :\n   return True\n   \n def __le__(self,other):\n  if isinstance(other,time):\n   return self._cmp(other)<=0\n  else :\n   _cmperror(self,other)\n   \n def __lt__(self,other):\n  if isinstance(other,time):\n   return self._cmp(other)<0\n  else :\n   _cmperror(self,other)\n   \n def __ge__(self,other):\n  if isinstance(other,time):\n   return self._cmp(other)>=0\n  else :\n   _cmperror(self,other)\n   \n def __gt__(self,other):\n  if isinstance(other,time):\n   return self._cmp(other)>0\n  else :\n   _cmperror(self,other)\n   \n def _cmp(self,other,allow_mixed=False ):\n  assert isinstance(other,time)\n  mytz=self._tzinfo\n  ottz=other._tzinfo\n  myoff=otoff=None\n  \n  if mytz is ottz:\n   base_compare=True\n  else :\n   myoff=self.utcoffset()\n   otoff=other.utcoffset()\n   base_compare=myoff ==otoff\n   \n  if base_compare:\n   return _cmp((self._hour,self._minute,self._second,\n   self._microsecond),\n   (other._hour,other._minute,other._second,\n   other._microsecond))\n  if myoff is None or otoff is None :\n   if allow_mixed:\n    return 2\n   else :\n    raise TypeError(\"cannot compare naive and aware times\")\n  myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n  othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n  return _cmp((myhhmm,self._second,self._microsecond),\n  (othhmm,other._second,other._microsecond))\n  \n def __hash__(self):\n  ''\n  tzoff=self.utcoffset()\n  if not tzoff:\n   return hash(self._getstate()[0])\n  h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n  timedelta(hours=1))\n  assert not m %timedelta(minutes=1),\"whole minute\"\n  m //=timedelta(minutes=1)\n  if 0 <=h <24:\n   return hash(time(h,m,self.second,self.microsecond))\n  return hash((h,m,self.second,self.microsecond))\n  \n  \n  \n def _tzstr(self,sep=\":\"):\n  ''\n  off=self.utcoffset()\n  if off is not None :\n   if off.days <0:\n    sign=\"-\"\n    off=-off\n   else :\n    sign=\"+\"\n   hh,mm=divmod(off,timedelta(hours=1))\n   assert not mm %timedelta(minutes=1),\"whole minute\"\n   mm //=timedelta(minutes=1)\n   assert 0 <=hh <24\n   off=\"%s%02d%s%02d\"%(sign,hh,sep,mm)\n  return off\n  \n def __repr__(self):\n  ''\n  if self._microsecond !=0:\n   s=\", %d, %d\"%(self._second,self._microsecond)\n  elif self._second !=0:\n   s=\", %d\"%self._second\n  else :\n   s=\"\"\n  s=\"%s(%d, %d%s)\"%('datetime.'+self.__class__.__name__,\n  self._hour,self._minute,s)\n  if self._tzinfo is not None :\n   assert s[-1:]==\")\"\n   s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n  return s\n  \n def isoformat(self):\n  ''\n\n\n\n  \n  s=_format_time(self._hour,self._minute,self._second,\n  self._microsecond)\n  tz=self._tzstr()\n  if tz:\n   s +=tz\n  return s\n  \n __str__=isoformat\n \n def strftime(self,fmt):\n  ''\n\n  \n  \n  \n  timetuple=(1900,1,1,\n  self._hour,self._minute,self._second,\n  0,1,-1)\n  return _wrap_strftime(self,fmt,timetuple)\n  \n def __format__(self,fmt):\n  if len(fmt)!=0:\n   return self.strftime(fmt)\n  return str(self)\n  \n  \n  \n def utcoffset(self):\n  ''\n  \n  if self._tzinfo is None :\n   return None\n  offset=self._tzinfo.utcoffset(None )\n  _check_utc_offset(\"utcoffset\",offset)\n  return offset\n  \n def tzname(self):\n  ''\n\n\n\n\n  \n  if self._tzinfo is None :\n   return None\n  name=self._tzinfo.tzname(None )\n  _check_tzname(name)\n  return name\n  \n def dst(self):\n  ''\n\n\n\n\n\n\n  \n  if self._tzinfo is None :\n   return None\n  offset=self._tzinfo.dst(None )\n  _check_utc_offset(\"dst\",offset)\n  return offset\n  \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ):\n  ''\n  if hour is None :\n   hour=self.hour\n  if minute is None :\n   minute=self.minute\n  if second is None :\n   second=self.second\n  if microsecond is None :\n   microsecond=self.microsecond\n  if tzinfo is True :\n   tzinfo=self.tzinfo\n  _check_time_fields(hour,minute,second,microsecond)\n  _check_tzinfo_arg(tzinfo)\n  return time(hour,minute,second,microsecond,tzinfo)\n  \n def __bool__(self):\n  if self.second or self.microsecond:\n   return True\n  offset=self.utcoffset()or timedelta(0)\n  return timedelta(hours=self.hour,minutes=self.minute)!=offset\n  \n  \n  \n def _getstate(self):\n  us2,us3=divmod(self._microsecond,256)\n  us1,us2=divmod(us2,256)\n  basestate=bytes([self._hour,self._minute,self._second,\n  us1,us2,us3])\n  if self._tzinfo is None :\n   return (basestate,)\n  else :\n   return (basestate,self._tzinfo)\n   \n def __setstate(self,string,tzinfo):\n  if len(string)!=6 or string[0]>=24:\n   raise TypeError(\"an integer is required\")\n  (self._hour,self._minute,self._second,\n  us1,us2,us3)=string\n  self._microsecond=(((us1 <<8)|us2)<<8)|us3\n  if tzinfo is None or isinstance(tzinfo,_tzinfo_class):\n   self._tzinfo=tzinfo\n  else :\n   raise TypeError(\"bad tzinfo state arg %r\"%tzinfo)\n   \n def __reduce__(self):\n  return (time,self._getstate())\n  \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n \n __slots__=date.__slots__+(\n '_hour','_minute','_second',\n '_microsecond','_tzinfo')\n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ):\n  if isinstance(year,bytes)and len(year)==10:\n  \n   self=date.__new__(cls,year[:4])\n   self.__setstate(year,month)\n   return self\n  _check_tzinfo_arg(tzinfo)\n  _check_time_fields(hour,minute,second,microsecond)\n  self=date.__new__(cls,year,month,day)\n  self._hour=hour\n  self._minute=minute\n  self._second=second\n  self._microsecond=microsecond\n  self._tzinfo=tzinfo\n  return self\n  \n  \n @property\n def hour(self):\n  ''\n  return self._hour\n  \n @property\n def minute(self):\n  ''\n  return self._minute\n  \n @property\n def second(self):\n  ''\n  return self._second\n  \n @property\n def microsecond(self):\n  ''\n  return self._microsecond\n  \n @property\n def tzinfo(self):\n  ''\n  return self._tzinfo\n  \n @classmethod\n def fromtimestamp(cls,t,tz=None ):\n  ''\n\n\n  \n  \n  _check_tzinfo_arg(tz)\n  \n  converter=_time.localtime if tz is None else _time.gmtime\n  \n  t,frac=divmod(t,1.0)\n  us=int(frac *1e6)\n  \n  \n  \n  \n  \n  if us ==1000000:\n   t +=1\n   us=0\n  y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n  ss=min(ss,59)\n  result=cls(y,m,d,hh,mm,ss,us,tz)\n  if tz is not None :\n   result=tz.fromutc(result)\n  return result\n  \n @classmethod\n def utcfromtimestamp(cls,t):\n  ''\n  t,frac=divmod(t,1.0)\n  us=int(frac *1e6)\n  \n  \n  \n  \n  \n  if us ==1000000:\n   t +=1\n   us=0\n  y,m,d,hh,mm,ss,weekday,jday,dst=_time.gmtime(t)\n  ss=min(ss,59)\n  return cls(y,m,d,hh,mm,ss,us)\n  \n  \n  \n  \n  \n  \n @classmethod\n def now(cls,tz=None ):\n  ''\n  t=_time.time()\n  return cls.fromtimestamp(t,tz)\n  \n @classmethod\n def utcnow(cls):\n  ''\n  t=_time.time()\n  return cls.utcfromtimestamp(t)\n  \n @classmethod\n def combine(cls,date,time):\n  ''\n  if not isinstance(date,_date_class):\n   raise TypeError(\"date argument must be a date instance\")\n  if not isinstance(time,_time_class):\n   raise TypeError(\"time argument must be a time instance\")\n  return cls(date.year,date.month,date.day,\n  time.hour,time.minute,time.second,time.microsecond,\n  time.tzinfo)\n  \n def timetuple(self):\n  ''\n  dst=self.dst()\n  if dst is None :\n   dst=-1\n  elif dst:\n   dst=1\n  else :\n   dst=0\n  return _build_struct_time(self.year,self.month,self.day,\n  self.hour,self.minute,self.second,\n  dst)\n  \n def timestamp(self):\n  ''\n  if self._tzinfo is None :\n   return _time.mktime((self.year,self.month,self.day,\n   self.hour,self.minute,self.second,\n   -1,-1,-1))+self.microsecond /1e6\n  else :\n   return (self -_EPOCH).total_seconds()\n   \n def utctimetuple(self):\n  ''\n  offset=self.utcoffset()\n  if offset:\n   self -=offset\n  y,m,d=self.year,self.month,self.day\n  hh,mm,ss=self.hour,self.minute,self.second\n  return _build_struct_time(y,m,d,hh,mm,ss,0)\n  \n def date(self):\n  ''\n  return date(self._year,self._month,self._day)\n  \n def time(self):\n  ''\n  return time(self.hour,self.minute,self.second,self.microsecond)\n  \n def timetz(self):\n  ''\n  return time(self.hour,self.minute,self.second,self.microsecond,\n  self._tzinfo)\n  \n def replace(self,year=None ,month=None ,day=None ,hour=None ,\n minute=None ,second=None ,microsecond=None ,tzinfo=True ):\n  ''\n  if year is None :\n   year=self.year\n  if month is None :\n   month=self.month\n  if day is None :\n   day=self.day\n  if hour is None :\n   hour=self.hour\n  if minute is None :\n   minute=self.minute\n  if second is None :\n   second=self.second\n  if microsecond is None :\n   microsecond=self.microsecond\n  if tzinfo is True :\n   tzinfo=self.tzinfo\n  _check_date_fields(year,month,day)\n  _check_time_fields(hour,minute,second,microsecond)\n  _check_tzinfo_arg(tzinfo)\n  return datetime(year,month,day,hour,minute,second,\n  microsecond,tzinfo)\n  \n def astimezone(self,tz=None ):\n  if tz is None :\n   if self.tzinfo is None :\n    raise ValueError(\"astimezone() requires an aware datetime\")\n   ts=(self -_EPOCH)//timedelta(seconds=1)\n   localtm=_time.localtime(ts)\n   local=datetime(*localtm[:6])\n   try :\n   \n    gmtoff=localtm.tm_gmtoff\n    zone=localtm.tm_zone\n   except AttributeError:\n   \n   \n   \n    delta=local -datetime(*_time.gmtime(ts)[:6])\n    dst=_time.daylight and localtm.tm_isdst >0\n    gmtoff=-(_time.altzone if dst else _time.timezone)\n    if delta ==timedelta(seconds=gmtoff):\n     tz=timezone(delta,_time.tzname[dst])\n    else :\n     tz=timezone(delta)\n   else :\n    tz=timezone(timedelta(seconds=gmtoff),zone)\n    \n  elif not isinstance(tz,tzinfo):\n   raise TypeError(\"tz argument must be an instance of tzinfo\")\n   \n  mytz=self.tzinfo\n  if mytz is None :\n   raise ValueError(\"astimezone() requires an aware datetime\")\n   \n  if tz is mytz:\n   return self\n   \n   \n  myoffset=self.utcoffset()\n  if myoffset is None :\n   raise ValueError(\"astimezone() requires an aware datetime\")\n  utc=(self -myoffset).replace(tzinfo=tz)\n  \n  \n  return tz.fromutc(utc)\n  \n  \n  \n def ctime(self):\n  ''\n  weekday=self.toordinal()%7 or 7\n  return\"%s %s %2d %02d:%02d:%02d %04d\"%(\n  _DAYNAMES[weekday],\n  _MONTHNAMES[self._month],\n  self._day,\n  self._hour,self._minute,self._second,\n  self._year)\n  \n def isoformat(self,sep='T'):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  s=(\"%04d-%02d-%02d%c\"%(self._year,self._month,self._day,\n  sep)+\n  _format_time(self._hour,self._minute,self._second,\n  self._microsecond))\n  off=self.utcoffset()\n  if off is not None :\n   if off.days <0:\n    sign=\"-\"\n    off=-off\n   else :\n    sign=\"+\"\n   hh,mm=divmod(off,timedelta(hours=1))\n   assert not mm %timedelta(minutes=1),\"whole minute\"\n   mm //=timedelta(minutes=1)\n   s +=\"%s%02d:%02d\"%(sign,hh,mm)\n  return s\n  \n def __repr__(self):\n  ''\n  L=[self._year,self._month,self._day,\n  self._hour,self._minute,self._second,self._microsecond]\n  if L[-1]==0:\n   del L[-1]\n  if L[-1]==0:\n   del L[-1]\n  s=\", \".join(map(str,L))\n  s=\"%s(%s)\"%('datetime.'+self.__class__.__name__,s)\n  if self._tzinfo is not None :\n   assert s[-1:]==\")\"\n   s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n  return s\n  \n def __str__(self):\n  ''\n  return self.isoformat(sep=' ')\n  \n @classmethod\n def strptime(cls,date_string,format):\n  ''\n  import _strptime\n  return _strptime._strptime_datetime(cls,date_string,format)\n  \n def utcoffset(self):\n  ''\n  \n  if self._tzinfo is None :\n   return None\n  offset=self._tzinfo.utcoffset(self)\n  _check_utc_offset(\"utcoffset\",offset)\n  return offset\n  \n def tzname(self):\n  ''\n\n\n\n\n  \n  name=_call_tzinfo_method(self._tzinfo,\"tzname\",self)\n  _check_tzname(name)\n  return name\n  \n def dst(self):\n  ''\n\n\n\n\n\n\n  \n  if self._tzinfo is None :\n   return None\n  offset=self._tzinfo.dst(self)\n  _check_utc_offset(\"dst\",offset)\n  return offset\n  \n  \n  \n def __eq__(self,other):\n  if isinstance(other,datetime):\n   return self._cmp(other,allow_mixed=True )==0\n  elif not isinstance(other,date):\n   return NotImplemented\n  else :\n   return False\n   \n def __ne__(self,other):\n  if isinstance(other,datetime):\n   return self._cmp(other,allow_mixed=True )!=0\n  elif not isinstance(other,date):\n   return NotImplemented\n  else :\n   return True\n   \n def __le__(self,other):\n  if isinstance(other,datetime):\n   return self._cmp(other)<=0\n  elif not isinstance(other,date):\n   return NotImplemented\n  else :\n   _cmperror(self,other)\n   \n def __lt__(self,other):\n  if isinstance(other,datetime):\n   return self._cmp(other)<0\n  elif not isinstance(other,date):\n   return NotImplemented\n  else :\n   _cmperror(self,other)\n   \n def __ge__(self,other):\n  if isinstance(other,datetime):\n   return self._cmp(other)>=0\n  elif not isinstance(other,date):\n   return NotImplemented\n  else :\n   _cmperror(self,other)\n   \n def __gt__(self,other):\n  if isinstance(other,datetime):\n   return self._cmp(other)>0\n  elif not isinstance(other,date):\n   return NotImplemented\n  else :\n   _cmperror(self,other)\n   \n def _cmp(self,other,allow_mixed=False ):\n  assert isinstance(other,datetime)\n  mytz=self._tzinfo\n  ottz=other._tzinfo\n  myoff=otoff=None\n  \n  if mytz is ottz:\n   base_compare=True\n  else :\n   myoff=self.utcoffset()\n   otoff=other.utcoffset()\n   base_compare=myoff ==otoff\n   \n  if base_compare:\n   return _cmp((self._year,self._month,self._day,\n   self._hour,self._minute,self._second,\n   self._microsecond),\n   (other._year,other._month,other._day,\n   other._hour,other._minute,other._second,\n   other._microsecond))\n  if myoff is None or otoff is None :\n   if allow_mixed:\n    return 2\n   else :\n    raise TypeError(\"cannot compare naive and aware datetimes\")\n    \n  diff=self -other\n  if diff.days <0:\n   return -1\n  return diff and 1 or 0\n  \n def __add__(self,other):\n  ''\n  if not isinstance(other,timedelta):\n   return NotImplemented\n  delta=timedelta(self.toordinal(),\n  hours=self._hour,\n  minutes=self._minute,\n  seconds=self._second,\n  microseconds=self._microsecond)\n  delta +=other\n  hour,rem=divmod(delta.seconds,3600)\n  minute,second=divmod(rem,60)\n  if 0 <delta.days <=_MAXORDINAL:\n   return datetime.combine(date.fromordinal(delta.days),\n   time(hour,minute,second,\n   delta.microseconds,\n   tzinfo=self._tzinfo))\n  raise OverflowError(\"result out of range\")\n  \n __radd__=__add__\n \n def __sub__(self,other):\n  ''\n  if not isinstance(other,datetime):\n   if isinstance(other,timedelta):\n    return self+-other\n   return NotImplemented\n   \n  days1=self.toordinal()\n  days2=other.toordinal()\n  secs1=self._second+self._minute *60+self._hour *3600\n  secs2=other._second+other._minute *60+other._hour *3600\n  base=timedelta(days1 -days2,\n  secs1 -secs2,\n  self._microsecond -other._microsecond)\n  if self._tzinfo is other._tzinfo:\n   return base\n  myoff=self.utcoffset()\n  otoff=other.utcoffset()\n  if myoff ==otoff:\n   return base\n  if myoff is None or otoff is None :\n   raise TypeError(\"cannot mix naive and timezone-aware time\")\n  return base+otoff -myoff\n  \n def __hash__(self):\n  tzoff=self.utcoffset()\n  if tzoff is None :\n   return hash(self._getstate()[0])\n  days=_ymd2ord(self.year,self.month,self.day)\n  seconds=self.hour *3600+self.minute *60+self.second\n  return hash(timedelta(days,seconds,self.microsecond)-tzoff)\n  \n  \n  \n def _getstate(self):\n  yhi,ylo=divmod(self._year,256)\n  us2,us3=divmod(self._microsecond,256)\n  us1,us2=divmod(us2,256)\n  basestate=bytes([yhi,ylo,self._month,self._day,\n  self._hour,self._minute,self._second,\n  us1,us2,us3])\n  if self._tzinfo is None :\n   return (basestate,)\n  else :\n   return (basestate,self._tzinfo)\n   \n def __setstate(self,string,tzinfo):\n  (yhi,ylo,self._month,self._day,self._hour,\n  self._minute,self._second,us1,us2,us3)=string\n  self._year=yhi *256+ylo\n  self._microsecond=(((us1 <<8)|us2)<<8)|us3\n  if tzinfo is None or isinstance(tzinfo,_tzinfo_class):\n   self._tzinfo=tzinfo\n  else :\n   raise TypeError(\"bad tzinfo state arg %r\"%tzinfo)\n   \n def __reduce__(self):\n  return (self.__class__,self._getstate())\n  \n  \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n  week1monday +=7\n return week1monday\n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n  if not isinstance(offset,timedelta):\n   raise TypeError(\"offset must be a timedelta\")\n  if name is cls._Omitted:\n   if not offset:\n    return cls.utc\n   name=None\n  elif not isinstance(name,str):\n   raise TypeError(\"name must be a string\")\n  if not cls._minoffset <=offset <=cls._maxoffset:\n   raise ValueError(\"offset must be a timedelta\"\n   \" strictly between -timedelta(hours=24) and\"\n   \" timedelta(hours=24).\")\n  if (offset.microseconds !=0 or\n  offset.seconds %60 !=0):\n   raise ValueError(\"offset must be a timedelta\"\n   \" representing a whole number of minutes\")\n  return cls._create(offset,name)\n  \n @classmethod\n def _create(cls,offset,name=None ):\n  self=tzinfo.__new__(cls)\n  self._offset=offset\n  self._name=name\n  return self\n  \n def __getinitargs__(self):\n  ''\n  if self._name is None :\n   return (self._offset,)\n  return (self._offset,self._name)\n  \n def __eq__(self,other):\n  if type(other)!=timezone:\n   return False\n  return self._offset ==other._offset\n  \n def __hash__(self):\n  return hash(self._offset)\n  \n def __repr__(self):\n  ''\n\n\n\n\n\n\n\n  \n  if self is self.utc:\n   return'datetime.timezone.utc'\n  if self._name is None :\n   return\"%s(%r)\"%('datetime.'+self.__class__.__name__,\n   self._offset)\n  return\"%s(%r, %r)\"%('datetime.'+self.__class__.__name__,\n  self._offset,self._name)\n  \n def __str__(self):\n  return self.tzname(None )\n  \n def utcoffset(self,dt):\n  if isinstance(dt,datetime)or dt is None :\n   return self._offset\n  raise TypeError(\"utcoffset() argument must be a datetime instance\"\n  \" or None\")\n  \n def tzname(self,dt):\n  if isinstance(dt,datetime)or dt is None :\n   if self._name is None :\n    return self._name_from_offset(self._offset)\n   return self._name\n  raise TypeError(\"tzname() argument must be a datetime instance\"\n  \" or None\")\n  \n def dst(self,dt):\n  if isinstance(dt,datetime)or dt is None :\n   return None\n  raise TypeError(\"dst() argument must be a datetime instance\"\n  \" or None\")\n  \n def fromutc(self,dt):\n  if isinstance(dt,datetime):\n   if dt.tzinfo is not self:\n    raise ValueError(\"fromutc: dt.tzinfo \"\n    \"is not self\")\n   return dt+self._offset\n  raise TypeError(\"fromutc() argument must be a datetime instance\"\n  \" or None\")\n  \n _maxoffset=timedelta(hours=23,minutes=59)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n  if delta <timedelta(0):\n   sign='-'\n   delta=-delta\n  else :\n   sign='+'\n  hours,rest=divmod(delta,timedelta(hours=1))\n  minutes=rest //timedelta(minutes=1)\n  return'UTC{}{:02d}:{:02d}'.format(sign,hours,minutes)\n  \ntimezone.utc=timezone._create(timedelta(0))\ntimezone.min=timezone._create(timezone._minoffset)\ntimezone.max=timezone._create(timezone._maxoffset)\n_EPOCH=datetime(1970,1,1,tzinfo=timezone.utc)\n''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"], "glob": [".py", "''\n\nimport os\nimport re\nimport fnmatch\n\n__all__=[\"glob\",\"iglob\"]\n\ndef glob(pathname):\n ''\n\n\n\n\n\n\n \n return list(iglob(pathname))\n \ndef iglob(pathname):\n ''\n\n\n\n\n\n\n \n dirname,basename=os.path.split(pathname)\n if not has_magic(pathname):\n  if basename:\n   if os.path.lexists(pathname):\n    yield pathname\n  else :\n  \n   if os.path.isdir(dirname):\n    yield pathname\n  return\n if not dirname:\n  yield from glob1(None ,basename)\n  return\n  \n  \n  \n if dirname !=pathname and has_magic(dirname):\n  dirs=iglob(dirname)\n else :\n  dirs=[dirname]\n if has_magic(basename):\n  glob_in_dir=glob1\n else :\n  glob_in_dir=glob0\n for dirname in dirs:\n  for name in glob_in_dir(dirname,basename):\n   yield os.path.join(dirname,name)\n   \n   \n   \n   \n   \ndef glob1(dirname,pattern):\n if not dirname:\n  if isinstance(pattern,bytes):\n   dirname=bytes(os.curdir,'ASCII')\n  else :\n   dirname=os.curdir\n try :\n  names=os.listdir(dirname)\n except OSError:\n  return []\n if not _ishidden(pattern):\n  names=[x for x in names if not _ishidden(x)]\n return fnmatch.filter(names,pattern)\n \ndef glob0(dirname,basename):\n if not basename:\n \n \n  if os.path.isdir(dirname):\n   return [basename]\n else :\n  if os.path.lexists(os.path.join(dirname,basename)):\n   return [basename]\n return []\n \n \nmagic_check=re.compile('([*?[])')\nmagic_check_bytes=re.compile(b'([*?[])')\n\ndef has_magic(s):\n if isinstance(s,bytes):\n  match=magic_check_bytes.search(s)\n else :\n  match=magic_check.search(s)\n return match is not None\n \ndef _ishidden(path):\n return path[0]in ('.',b'.'[0])\n \ndef escape(pathname):\n ''\n \n \n \n drive,pathname=os.path.splitdrive(pathname)\n if isinstance(pathname,bytes):\n  pathname=magic_check_bytes.sub(br'[\\1]',pathname)\n else :\n  pathname=magic_check.sub(r'[\\1]',pathname)\n return drive+pathname\n"], "jqueryui.jquery-1.11.2.min": [".js", "/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */\n!function(a,b){\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error(\"jQuery requires a window with a document\");return b(a)}:b(a)}(\"undefined\"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=\"1.11.2\",m=function(a,b){return new m.fn.init(a,b)},n=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,o=/^-ms-/,p=/-([\\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:\"\",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for(\"boolean\"==typeof g&&(j=g,g=arguments[h]||{},h++),\"object\"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:\"jQuery\"+(l+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return\"function\"===m.type(a)},isArray:Array.isArray||function(a){return\"array\"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||\"object\"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,\"constructor\")&&!j.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?h[i.call(a)]||\"object\":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,\"ms-\").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?\"\":(a+\"\").replace(n,\"\")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,\"string\"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return\"string\"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(a,b){h[\"[object \"+b+\"]\"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return\"function\"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:\"array\"===c||0===b||\"number\"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=\"sizzle\"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",L=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",M=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",N=M.replace(\"w\",\"w#\"),O=\"\\\\[\"+L+\"*(\"+M+\")(?:\"+L+\"*([*^$|!~]?=)\"+L+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+N+\"))|)\"+L+\"*\\\\]\",P=\":(\"+M+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+O+\")*)|.*)\\\\)|)\",Q=new RegExp(L+\"+\",\"g\"),R=new RegExp(\"^\"+L+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+L+\"+$\",\"g\"),S=new RegExp(\"^\"+L+\"*,\"+L+\"*\"),T=new RegExp(\"^\"+L+\"*([>+~]|\"+L+\")\"+L+\"*\"),U=new RegExp(\"=\"+L+\"*([^\\\\]'\\\"]*?)\"+L+\"*\\\\]\",\"g\"),V=new RegExp(P),W=new RegExp(\"^\"+N+\"$\"),X={ID:new RegExp(\"^#(\"+M+\")\"),CLASS:new RegExp(\"^\\\\.(\"+M+\")\"),TAG:new RegExp(\"^(\"+M.replace(\"w\",\"w*\")+\")\"),ATTR:new RegExp(\"^\"+O),PSEUDO:new RegExp(\"^\"+P),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+L+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+L+\"*(?:([+-]|)\"+L+\"*(\\\\d+)|))\"+L+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+K+\")$\",\"i\"),needsContext:new RegExp(\"^\"+L+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+L+\"*((?:-\\\\d)?\\\\d*)\"+L+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\\d$/i,$=/^[^{]+\\{\\s*\\[native \\w/,_=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ab=/[+~]/,bb=/'|\\\\/g,cb=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+L+\"?|(\"+L+\")|.)\",\"ig\"),db=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,\"string\"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&\"object\"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute(\"id\"))?s=r.replace(bb,\"\\\\$&\"):b.setAttribute(\"id\",s),s=\"[id='\"+s+\"'] \",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(\",\")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute(\"id\")}}}return i(a.replace(R,\"$1\"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+\" \")>d.cacheLength&&delete b[a.shift()],b[c+\" \"]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement(\"div\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split(\"|\"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&\"undefined\"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?\"HTML\"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener(\"unload\",eb,!1):e.attachEvent&&e.attachEvent(\"onunload\",eb)),p=!f(g),c.attributes=jb(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute(\"id\")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=\"undefined\"!=typeof a.getAttributeNode&&a.getAttributeNode(\"id\");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return\"undefined\"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML=\"<a id='\"+u+\"'></a><select id='\"+u+\"-\\f]' msallowcapture=''><option selected=''></option></select>\",a.querySelectorAll(\"[msallowcapture^='']\").length&&q.push(\"[*^$]=\"+L+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\"[selected]\").length||q.push(\"\\\\[\"+L+\"*(?:value|\"+K+\")\"),a.querySelectorAll(\"[id~=\"+u+\"-]\").length||q.push(\"~=\"),a.querySelectorAll(\":checked\").length||q.push(\":checked\"),a.querySelectorAll(\"a#\"+u+\"+*\").length||q.push(\".#.+[+~]\")}),jb(function(a){var b=g.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"name\",\"D\"),a.querySelectorAll(\"[name=d]\").length&&q.push(\"name\"+L+\"*[*^$|!~]?=\"),a.querySelectorAll(\":enabled\").length||q.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),q.push(\",.*:\")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,\"div\"),s.call(a,\"[s!='']:x\"),r.push(\"!=\",P)}),q=q.length&&new RegExp(q.join(\"|\")),r=r.length&&new RegExp(r.join(\"|\")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,\"='$1']\"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c=\"\",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||\"\").replace(cb,db),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||\"\":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(\")\",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+\" \"];return b||(b=new RegExp(\"(^|\"+L+\")\"+a+\"(\"+L+\"|$)\"))&&y(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||\"undefined\"!=typeof a.getAttribute&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?\"!=\"===b:b?(e+=\"\",\"=\"===b?e===c:\"!=\"===b?e!==c:\"^=\"===b?c&&0===e.indexOf(c):\"*=\"===b?c&&e.indexOf(c)>-1:\"$=\"===b?c&&e.slice(-c.length)===c:\"~=\"===b?(\" \"+e.replace(Q,\" \")+\" \").indexOf(c)>-1:\"|=\"===b?e===c||e.slice(0,c.length+1)===c+\"-\":!1):!0}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error(\"unsupported pseudo: \"+a);return e[u]?e(b):e.length>1?(c=[a,a,\"\",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,\"$1\"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||\"\")||gb.error(\"unsupported lang: \"+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||\"text\"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+\" \"];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R,\" \")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d=\"\";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&\"parentNode\"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||\"*\",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[\" \"],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:\" \"===a[i-2].type?\"*\":\"\"})).replace(R,\"$1\"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q=\"0\",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG(\"*\",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+\" \"];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n=\"function\"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&\"ID\"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split(\"\").sort(B).join(\"\")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement(\"div\"))}),jb(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||kb(\"type|href|height|width\",function(a,b,c){return c?void 0:a.getAttribute(b,\"type\"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||kb(\"value\",function(a,b,c){return c||\"input\"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute(\"disabled\")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[\":\"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,v=/^.[^:#\\[\\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if(\"string\"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if(\"string\"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+\" \"+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,\"string\"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if(\"string\"==typeof a){if(c=\"<\"===a.charAt(0)&&\">\"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?\"undefined\"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||\"string\"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?\"string\"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return m.dir(a,\"parentNode\",c)},next:function(a){return D(a,\"nextSibling\")},prev:function(a){return D(a,\"previousSibling\")},nextAll:function(a){return m.dir(a,\"nextSibling\")},prevAll:function(a){return m.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return m.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return m.dir(a,\"previousSibling\",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a=\"string\"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);\"function\"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&\"string\"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[[\"resolve\",\"done\",m.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",m.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",m.Callbacks(\"memory\")]],c=\"pending\",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+\"With\"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+\"With\"](this===e?d:this,arguments),this},e[f[0]+\"With\"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler(\"ready\"),m(y).off(\"ready\")))}}});function I(){y.addEventListener?(y.removeEventListener(\"DOMContentLoaded\",J,!1),a.removeEventListener(\"load\",J,!1)):(y.detachEvent(\"onreadystatechange\",J),a.detachEvent(\"onload\",J))}function J(){(y.addEventListener||\"load\"===event.type||\"complete\"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),\"complete\"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener(\"DOMContentLoaded\",J,!1),a.addEventListener(\"load\",J,!1);else{y.attachEvent(\"onreadystatechange\",J),a.attachEvent(\"onload\",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll(\"left\")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K=\"undefined\",L;for(L in m(k))break;k.ownLast=\"0\"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName(\"body\")[0],c&&c.style&&(b=y.createElement(\"div\"),d=y.createElement(\"div\"),d.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText=\"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement(\"div\");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+\" \").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute(\"classid\")===b};var M=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d=\"data-\"+b.replace(N,\"-$1\").toLowerCase();if(c=a.getAttribute(d),\"string\"==typeof c){try{c=\"true\"===c?!0:\"false\"===c?!1:\"null\"===c?null:+c+\"\"===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if((\"data\"!==b||!m.isEmptyObject(a[b]))&&\"toJSON\"!==b)return!1;\nreturn!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||\"string\"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),(\"object\"==typeof b||\"function\"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),\"string\"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(\" \")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{\"applet \":!0,\"embed \":!0,\"object \":\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,\"parsedAttrs\"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf(\"data-\")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,\"parsedAttrs\",!0)}return e}return\"object\"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||\"fx\")+\"queue\",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||\"fx\";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks(\"once memory\").add(function(){m._removeData(a,b+\"queue\"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return\"string\"!=typeof a&&(b=a,a=\"fx\",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};\"string\"!=typeof a&&(b=a,a=void 0),a=a||\"fx\";while(g--)c=m._data(f[g],a+\"queueHooks\"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,T=[\"Top\",\"Right\",\"Bottom\",\"Left\"],U=function(a,b){return a=b||a,\"none\"===m.css(a,\"display\")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if(\"object\"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement(\"input\"),b=y.createElement(\"div\"),c=y.createDocumentFragment();if(b.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName(\"tbody\").length,k.htmlSerialize=!!b.getElementsByTagName(\"link\").length,k.html5Clone=\"<:nav></:nav>\"!==y.createElement(\"nav\").cloneNode(!0).outerHTML,a.type=\"checkbox\",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML=\"<textarea>x</textarea>\",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML=\"<input type='radio' checked='checked' name='t'/>\",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent(\"onclick\",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement(\"div\");for(b in{submit:!0,change:!0,focusin:!0})c=\"on\"+b,(k[b+\"Bubbles\"]=c in a)||(d.setAttribute(c,\"t\"),k[b+\"Bubbles\"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||\"\").match(E)||[\"\"],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||\"\").split(\".\").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(\".\")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent(\"on\"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||\"\").match(E)||[\"\"],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||\"\").split(\".\").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&(\"**\"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,\"events\"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,\"type\")?b.type:b,q=j.call(b,\"namespace\")?b.namespace.split(\".\"):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(\".\")>=0&&(q=p.split(\".\"),p=q.shift(),q.sort()),g=p.indexOf(\":\")<0&&\"on\"+p,b=b[m.expando]?b:new m.Event(p,\"object\"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join(\".\"),b.namespace_re=b.namespace?new RegExp(\"(^|\\\\.)\"+q.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,\"events\")||{})[b.type]&&m._data(h,\"handle\"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,\"events\")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||\"click\"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||\"click\"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+\" \",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:\"focusout\"},click:{trigger:function(){return m.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,\"a\")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d=\"on\"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,\"form\")?!1:void m.event.add(this,\"click._submit keypress._submit\",function(a){var b=a.target,c=m.nodeName(b,\"input\")||m.nodeName(b,\"button\")?b.form:void 0;c&&!m._data(c,\"submitBubbles\")&&(m.event.add(c,\"submit._submit\",function(a){a._submit_bubble=!0}),m._data(c,\"submitBubbles\",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate(\"submit\",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,\"form\")?!1:void m.event.remove(this,\"._submit\")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(m.event.add(this,\"propertychange._change\",function(a){\"checked\"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,\"click._change\",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate(\"change\",this,a,!0)})),!1):void m.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,\"changeBubbles\")&&(m.event.add(b,\"change._change\",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate(\"change\",this.parentNode,a,!0)}),m._data(b,\"changeBubbles\",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||\"radio\"!==b.type&&\"checkbox\"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,\"._change\"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if(\"object\"==typeof a){\"string\"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&(\"string\"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+\".\"+d.namespace:d.origType,d.selector,d.handler),this;if(\"object\"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||\"function\"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",fb=/ jQuery\\d+=\"(?:null|\\d+)\"/g,gb=new RegExp(\"<(?:\"+eb+\")[\\\\s/>]\",\"i\"),hb=/^\\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,jb=/<([\\w:]+)/,kb=/<tbody/i,lb=/<|&#?\\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\\s*(?:[^=]|=\\s*.checked.)/i,ob=/^$|\\/(?:java|ecma)script/i,pb=/^true\\/(.*)/,qb=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,rb={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:k.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},sb=db(y),tb=sb.appendChild(y.createElement(\"div\"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||\"*\"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||\"*\"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,\"table\")&&m.nodeName(11!==b.nodeType?b:b.firstChild,\"tr\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function xb(a){return a.type=(null!==m.find.attr(a,\"type\"))+\"/\"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,\"globalEval\",!b||m._data(b[d],\"globalEval\"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}\"script\"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):\"object\"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):\"input\"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):\"option\"===c?b.defaultSelected=b.selected=a.defaultSelected:(\"input\"===c||\"textarea\"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test(\"<\"+a.nodeName+\">\")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,\"script\"),d.length>0&&zb(d,!i&&ub(a,\"script\")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if(\"object\"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement(\"div\")),i=(jb.exec(f)||[\"\",\"\"])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,\"<$1></$2>\")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f=\"table\"!==i||kb.test(f)?\"<table>\"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],\"tbody\")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent=\"\";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,\"input\"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),\"script\"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||\"\")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,\"script\")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,\"select\")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,\"\"):void 0;if(!(\"string\"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||[\"\",\"\"])[1].toLowerCase()])){a=a.replace(ib,\"<$1></$2>\");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&\"string\"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,\"script\"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,\"script\"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||\"\")&&!m._data(d,\"globalEval\")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||\"\").replace(qb,\"\")));i=c=null}return this}}),m.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],\"display\");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),\"none\"!==c&&c||(Cb=(Cb||m(\"<iframe frameborder='0' width='0' height='0'/>\")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName(\"body\")[0],c&&c.style?(b=y.createElement(\"div\"),d=y.createElement(\"div\"),d.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1\",b.appendChild(y.createElement(\"div\")).style.width=\"5px\",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp(\"^(\"+S+\")(?!px)[a-z%]+$\",\"i\"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(\"\"!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+\"\"}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left=\"fontSize\"===b?\"1em\":g,g=h.pixelLeft+\"px\",h.left=d,f&&(e.left=f)),void 0===g?g:g+\"\"||\"auto\"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement(\"div\"),b.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",d=b.getElementsByTagName(\"a\")[0],c=d&&d.style){c.cssText=\"float:left;opacity:.5\",k.opacity=\"0.5\"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip=\"content-box\",b.cloneNode(!0).style.backgroundClip=\"\",k.clearCloneStyle=\"content-box\"===b.style.backgroundClip,k.boxSizing=\"\"===c.boxSizing||\"\"===c.MozBoxSizing||\"\"===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName(\"body\")[0],c&&c.style&&(b=y.createElement(\"div\"),d=y.createElement(\"div\"),d.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",c.appendChild(d).appendChild(b),b.style.cssText=\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute\",e=f=!1,h=!0,a.getComputedStyle&&(e=\"1%\"!==(a.getComputedStyle(b,null)||{}).top,f=\"4px\"===(a.getComputedStyle(b,null)||{width:\"4px\"}).width,i=b.appendChild(y.createElement(\"div\")),i.style.cssText=b.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0\",i.style.marginRight=i.style.width=\"0\",b.style.width=\"1px\",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",i=b.getElementsByTagName(\"td\"),i[0].style.cssText=\"margin:0;border:0;padding:0;display:none\",g=0===i[0].offsetHeight,g&&(i[0].style.display=\"\",i[1].style.display=\"none\",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\\([^)]*\\)/i,Nb=/opacity\\s*=\\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp(\"^(\"+S+\")(.*)$\",\"i\"),Qb=new RegExp(\"^([+-])=(\"+S+\")\",\"i\"),Rb={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Sb={letterSpacing:\"0\",fontWeight:\"400\"},Tb=[\"Webkit\",\"O\",\"Moz\",\"ms\"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,\"olddisplay\"),c=d.style.display,b?(f[g]||\"none\"!==c||(d.style.display=\"\"),\"\"===d.style.display&&U(d)&&(f[g]=m._data(d,\"olddisplay\",Fb(d.nodeName)))):(e=U(d),(c&&\"none\"!==c||!e)&&m._data(d,\"olddisplay\",e?c:m.css(d,\"display\"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&\"none\"!==d.style.display&&\"\"!==d.style.display||(d.style.display=b?f[g]||\"\":\"none\"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||\"px\"):b}function Xb(a,b,c,d,e){for(var f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0,g=0;4>f;f+=2)\"margin\"===c&&(g+=m.css(a,c+T[f],!0,e)),d?(\"content\"===c&&(g-=m.css(a,\"padding\"+T[f],!0,e)),\"margin\"!==c&&(g-=m.css(a,\"border\"+T[f]+\"Width\",!0,e))):(g+=m.css(a,\"padding\"+T[f],!0,e),\"padding\"!==c&&(g+=m.css(a,\"border\"+T[f]+\"Width\",!0,e)));return g}function Yb(a,b,c){var d=!0,e=\"width\"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&\"border-box\"===m.css(a,\"boxSizing\",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?\"border\":\"content\"),d,f)+\"px\"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":k.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&\"get\"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,\"string\"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f=\"number\"),null!=c&&c===c&&(\"number\"!==f||m.cssNumber[h]||(c+=\"px\"),k.clearCloneStyle||\"\"!==c||0!==b.indexOf(\"background\")||(i[b]=\"inherit\"),!(g&&\"set\"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&\"get\"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),\"normal\"===f&&b in Sb&&(f=Sb[b]),\"\"===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each([\"height\",\"width\"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,\"display\"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&\"border-box\"===m.css(a,\"boxSizing\",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?\"alpha(opacity=\"+100*b+\")\":\"\",f=d&&d.filter||c.filter||\"\";c.zoom=1,(b>=1||\"\"===b)&&\"\"===m.trim(f.replace(Mb,\"\"))&&c.removeAttribute&&(c.removeAttribute(\"filter\"),\"\"===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+\" \"+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:\"inline-block\"},Jb,[a,\"marginRight\"]):void 0}),m.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)\n}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||\"swing\",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?\"\":\"px\")},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,\"\"),b&&\"auto\"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp(\"^(?:([+-])=|)(\"+S+\")([a-z%]*)$\",\"i\"),cc=/queueHooks$/,dc=[ic],ec={\"*\":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?\"\":\"px\"),g=(m.cssNumber[a]||\"px\"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||\".5\",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d[\"margin\"+c]=d[\"padding\"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec[\"*\"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,\"fxshow\");c.queue||(h=m._queueHooks(a,\"fx\"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,\"fx\").length||h.empty.fire()})})),1===a.nodeType&&(\"height\"in b||\"width\"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,\"display\"),l=\"none\"===j?m._data(a,\"olddisplay\")||Fb(a.nodeName):j,\"inline\"===l&&\"none\"===m.css(a,\"float\")&&(k.inlineBlockNeedsLayout&&\"inline\"!==Fb(a.nodeName)?p.zoom=1:p.display=\"inline-block\")),c.overflow&&(p.overflow=\"hidden\",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||\"toggle\"===e,e===(q?\"hide\":\"show\")){if(\"show\"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))\"inline\"===(\"none\"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?\"hidden\"in r&&(q=r.hidden):r=m._data(a,\"fxshow\",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,\"fxshow\");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start=\"width\"===d||\"height\"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&\"expand\"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=[\"*\"]):a=a.split(\" \");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&\"object\"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:\"number\"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue=\"fx\"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,\"finish\"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return\"string\"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||\"fx\",[]),this.each(function(){var b=!0,e=null!=a&&a+\"queueHooks\",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||\"fx\"),this.each(function(){var b,c=m._data(this),d=c[a+\"queue\"],e=c[a+\"queueHooks\"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each([\"toggle\",\"show\",\"hide\"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||\"boolean\"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc(\"show\"),slideUp:gc(\"hide\"),slideToggle:gc(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||\"fx\",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement(\"div\"),b.setAttribute(\"className\",\"t\"),b.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",d=b.getElementsByTagName(\"a\")[0],c=y.createElement(\"select\"),e=c.appendChild(y.createElement(\"option\")),a=b.getElementsByTagName(\"input\")[0],d.style.cssText=\"top:1px\",k.getSetAttribute=\"t\"!==b.className,k.style=/top/.test(d.getAttribute(\"style\")),k.hrefNormalized=\"/a\"===d.getAttribute(\"href\"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement(\"form\").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement(\"input\"),a.setAttribute(\"value\",\"\"),k.input=\"\"===a.getAttribute(\"value\"),a.value=\"t\",a.setAttribute(\"type\",\"radio\"),k.radioValue=\"t\"===a.value}();var lc=/\\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e=\"\":\"number\"==typeof e?e+=\"\":m.isArray(e)&&(e=m.map(e,function(a){return null==a?\"\":a+\"\"})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&\"set\"in b&&void 0!==b.set(this,e,\"value\")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&\"get\"in b&&void 0!==(c=b.get(e,\"value\"))?c:(c=e.value,\"string\"==typeof c?c.replace(lc,\"\"):null==c?\"\":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,\"value\");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f=\"select-one\"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute(\"disabled\"))||c.parentNode.disabled&&m.nodeName(c.parentNode,\"optgroup\"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each([\"radio\",\"checkbox\"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&\"get\"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&\"set\"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+\"\"),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase(\"default-\"+c)]=a[d]=!1:m.attr(a,c,\"\"),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&\"radio\"===b&&m.nodeName(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase(\"default-\"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase(\"default-\"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,\"input\")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+=\"\",\"value\"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&\"\"!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,\"\"===b?!1:b,c)}},m.each([\"width\",\"height\"],function(a,b){m.attrHooks[b]={set:function(a,c){return\"\"===c?(a.setAttribute(b,\"auto\"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+\"\"}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&\"get\"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,\"tabindex\");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each([\"href\",\"src\"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype=\"encoding\");var uc=/[\\t\\r\\n\\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=\"string\"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||\"\").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(uc,\" \"):\" \")){f=0;while(e=b[f++])d.indexOf(\" \"+e+\" \")<0&&(d+=e+\" \");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||\"string\"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||\"\").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(uc,\" \"):\"\")){f=0;while(e=b[f++])while(d.indexOf(\" \"+e+\" \")>=0)d=d.replace(\" \"+e+\" \",\" \");g=a?m.trim(d):\"\",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if(\"string\"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||\"boolean\"===c)&&(this.className&&m._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":m._data(this,\"__className__\")||\"\")})},hasClass:function(a){for(var b=\" \"+a+\" \",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(\" \"+this[c].className+\" \").replace(uc,\" \").indexOf(b)>=0)return!0;return!1}}),m.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,\"**\"):this.off(b,a||\"**\",c)}});var vc=m.now(),wc=/\\?/,xc=/(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+\"\");var c,d=null,e=m.trim(b+\"\");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,\"\")}))?Function(\"return \"+e)():m.error(\"Invalid JSON: \"+b)},m.parseXML=function(b){var c,d;if(!b||\"string\"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,\"text/xml\")):(c=new ActiveXObject(\"Microsoft.XMLDOM\"),c.async=\"false\",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName(\"parsererror\").length||m.error(\"Invalid XML: \"+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\\/\\//,Gc=/^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,Hc={},Ic={},Jc=\"*/\".concat(\"*\");try{zc=location.href}catch(Kc){zc=y.createElement(\"a\"),zc.href=\"\",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){\"string\"!=typeof b&&(c=b,b=\"*\");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])\"+\"===d.charAt(0)?(d=d.slice(1)||\"*\",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return\"string\"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e[\"*\"]&&g(\"*\")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while(\"*\"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader(\"Content-Type\"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+\" \"+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(\"*\"===f)f=i;else if(\"*\"!==i&&i!==f){if(g=j[i+\" \"+f]||j[\"* \"+f],!g)for(e in j)if(h=e.split(\" \"),h[1]===f&&(g=j[i+\" \"+h[0]]||j[\"* \"+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a[\"throws\"])b=g(b);else try{b=g(b)}catch(l){return{state:\"parsererror\",error:g?l:\"No conversion from \"+i+\" to \"+f}}}return{state:\"success\",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:\"GET\",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Jc,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":m.parseJSON,\"text xml\":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){\"object\"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks(\"once memory\"),q=k.statusCode||{},r={},s={},t=0,u=\"canceled\",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+\"\").replace(Ac,\"\").replace(Fc,yc[1]+\"//\"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||\"*\").toLowerCase().match(E)||[\"\"],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||(\"http:\"===c[1]?\"80\":\"443\"))===(yc[3]||(\"http:\"===yc[1]?\"80\":\"443\")))),k.data&&k.processData&&\"string\"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger(\"ajaxStart\"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?\"&\":\"?\")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,\"$1_=\"+vc++):e+(wc.test(e)?\"&\":\"?\")+\"_=\"+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader(\"If-Modified-Since\",m.lastModified[e]),m.etag[e]&&v.setRequestHeader(\"If-None-Match\",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader(\"Content-Type\",k.contentType),v.setRequestHeader(\"Accept\",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+(\"*\"!==k.dataTypes[0]?\", \"+Jc+\"; q=0.01\":\"\"):k.accepts[\"*\"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u=\"abort\";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger(\"ajaxSend\",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort(\"timeout\")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,\"No Transport\");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||\"\",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader(\"Last-Modified\"),w&&(m.lastModified[e]=w),w=v.getResponseHeader(\"etag\"),w&&(m.etag[e]=w)),204===a||\"HEAD\"===k.type?x=\"nocontent\":304===a?x=\"notmodified\":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x=\"error\",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+\"\",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?\"ajaxSuccess\":\"ajaxError\",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger(\"ajaxComplete\",[v,k]),--m.active||m.event.trigger(\"ajaxStop\")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,\"json\")},getScript:function(a,b){return m.get(a,void 0,b,\"script\")}}),m.each([\"get\",\"post\"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,\"body\")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&\"none\"===(a.style&&a.style.display||m.css(a,\"display\"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\\[\\]$/,Sc=/\\r?\\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+\"[\"+(\"object\"==typeof e?b:\"\")+\"]\",e,c,d)});else if(c||\"object\"!==m.type(b))d(a,b);else for(e in b)Vc(a+\"[\"+e+\"]\",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?\"\":b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join(\"&\").replace(Qc,\"+\")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,\"elements\");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(\":disabled\")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,\"\\r\\n\")}}):{name:b.name,value:c.replace(Sc,\"\\r\\n\")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent(\"onunload\",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&\"withCredentials\"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c[\"X-Requested-With\"]||(c[\"X-Requested-With\"]=\"XMLHttpRequest\");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+\"\");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,\"string\"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=\"\"}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}m.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter(\"script\",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),m.ajaxTransport(\"script\",function(a){if(a.crossDomain){var b,c=y.head||m(\"head\")[0]||y.documentElement;return{send:function(d,e){b=y.createElement(\"script\"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,\"success\"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\\?(?=&|$)|\\?\\?/;m.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var a=_c.pop()||m.expando+\"_\"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?\"url\":\"string\"==typeof b.data&&!(b.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&ad.test(b.data)&&\"data\");return h||\"jsonp\"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,\"$1\"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?\"&\":\"?\")+b.jsonp+\"=\"+e),b.converters[\"script json\"]=function(){return g||m.error(e+\" was not called\"),g[0]},b.dataTypes[0]=\"json\",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),\"script\"):void 0}),m.parseHTML=function(a,b,c){if(!a||\"string\"!=typeof a)return null;\"boolean\"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if(\"string\"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(\" \");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&\"object\"==typeof b&&(f=\"POST\"),g.length>0&&m.ajax({url:a,type:f,dataType:\"html\",data:b}).done(function(a){e=arguments,g.html(d?m(\"<div>\").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,\"position\"),l=m(a),n={};\"static\"===k&&(a.style.position=\"relative\"),h=l.offset(),f=m.css(a,\"top\"),i=m.css(a,\"left\"),j=(\"absolute\"===k||\"fixed\"===k)&&m.inArray(\"auto\",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),\"using\"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return\"fixed\"===m.css(d,\"position\")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],\"html\")||(c=a.offset()),c.top+=m.css(a[0],\"borderTopWidth\",!0),c.left+=m.css(a[0],\"borderLeftWidth\",!0)),{top:b.top-c.top-m.css(d,\"marginTop\",!0),left:b.left-c.left-m.css(d,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,\"html\")&&\"static\"===m.css(a,\"position\"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each([\"top\",\"left\"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+\"px\":c):void 0})}),m.each({Height:\"height\",Width:\"width\"},function(a,b){m.each({padding:\"inner\"+a,content:b,\"\":\"outer\"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||\"boolean\"!=typeof d),g=c||(d===!0||e===!0?\"margin\":\"border\");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement[\"client\"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body[\"scroll\"+a],e[\"scroll\"+a],b.body[\"offset\"+a],e[\"offset\"+a],e[\"client\"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});\n"], "configparser": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfrom collections.abc import MutableMapping\nfrom collections import OrderedDict as _default_dict,ChainMap as _ChainMap\nimport functools\nimport io\nimport itertools\nimport re\nimport sys\nimport warnings\n\n__all__=[\"NoSectionError\",\"DuplicateOptionError\",\"DuplicateSectionError\",\n\"NoOptionError\",\"InterpolationError\",\"InterpolationDepthError\",\n\"InterpolationSyntaxError\",\"ParsingError\",\n\"MissingSectionHeaderError\",\n\"ConfigParser\",\"SafeConfigParser\",\"RawConfigParser\",\n\"DEFAULTSECT\",\"MAX_INTERPOLATION_DEPTH\"]\n\nDEFAULTSECT=\"DEFAULT\"\n\nMAX_INTERPOLATION_DEPTH=10\n\n\n\n\nclass Error(Exception):\n ''\n \n def _get_message(self):\n  ''\n\n  \n  return self.__message\n  \n def _set_message(self,value):\n  ''\n\n  \n  self.__message=value\n  \n  \n  \n  \n message=property(_get_message,_set_message)\n \n def __init__(self,msg=''):\n  self.message=msg\n  Exception.__init__(self,msg)\n  \n def __repr__(self):\n  return self.message\n  \n __str__=__repr__\n \n \nclass NoSectionError(Error):\n ''\n \n def __init__(self,section):\n  Error.__init__(self,'No section: %r'%(section,))\n  self.section=section\n  self.args=(section,)\n  \n  \nclass DuplicateSectionError(Error):\n ''\n\n\n\n\n \n \n def __init__(self,section,source=None ,lineno=None ):\n  msg=[repr(section),\" already exists\"]\n  if source is not None :\n   message=[\"While reading from \",source]\n   if lineno is not None :\n    message.append(\" [line {0:2d}]\".format(lineno))\n   message.append(\": section \")\n   message.extend(msg)\n   msg=message\n  else :\n   msg.insert(0,\"Section \")\n  Error.__init__(self,\"\".join(msg))\n  self.section=section\n  self.source=source\n  self.lineno=lineno\n  self.args=(section,source,lineno)\n  \n  \nclass DuplicateOptionError(Error):\n ''\n\n\n\n \n \n def __init__(self,section,option,source=None ,lineno=None ):\n  msg=[repr(option),\" in section \",repr(section),\n  \" already exists\"]\n  if source is not None :\n   message=[\"While reading from \",source]\n   if lineno is not None :\n    message.append(\" [line {0:2d}]\".format(lineno))\n   message.append(\": option \")\n   message.extend(msg)\n   msg=message\n  else :\n   msg.insert(0,\"Option \")\n  Error.__init__(self,\"\".join(msg))\n  self.section=section\n  self.option=option\n  self.source=source\n  self.lineno=lineno\n  self.args=(section,option,source,lineno)\n  \n  \nclass NoOptionError(Error):\n ''\n \n def __init__(self,option,section):\n  Error.__init__(self,\"No option %r in section: %r\"%\n  (option,section))\n  self.option=option\n  self.section=section\n  self.args=(option,section)\n  \n  \nclass InterpolationError(Error):\n ''\n \n def __init__(self,option,section,msg):\n  Error.__init__(self,msg)\n  self.option=option\n  self.section=section\n  self.args=(option,section,msg)\n  \n  \nclass InterpolationMissingOptionError(InterpolationError):\n ''\n \n def __init__(self,option,section,rawval,reference):\n  msg=(\"Bad value substitution:\\n\"\n  \"\\tsection: [%s]\\n\"\n  \"\\toption : %s\\n\"\n  \"\\tkey    : %s\\n\"\n  \"\\trawval : %s\\n\"\n  %(section,option,reference,rawval))\n  InterpolationError.__init__(self,option,section,msg)\n  self.reference=reference\n  self.args=(option,section,rawval,reference)\n  \n  \nclass InterpolationSyntaxError(InterpolationError):\n ''\n\n\n\n \n \n \nclass InterpolationDepthError(InterpolationError):\n ''\n \n def __init__(self,option,section,rawval):\n  msg=(\"Value interpolation too deeply recursive:\\n\"\n  \"\\tsection: [%s]\\n\"\n  \"\\toption : %s\\n\"\n  \"\\trawval : %s\\n\"\n  %(section,option,rawval))\n  InterpolationError.__init__(self,option,section,msg)\n  self.args=(option,section,rawval)\n  \n  \nclass ParsingError(Error):\n ''\n \n def __init__(self,source=None ,filename=None ):\n \n \n  if filename and source:\n   raise ValueError(\"Cannot specify both `filename' and `source'. \"\n   \"Use `source'.\")\n  elif not filename and not source:\n   raise ValueError(\"Required argument `source' not given.\")\n  elif filename:\n   source=filename\n  Error.__init__(self,'Source contains parsing errors: %s'%source)\n  self.source=source\n  self.errors=[]\n  self.args=(source,)\n  \n @property\n def filename(self):\n  ''\n  warnings.warn(\n  \"The 'filename' attribute will be removed in future versions.  \"\n  \"Use 'source' instead.\",\n  DeprecationWarning,stacklevel=2\n  )\n  return self.source\n  \n @filename.setter\n def filename(self,value):\n  ''\n  warnings.warn(\n  \"The 'filename' attribute will be removed in future versions.  \"\n  \"Use 'source' instead.\",\n  DeprecationWarning,stacklevel=2\n  )\n  self.source=value\n  \n def append(self,lineno,line):\n  self.errors.append((lineno,line))\n  self.message +='\\n\\t[line %2d]: %s'%(lineno,line)\n  \n  \nclass MissingSectionHeaderError(ParsingError):\n ''\n \n def __init__(self,filename,lineno,line):\n  Error.__init__(\n  self,\n  'File contains no section headers.\\nfile: %s, line: %d\\n%r'%\n  (filename,lineno,line))\n  self.source=filename\n  self.lineno=lineno\n  self.line=line\n  self.args=(filename,lineno,line)\n  \n  \n  \n  \n  \n_UNSET=object()\n\n\nclass Interpolation:\n ''\n \n def before_get(self,parser,section,option,value,defaults):\n  return value\n  \n def before_set(self,parser,section,option,value):\n  return value\n  \n def before_read(self,parser,section,option,value):\n  return value\n  \n def before_write(self,parser,section,option,value):\n  return value\n  \n  \nclass BasicInterpolation(Interpolation):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n _KEYCRE=re.compile(r\"%\\(([^)]+)\\)s\")\n \n def before_get(self,parser,section,option,value,defaults):\n  L=[]\n  self._interpolate_some(parser,option,L,value,section,defaults,1)\n  return''.join(L)\n  \n def before_set(self,parser,section,option,value):\n  tmp_value=value.replace('%%','')\n  tmp_value=self._KEYCRE.sub('',tmp_value)\n  if'%'in tmp_value:\n   raise ValueError(\"invalid interpolation syntax in %r at \"\n   \"position %d\"%(value,tmp_value.find('%')))\n  return value\n  \n def _interpolate_some(self,parser,option,accum,rest,section,map,\n depth):\n  if depth >MAX_INTERPOLATION_DEPTH:\n   raise InterpolationDepthError(option,section,rest)\n  while rest:\n   p=rest.find(\"%\")\n   if p <0:\n    accum.append(rest)\n    return\n   if p >0:\n    accum.append(rest[:p])\n    rest=rest[p:]\n    \n   c=rest[1:2]\n   if c ==\"%\":\n    accum.append(\"%\")\n    rest=rest[2:]\n   elif c ==\"(\":\n    m=self._KEYCRE.match(rest)\n    if m is None :\n     raise InterpolationSyntaxError(option,section,\n     \"bad interpolation variable reference %r\"%rest)\n    var=parser.optionxform(m.group(1))\n    rest=rest[m.end():]\n    try :\n     v=map[var]\n    except KeyError:\n     raise InterpolationMissingOptionError(\n     option,section,rest,var)\n    if\"%\"in v:\n     self._interpolate_some(parser,option,accum,v,\n     section,map,depth+1)\n    else :\n     accum.append(v)\n   else :\n    raise InterpolationSyntaxError(\n    option,section,\n    \"'%%' must be followed by '%%' or '(', \"\n    \"found: %r\"%(rest,))\n    \n    \nclass ExtendedInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"\\$\\{([^}]+)\\}\")\n \n def before_get(self,parser,section,option,value,defaults):\n  L=[]\n  self._interpolate_some(parser,option,L,value,section,defaults,1)\n  return''.join(L)\n  \n def before_set(self,parser,section,option,value):\n  tmp_value=value.replace('$$','')\n  tmp_value=self._KEYCRE.sub('',tmp_value)\n  if'$'in tmp_value:\n   raise ValueError(\"invalid interpolation syntax in %r at \"\n   \"position %d\"%(value,tmp_value.find('%')))\n  return value\n  \n def _interpolate_some(self,parser,option,accum,rest,section,map,\n depth):\n  if depth >MAX_INTERPOLATION_DEPTH:\n   raise InterpolationDepthError(option,section,rest)\n  while rest:\n   p=rest.find(\"$\")\n   if p <0:\n    accum.append(rest)\n    return\n   if p >0:\n    accum.append(rest[:p])\n    rest=rest[p:]\n    \n   c=rest[1:2]\n   if c ==\"$\":\n    accum.append(\"$\")\n    rest=rest[2:]\n   elif c ==\"{\":\n    m=self._KEYCRE.match(rest)\n    if m is None :\n     raise InterpolationSyntaxError(option,section,\n     \"bad interpolation variable reference %r\"%rest)\n    path=m.group(1).split(':')\n    rest=rest[m.end():]\n    sect=section\n    opt=option\n    try :\n     if len(path)==1:\n      opt=parser.optionxform(path[0])\n      v=map[opt]\n     elif len(path)==2:\n      sect=path[0]\n      opt=parser.optionxform(path[1])\n      v=parser.get(sect,opt,raw=True )\n     else :\n      raise InterpolationSyntaxError(\n      option,section,\n      \"More than one ':' found: %r\"%(rest,))\n    except (KeyError,NoSectionError,NoOptionError):\n     raise InterpolationMissingOptionError(\n     option,section,rest,\":\".join(path))\n    if\"$\"in v:\n     self._interpolate_some(parser,opt,accum,v,sect,\n     dict(parser.items(sect,raw=True )),\n     depth+1)\n    else :\n     accum.append(v)\n   else :\n    raise InterpolationSyntaxError(\n    option,section,\n    \"'$' must be followed by '$' or '{', \"\n    \"found: %r\"%(rest,))\n    \n    \nclass LegacyInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"%\\(([^)]*)\\)s|.\")\n \n def before_get(self,parser,section,option,value,vars):\n  rawval=value\n  depth=MAX_INTERPOLATION_DEPTH\n  while depth:\n   depth -=1\n   if value and\"%(\"in value:\n    replace=functools.partial(self._interpolation_replace,\n    parser=parser)\n    value=self._KEYCRE.sub(replace,value)\n    try :\n     value=value %vars\n    except KeyError as e:\n     raise InterpolationMissingOptionError(\n     option,section,rawval,e.args[0])\n   else :\n    break\n  if value and\"%(\"in value:\n   raise InterpolationDepthError(option,section,rawval)\n  return value\n  \n def before_set(self,parser,section,option,value):\n  return value\n  \n @staticmethod\n def _interpolation_replace(match,parser):\n  s=match.group(1)\n  if s is None :\n   return match.group()\n  else :\n   return\"%%(%s)s\"%parser.optionxform(s)\n   \n   \nclass RawConfigParser(MutableMapping):\n ''\n \n \n _SECT_TMPL=r\"\"\"\n        \\[                                 # [\n        (?P<header>[^]]+)                  # very permissive!\n        \\]                                 # ]\n        \"\"\"\n _OPT_TMPL=r\"\"\"\n        (?P<option>.*?)                    # very permissive!\n        \\s*(?P<vi>{delim})\\s*              # any number of space/tab,\n                                           # followed by any of the\n                                           # allowed delimiters,\n                                           # followed by any space/tab\n        (?P<value>.*)$                     # everything up to eol\n        \"\"\"\n _OPT_NV_TMPL=r\"\"\"\n        (?P<option>.*?)                    # very permissive!\n        \\s*(?:                             # any number of space/tab,\n        (?P<vi>{delim})\\s*                 # optionally followed by\n                                           # any of the allowed\n                                           # delimiters, followed by any\n                                           # space/tab\n        (?P<value>.*))?$                   # everything up to eol\n        \"\"\"\n \n _DEFAULT_INTERPOLATION=Interpolation()\n \n SECTCRE=re.compile(_SECT_TMPL,re.VERBOSE)\n \n OPTCRE=re.compile(_OPT_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n \n OPTCRE_NV=re.compile(_OPT_NV_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n NONSPACECRE=re.compile(r\"\\S\")\n \n BOOLEAN_STATES={'1':True ,'yes':True ,'true':True ,'on':True ,\n '0':False ,'no':False ,'false':False ,'off':False }\n \n def __init__(self,defaults=None ,dict_type=_default_dict,\n allow_no_value=False ,*,delimiters=('=',':'),\n comment_prefixes=('#',';'),inline_comment_prefixes=None ,\n strict=True ,empty_lines_in_values=True ,\n default_section=DEFAULTSECT,\n interpolation=_UNSET):\n \n  self._dict=dict_type\n  self._sections=self._dict()\n  self._defaults=self._dict()\n  self._proxies=self._dict()\n  self._proxies[default_section]=SectionProxy(self,default_section)\n  if defaults:\n   for key,value in defaults.items():\n    self._defaults[self.optionxform(key)]=value\n  self._delimiters=tuple(delimiters)\n  if delimiters ==('=',':'):\n   self._optcre=self.OPTCRE_NV if allow_no_value else self.OPTCRE\n  else :\n   d=\"|\".join(re.escape(d)for d in delimiters)\n   if allow_no_value:\n    self._optcre=re.compile(self._OPT_NV_TMPL.format(delim=d),\n    re.VERBOSE)\n   else :\n    self._optcre=re.compile(self._OPT_TMPL.format(delim=d),\n    re.VERBOSE)\n  self._comment_prefixes=tuple(comment_prefixes or ())\n  self._inline_comment_prefixes=tuple(inline_comment_prefixes or ())\n  self._strict=strict\n  self._allow_no_value=allow_no_value\n  self._empty_lines_in_values=empty_lines_in_values\n  self.default_section=default_section\n  self._interpolation=interpolation\n  if self._interpolation is _UNSET:\n   self._interpolation=self._DEFAULT_INTERPOLATION\n  if self._interpolation is None :\n   self._interpolation=Interpolation()\n   \n def defaults(self):\n  return self._defaults\n  \n def sections(self):\n  ''\n  \n  return list(self._sections.keys())\n  \n def add_section(self,section):\n  ''\n\n\n\n  \n  if section ==self.default_section:\n   raise ValueError('Invalid section name: %r'%section)\n   \n  if section in self._sections:\n   raise DuplicateSectionError(section)\n  self._sections[section]=self._dict()\n  self._proxies[section]=SectionProxy(self,section)\n  \n def has_section(self,section):\n  ''\n\n\n  \n  return section in self._sections\n  \n def options(self,section):\n  ''\n  try :\n   opts=self._sections[section].copy()\n  except KeyError:\n   raise NoSectionError(section)\n  opts.update(self._defaults)\n  return list(opts.keys())\n  \n def read(self,filenames,encoding=None ):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  if isinstance(filenames,str):\n   filenames=[filenames]\n  read_ok=[]\n  for filename in filenames:\n   try :\n    with open(filename,encoding=encoding)as fp:\n     self._read(fp,filename)\n   except IOError:\n    continue\n   read_ok.append(filename)\n  return read_ok\n  \n def read_file(self,f,source=None ):\n  ''\n\n\n\n\n\n  \n  if source is None :\n   try :\n    source=f.name\n   except AttributeError:\n    source='<???>'\n  self._read(f,source)\n  \n def read_string(self,string,source='<string>'):\n  ''\n  sfile=io.StringIO(string)\n  self.read_file(sfile,source)\n  \n def read_dict(self,dictionary,source='<dict>'):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  elements_added=set()\n  for section,keys in dictionary.items():\n   section=str(section)\n   try :\n    self.add_section(section)\n   except (DuplicateSectionError,ValueError):\n    if self._strict and section in elements_added:\n     raise\n   elements_added.add(section)\n   for key,value in keys.items():\n    key=self.optionxform(str(key))\n    if value is not None :\n     value=str(value)\n    if self._strict and (section,key)in elements_added:\n     raise DuplicateOptionError(section,key,source)\n    elements_added.add((section,key))\n    self.set(section,key,value)\n    \n def readfp(self,fp,filename=None ):\n  ''\n  warnings.warn(\n  \"This method will be removed in future versions.  \"\n  \"Use 'parser.read_file()' instead.\",\n  DeprecationWarning,stacklevel=2\n  )\n  self.read_file(fp,source=filename)\n  \n def get(self,section,option,*,raw=False ,vars=None ,fallback=_UNSET):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  try :\n   d=self._unify_values(section,vars)\n  except NoSectionError:\n   if fallback is _UNSET:\n    raise\n   else :\n    return fallback\n  option=self.optionxform(option)\n  try :\n   value=d[option]\n  except KeyError:\n   if fallback is _UNSET:\n    raise NoOptionError(option,section)\n   else :\n    return fallback\n    \n  if raw or value is None :\n   return value\n  else :\n   return self._interpolation.before_get(self,section,option,value,\n   d)\n   \n def _get(self,section,conv,option,**kwargs):\n  return conv(self.get(section,option,**kwargs))\n  \n def getint(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET):\n  try :\n   return self._get(section,int,option,raw=raw,vars=vars)\n  except (NoSectionError,NoOptionError):\n   if fallback is _UNSET:\n    raise\n   else :\n    return fallback\n    \n def getfloat(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET):\n  try :\n   return self._get(section,float,option,raw=raw,vars=vars)\n  except (NoSectionError,NoOptionError):\n   if fallback is _UNSET:\n    raise\n   else :\n    return fallback\n    \n def getboolean(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET):\n  try :\n   return self._get(section,self._convert_to_boolean,option,\n   raw=raw,vars=vars)\n  except (NoSectionError,NoOptionError):\n   if fallback is _UNSET:\n    raise\n   else :\n    return fallback\n    \n def items(self,section=_UNSET,raw=False ,vars=None ):\n  ''\n\n\n\n\n\n\n\n\n  \n  if section is _UNSET:\n   return super().items()\n  d=self._defaults.copy()\n  try :\n   d.update(self._sections[section])\n  except KeyError:\n   if section !=self.default_section:\n    raise NoSectionError(section)\n    \n  if vars:\n   for key,value in vars.items():\n    d[self.optionxform(key)]=value\n  value_getter=lambda option:self._interpolation.before_get(self,\n  section,option,d[option],d)\n  if raw:\n   value_getter=lambda option:d[option]\n  return [(option,value_getter(option))for option in d.keys()]\n  \n def popitem(self):\n  ''\n\n\n\n\n  \n  for key in self.sections():\n   value=self[key]\n   del self[key]\n   return key,value\n  raise KeyError\n  \n def optionxform(self,optionstr):\n  return optionstr.lower()\n  \n def has_option(self,section,option):\n  ''\n\n  \n  if not section or section ==self.default_section:\n   option=self.optionxform(option)\n   return option in self._defaults\n  elif section not in self._sections:\n   return False\n  else :\n   option=self.optionxform(option)\n   return (option in self._sections[section]\n   or option in self._defaults)\n   \n def set(self,section,option,value=None ):\n  ''\n  if value:\n   value=self._interpolation.before_set(self,section,option,\n   value)\n  if not section or section ==self.default_section:\n   sectdict=self._defaults\n  else :\n   try :\n    sectdict=self._sections[section]\n   except KeyError:\n    raise NoSectionError(section)\n  sectdict[self.optionxform(option)]=value\n  \n def write(self,fp,space_around_delimiters=True ):\n  ''\n\n\n\n  \n  if space_around_delimiters:\n   d=\" {} \".format(self._delimiters[0])\n  else :\n   d=self._delimiters[0]\n  if self._defaults:\n   self._write_section(fp,self.default_section,\n   self._defaults.items(),d)\n  for section in self._sections:\n   self._write_section(fp,section,\n   self._sections[section].items(),d)\n   \n def _write_section(self,fp,section_name,section_items,delimiter):\n  ''\n  fp.write(\"[{}]\\n\".format(section_name))\n  for key,value in section_items:\n   value=self._interpolation.before_write(self,section_name,key,\n   value)\n   if value is not None or not self._allow_no_value:\n    value=delimiter+str(value).replace('\\n','\\n\\t')\n   else :\n    value=\"\"\n   fp.write(\"{}{}\\n\".format(key,value))\n  fp.write(\"\\n\")\n  \n def remove_option(self,section,option):\n  ''\n  if not section or section ==self.default_section:\n   sectdict=self._defaults\n  else :\n   try :\n    sectdict=self._sections[section]\n   except KeyError:\n    raise NoSectionError(section)\n  option=self.optionxform(option)\n  existed=option in sectdict\n  if existed:\n   del sectdict[option]\n  return existed\n  \n def remove_section(self,section):\n  ''\n  existed=section in self._sections\n  if existed:\n   del self._sections[section]\n   del self._proxies[section]\n  return existed\n  \n def __getitem__(self,key):\n  if key !=self.default_section and not self.has_section(key):\n   raise KeyError(key)\n  return self._proxies[key]\n  \n def __setitem__(self,key,value):\n \n \n \n \n \n  if key ==self.default_section:\n   self._defaults.clear()\n  elif key in self._sections:\n   self._sections[key].clear()\n  self.read_dict({key:value})\n  \n def __delitem__(self,key):\n  if key ==self.default_section:\n   raise ValueError(\"Cannot remove the default section.\")\n  if not self.has_section(key):\n   raise KeyError(key)\n  self.remove_section(key)\n  \n def __contains__(self,key):\n  return key ==self.default_section or self.has_section(key)\n  \n def __len__(self):\n  return len(self._sections)+1\n  \n def __iter__(self):\n \n  return itertools.chain((self.default_section,),self._sections.keys())\n  \n def _read(self,fp,fpname):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  elements_added=set()\n  cursect=None\n  sectname=None\n  optname=None\n  lineno=0\n  indent_level=0\n  e=None\n  for lineno,line in enumerate(fp,start=1):\n   comment_start=sys.maxsize\n   \n   inline_prefixes={p:-1 for p in self._inline_comment_prefixes}\n   while comment_start ==sys.maxsize and inline_prefixes:\n    next_prefixes={}\n    for prefix,index in inline_prefixes.items():\n     index=line.find(prefix,index+1)\n     if index ==-1:\n      continue\n     next_prefixes[prefix]=index\n     if index ==0 or (index >0 and line[index -1].isspace()):\n      comment_start=min(comment_start,index)\n    inline_prefixes=next_prefixes\n    \n   for prefix in self._comment_prefixes:\n    if line.strip().startswith(prefix):\n     comment_start=0\n     break\n   if comment_start ==sys.maxsize:\n    comment_start=None\n   value=line[:comment_start].strip()\n   if not value:\n    if self._empty_lines_in_values:\n    \n    \n     if (comment_start is None and\n     cursect is not None and\n     optname and\n     cursect[optname]is not None ):\n      cursect[optname].append('')\n    else :\n    \n     indent_level=sys.maxsize\n    continue\n    \n   first_nonspace=self.NONSPACECRE.search(line)\n   cur_indent_level=first_nonspace.start()if first_nonspace else 0\n   if (cursect is not None and optname and\n   cur_indent_level >indent_level):\n    cursect[optname].append(value)\n    \n   else :\n    indent_level=cur_indent_level\n    \n    mo=self.SECTCRE.match(value)\n    if mo:\n     sectname=mo.group('header')\n     if sectname in self._sections:\n      if self._strict and sectname in elements_added:\n       raise DuplicateSectionError(sectname,fpname,\n       lineno)\n      cursect=self._sections[sectname]\n      elements_added.add(sectname)\n     elif sectname ==self.default_section:\n      cursect=self._defaults\n     else :\n      cursect=self._dict()\n      self._sections[sectname]=cursect\n      self._proxies[sectname]=SectionProxy(self,sectname)\n      elements_added.add(sectname)\n      \n     optname=None\n     \n    elif cursect is None :\n     raise MissingSectionHeaderError(fpname,lineno,line)\n     \n    else :\n     mo=self._optcre.match(value)\n     if mo:\n      optname,vi,optval=mo.group('option','vi','value')\n      if not optname:\n       e=self._handle_error(e,fpname,lineno,line)\n      optname=self.optionxform(optname.rstrip())\n      if (self._strict and\n      (sectname,optname)in elements_added):\n       raise DuplicateOptionError(sectname,optname,\n       fpname,lineno)\n      elements_added.add((sectname,optname))\n      \n      \n      if optval is not None :\n       optval=optval.strip()\n       cursect[optname]=[optval]\n      else :\n      \n       cursect[optname]=None\n     else :\n     \n     \n     \n     \n      e=self._handle_error(e,fpname,lineno,line)\n      \n  if e:\n   raise e\n  self._join_multiline_values()\n  \n def _join_multiline_values(self):\n  defaults=self.default_section,self._defaults\n  all_sections=itertools.chain((defaults,),\n  self._sections.items())\n  for section,options in all_sections:\n   for name,val in options.items():\n    if isinstance(val,list):\n     val='\\n'.join(val).rstrip()\n    options[name]=self._interpolation.before_read(self,\n    section,\n    name,val)\n    \n def _handle_error(self,exc,fpname,lineno,line):\n  if not exc:\n   exc=ParsingError(fpname)\n  exc.append(lineno,repr(line))\n  return exc\n  \n def _unify_values(self,section,vars):\n  ''\n\n\n  \n  sectiondict={}\n  try :\n   sectiondict=self._sections[section]\n  except KeyError:\n   if section !=self.default_section:\n    raise NoSectionError(section)\n    \n  vardict={}\n  if vars:\n   for key,value in vars.items():\n    if value is not None :\n     value=str(value)\n    vardict[self.optionxform(key)]=value\n  return _ChainMap(vardict,sectiondict,self._defaults)\n  \n def _convert_to_boolean(self,value):\n  ''\n  \n  if value.lower()not in self.BOOLEAN_STATES:\n   raise ValueError('Not a boolean: %s'%value)\n  return self.BOOLEAN_STATES[value.lower()]\n  \n def _validate_value_types(self,*,section=\"\",option=\"\",value=\"\"):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  if not isinstance(section,str):\n   raise TypeError(\"section names must be strings\")\n  if not isinstance(option,str):\n   raise TypeError(\"option keys must be strings\")\n  if not self._allow_no_value or value:\n   if not isinstance(value,str):\n    raise TypeError(\"option values must be strings\")\n    \n    \nclass ConfigParser(RawConfigParser):\n ''\n \n _DEFAULT_INTERPOLATION=BasicInterpolation()\n \n def set(self,section,option,value=None ):\n  ''\n  \n  self._validate_value_types(option=option,value=value)\n  super().set(section,option,value)\n  \n def add_section(self,section):\n  ''\n\n  \n  self._validate_value_types(section=section)\n  super().add_section(section)\n  \n  \nclass SafeConfigParser(ConfigParser):\n ''\n \n def __init__(self,*args,**kwargs):\n  super().__init__(*args,**kwargs)\n  warnings.warn(\n  \"The SafeConfigParser class has been renamed to ConfigParser \"\n  \"in Python 3.2. This alias will be removed in future versions.\"\n  \" Use ConfigParser directly instead.\",\n  DeprecationWarning,stacklevel=2\n  )\n  \n  \nclass SectionProxy(MutableMapping):\n ''\n \n def __init__(self,parser,name):\n  ''\n  self._parser=parser\n  self._name=name\n  \n def __repr__(self):\n  return'<Section: {}>'.format(self._name)\n  \n def __getitem__(self,key):\n  if not self._parser.has_option(self._name,key):\n   raise KeyError(key)\n  return self._parser.get(self._name,key)\n  \n def __setitem__(self,key,value):\n  self._parser._validate_value_types(option=key,value=value)\n  return self._parser.set(self._name,key,value)\n  \n def __delitem__(self,key):\n  if not (self._parser.has_option(self._name,key)and\n  self._parser.remove_option(self._name,key)):\n   raise KeyError(key)\n   \n def __contains__(self,key):\n  return self._parser.has_option(self._name,key)\n  \n def __len__(self):\n  return len(self._options())\n  \n def __iter__(self):\n  return self._options().__iter__()\n  \n def _options(self):\n  if self._name !=self._parser.default_section:\n   return self._parser.options(self._name)\n  else :\n   return self._parser.defaults()\n   \n def get(self,option,fallback=None ,*,raw=False ,vars=None ):\n  return self._parser.get(self._name,option,raw=raw,vars=vars,\n  fallback=fallback)\n  \n def getint(self,option,fallback=None ,*,raw=False ,vars=None ):\n  return self._parser.getint(self._name,option,raw=raw,vars=vars,\n  fallback=fallback)\n  \n def getfloat(self,option,fallback=None ,*,raw=False ,vars=None ):\n  return self._parser.getfloat(self._name,option,raw=raw,vars=vars,\n  fallback=fallback)\n  \n def getboolean(self,option,fallback=None ,*,raw=False ,vars=None ):\n  return self._parser.getboolean(self._name,option,raw=raw,vars=vars,\n  fallback=fallback)\n  \n @property\n def parser(self):\n \n  return self._parser\n  \n @property\n def name(self):\n \n  return self._name\n"], "encodings.mac_greek": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-greek',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xb9'\n'\\xb2'\n'\\xc9'\n'\\xb3'\n'\\xd6'\n'\\xdc'\n'\\u0385'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\u0384'\n'\\xa8'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xa3'\n'\\u2122'\n'\\xee'\n'\\xef'\n'\\u2022'\n'\\xbd'\n'\\u2030'\n'\\xf4'\n'\\xf6'\n'\\xa6'\n'\\u20ac'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\u0393'\n'\\u0394'\n'\\u0398'\n'\\u039b'\n'\\u039e'\n'\\u03a0'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u03a3'\n'\\u03aa'\n'\\xa7'\n'\\u2260'\n'\\xb0'\n'\\xb7'\n'\\u0391'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\u0392'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0399'\n'\\u039a'\n'\\u039c'\n'\\u03a6'\n'\\u03ab'\n'\\u03a8'\n'\\u03a9'\n'\\u03ac'\n'\\u039d'\n'\\xac'\n'\\u039f'\n'\\u03a1'\n'\\u2248'\n'\\u03a4'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u03a5'\n'\\u03a7'\n'\\u0386'\n'\\u0388'\n'\\u0153'\n'\\u2013'\n'\\u2015'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u0389'\n'\\u038a'\n'\\u038c'\n'\\u038e'\n'\\u03ad'\n'\\u03ae'\n'\\u03af'\n'\\u03cc'\n'\\u038f'\n'\\u03cd'\n'\\u03b1'\n'\\u03b2'\n'\\u03c8'\n'\\u03b4'\n'\\u03b5'\n'\\u03c6'\n'\\u03b3'\n'\\u03b7'\n'\\u03b9'\n'\\u03be'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03bf'\n'\\u03c0'\n'\\u03ce'\n'\\u03c1'\n'\\u03c3'\n'\\u03c4'\n'\\u03b8'\n'\\u03c9'\n'\\u03c2'\n'\\u03c7'\n'\\u03c5'\n'\\u03b6'\n'\\u03ca'\n'\\u03cb'\n'\\u0390'\n'\\u03b0'\n'\\xad'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "urllib.request": [".py", "from browser import ajax\nfrom .import error\n\nclass FileIO:\n def __init__(self,data):\n  self._data=data\n  \n def read(self):\n  return self._data\n  \ndef urlopen(url,data=None ,timeout=None ):\n global result\n result=None\n \n def on_complete(req):\n  global result\n  if req.status ==200:\n   result=req\n   \n _ajax=ajax.ajax()\n _ajax.bind('complete',on_complete)\n if timeout is not None :\n  _ajax.set_timeout(timeout)\n  \n if data is None :\n  _ajax.open('GET',url,False )\n  _ajax.send()\n else :\n  _ajax.open('POST',url,False )\n  _ajax.send(data)\n  \n if result is not None :\n  if isinstance(result.text,str):\n   return FileIO(result.text)\n   \n  return FileIO(result.text())\n raise error.HTTPError('file not found')"], "encodings.mac_iceland": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-iceland',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\xdd'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\xc6'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u03c0'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\xe6'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\xff'\n'\\u0178'\n'\\u2044'\n'\\u20ac'\n'\\xd0'\n'\\xf0'\n'\\xde'\n'\\xfe'\n'\\xfd'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\xca'\n'\\xc1'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\uf8ff'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u02d8'\n'\\u02d9'\n'\\u02da'\n'\\xb8'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.cp866": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp866',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0410,\n0x0081:0x0411,\n0x0082:0x0412,\n0x0083:0x0413,\n0x0084:0x0414,\n0x0085:0x0415,\n0x0086:0x0416,\n0x0087:0x0417,\n0x0088:0x0418,\n0x0089:0x0419,\n0x008a:0x041a,\n0x008b:0x041b,\n0x008c:0x041c,\n0x008d:0x041d,\n0x008e:0x041e,\n0x008f:0x041f,\n0x0090:0x0420,\n0x0091:0x0421,\n0x0092:0x0422,\n0x0093:0x0423,\n0x0094:0x0424,\n0x0095:0x0425,\n0x0096:0x0426,\n0x0097:0x0427,\n0x0098:0x0428,\n0x0099:0x0429,\n0x009a:0x042a,\n0x009b:0x042b,\n0x009c:0x042c,\n0x009d:0x042d,\n0x009e:0x042e,\n0x009f:0x042f,\n0x00a0:0x0430,\n0x00a1:0x0431,\n0x00a2:0x0432,\n0x00a3:0x0433,\n0x00a4:0x0434,\n0x00a5:0x0435,\n0x00a6:0x0436,\n0x00a7:0x0437,\n0x00a8:0x0438,\n0x00a9:0x0439,\n0x00aa:0x043a,\n0x00ab:0x043b,\n0x00ac:0x043c,\n0x00ad:0x043d,\n0x00ae:0x043e,\n0x00af:0x043f,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x0440,\n0x00e1:0x0441,\n0x00e2:0x0442,\n0x00e3:0x0443,\n0x00e4:0x0444,\n0x00e5:0x0445,\n0x00e6:0x0446,\n0x00e7:0x0447,\n0x00e8:0x0448,\n0x00e9:0x0449,\n0x00ea:0x044a,\n0x00eb:0x044b,\n0x00ec:0x044c,\n0x00ed:0x044d,\n0x00ee:0x044e,\n0x00ef:0x044f,\n0x00f0:0x0401,\n0x00f1:0x0451,\n0x00f2:0x0404,\n0x00f3:0x0454,\n0x00f4:0x0407,\n0x00f5:0x0457,\n0x00f6:0x040e,\n0x00f7:0x045e,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x2116,\n0x00fd:0x00a4,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n'\\u0401'\n'\\u0451'\n'\\u0404'\n'\\u0454'\n'\\u0407'\n'\\u0457'\n'\\u040e'\n'\\u045e'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u2116'\n'\\xa4'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00fd,\n0x00b0:0x00f8,\n0x00b7:0x00fa,\n0x0401:0x00f0,\n0x0404:0x00f2,\n0x0407:0x00f4,\n0x040e:0x00f6,\n0x0410:0x0080,\n0x0411:0x0081,\n0x0412:0x0082,\n0x0413:0x0083,\n0x0414:0x0084,\n0x0415:0x0085,\n0x0416:0x0086,\n0x0417:0x0087,\n0x0418:0x0088,\n0x0419:0x0089,\n0x041a:0x008a,\n0x041b:0x008b,\n0x041c:0x008c,\n0x041d:0x008d,\n0x041e:0x008e,\n0x041f:0x008f,\n0x0420:0x0090,\n0x0421:0x0091,\n0x0422:0x0092,\n0x0423:0x0093,\n0x0424:0x0094,\n0x0425:0x0095,\n0x0426:0x0096,\n0x0427:0x0097,\n0x0428:0x0098,\n0x0429:0x0099,\n0x042a:0x009a,\n0x042b:0x009b,\n0x042c:0x009c,\n0x042d:0x009d,\n0x042e:0x009e,\n0x042f:0x009f,\n0x0430:0x00a0,\n0x0431:0x00a1,\n0x0432:0x00a2,\n0x0433:0x00a3,\n0x0434:0x00a4,\n0x0435:0x00a5,\n0x0436:0x00a6,\n0x0437:0x00a7,\n0x0438:0x00a8,\n0x0439:0x00a9,\n0x043a:0x00aa,\n0x043b:0x00ab,\n0x043c:0x00ac,\n0x043d:0x00ad,\n0x043e:0x00ae,\n0x043f:0x00af,\n0x0440:0x00e0,\n0x0441:0x00e1,\n0x0442:0x00e2,\n0x0443:0x00e3,\n0x0444:0x00e4,\n0x0445:0x00e5,\n0x0446:0x00e6,\n0x0447:0x00e7,\n0x0448:0x00e8,\n0x0449:0x00e9,\n0x044a:0x00ea,\n0x044b:0x00eb,\n0x044c:0x00ec,\n0x044d:0x00ed,\n0x044e:0x00ee,\n0x044f:0x00ef,\n0x0451:0x00f1,\n0x0454:0x00f3,\n0x0457:0x00f5,\n0x045e:0x00f7,\n0x2116:0x00fc,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "posixpath": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\nimport os\nimport sys\nimport stat\nimport genericpath\nfrom genericpath import *\n\n__all__=[\"normcase\",\"isabs\",\"join\",\"splitdrive\",\"split\",\"splitext\",\n\"basename\",\"dirname\",\"commonprefix\",\"getsize\",\"getmtime\",\n\"getatime\",\"getctime\",\"islink\",\"exists\",\"lexists\",\"isdir\",\"isfile\",\n\"ismount\",\"expanduser\",\"expandvars\",\"normpath\",\"abspath\",\n\"samefile\",\"sameopenfile\",\"samestat\",\n\"curdir\",\"pardir\",\"sep\",\"pathsep\",\"defpath\",\"altsep\",\"extsep\",\n\"devnull\",\"realpath\",\"supports_unicode_filenames\",\"relpath\"]\n\n\n\ncurdir='.'\npardir='..'\nextsep='.'\nsep='/'\npathsep=':'\ndefpath=':/bin:/usr/bin'\naltsep=None\ndevnull='/dev/null'\n\ndef _get_sep(path):\n if isinstance(path,bytes):\n  return b'/'\n else :\n  return'/'\n  \n  \n  \n  \n  \n  \ndef normcase(s):\n ''\n \n if not isinstance(s,(bytes,str)):\n  raise TypeError(\"normcase() argument must be str or bytes, \"\n  \"not '{}'\".format(s.__class__.__name__))\n return s\n \n \n \n \n \ndef isabs(s):\n ''\n sep=_get_sep(s)\n return s.startswith(sep)\n \n \n \n \n \n \ndef join(a,*p):\n ''\n\n\n \n sep=_get_sep(a)\n path=a\n try :\n  for b in p:\n   if b.startswith(sep):\n    path=b\n   elif not path or path.endswith(sep):\n    path +=b\n   else :\n    path +=sep+b\n except TypeError:\n  valid_types=all(isinstance(s,(str,bytes,bytearray))\n  for s in (a,)+p)\n  if valid_types:\n  \n   raise TypeError(\"Can't mix strings and bytes in path \"\n   \"components.\")from None\n  raise\n return path\n \n \n \n \n \n \n \ndef split(p):\n ''\n \n sep=_get_sep(p)\n i=p.rfind(sep)+1\n head,tail=p[:i],p[i:]\n if head and head !=sep *len(head):\n  head=head.rstrip(sep)\n return head,tail\n \n \n \n \n \n \n \ndef splitext(p):\n if isinstance(p,bytes):\n  sep=b'/'\n  extsep=b'.'\n else :\n  sep='/'\n  extsep='.'\n return genericpath._splitext(p,sep,None ,extsep)\nsplitext.__doc__=genericpath._splitext.__doc__\n\n\n\n\ndef splitdrive(p):\n ''\n \n return p[:0],p\n \n \n \n \ndef basename(p):\n ''\n sep=_get_sep(p)\n i=p.rfind(sep)+1\n return p[i:]\n \n \n \n \ndef dirname(p):\n ''\n sep=_get_sep(p)\n i=p.rfind(sep)+1\n head=p[:i]\n if head and head !=sep *len(head):\n  head=head.rstrip(sep)\n return head\n \n \n \n \n \ndef islink(path):\n ''\n try :\n  st=os.lstat(path)\n except (os.error,AttributeError):\n  return False\n return stat.S_ISLNK(st.st_mode)\n \n \n \ndef lexists(path):\n ''\n try :\n  os.lstat(path)\n except os.error:\n  return False\n return True\n \n \n \n \ndef samefile(f1,f2):\n ''\n s1=os.stat(f1)\n s2=os.stat(f2)\n return samestat(s1,s2)\n \n \n \n \n \ndef sameopenfile(fp1,fp2):\n ''\n s1=os.fstat(fp1)\n s2=os.fstat(fp2)\n return samestat(s1,s2)\n \n \n \n \n \ndef samestat(s1,s2):\n ''\n return s1.st_ino ==s2.st_ino and s1.st_dev ==s2.st_dev\n \n \n \n \n \ndef ismount(path):\n ''\n if islink(path):\n \n  return False\n try :\n  s1=os.lstat(path)\n  if isinstance(path,bytes):\n   parent=join(path,b'..')\n  else :\n   parent=join(path,'..')\n  s2=os.lstat(parent)\n except os.error:\n  return False\n dev1=s1.st_dev\n dev2=s2.st_dev\n if dev1 !=dev2:\n  return True\n ino1=s1.st_ino\n ino2=s2.st_ino\n if ino1 ==ino2:\n  return True\n return False\n \n \n \n \n \n \n \n \n \n \n \ndef expanduser(path):\n ''\n \n if isinstance(path,bytes):\n  tilde=b'~'\n else :\n  tilde='~'\n if not path.startswith(tilde):\n  return path\n sep=_get_sep(path)\n i=path.find(sep,1)\n if i <0:\n  i=len(path)\n if i ==1:\n  if'HOME'not in os.environ:\n   import pwd\n   userhome=pwd.getpwuid(os.getuid()).pw_dir\n  else :\n   userhome=os.environ['HOME']\n else :\n  import pwd\n  name=path[1:i]\n  if isinstance(name,bytes):\n   name=str(name,'ASCII')\n  try :\n   pwent=pwd.getpwnam(name)\n  except KeyError:\n   return path\n  userhome=pwent.pw_dir\n if isinstance(path,bytes):\n  userhome=os.fsencode(userhome)\n  root=b'/'\n else :\n  root='/'\n userhome=userhome.rstrip(root)\n return (userhome+path[i:])or root\n \n \n \n \n \n \n_varprog=None\n_varprogb=None\n\ndef expandvars(path):\n ''\n \n global _varprog,_varprogb\n if isinstance(path,bytes):\n  if b'$'not in path:\n   return path\n  if not _varprogb:\n   import re\n   _varprogb=re.compile(br'\\$(\\w+|\\{[^}]*\\})',re.ASCII)\n  search=_varprogb.search\n  start=b'{'\n  end=b'}'\n else :\n  if'$'not in path:\n   return path\n  if not _varprog:\n   import re\n   _varprog=re.compile(r'\\$(\\w+|\\{[^}]*\\})',re.ASCII)\n  search=_varprog.search\n  start='{'\n  end='}'\n i=0\n while True :\n  m=search(path,i)\n  if not m:\n   break\n  i,j=m.span(0)\n  name=m.group(1)\n  if name.startswith(start)and name.endswith(end):\n   name=name[1:-1]\n  if isinstance(name,bytes):\n   name=str(name,'ASCII')\n  if name in os.environ:\n   tail=path[j:]\n   value=os.environ[name]\n   if isinstance(path,bytes):\n    value=value.encode('ASCII')\n   path=path[:i]+value\n   i=len(path)\n   path +=tail\n  else :\n   i=j\n return path\n \n \n \n \n \n \ndef normpath(path):\n ''\n if isinstance(path,bytes):\n  sep=b'/'\n  empty=b''\n  dot=b'.'\n  dotdot=b'..'\n else :\n  sep='/'\n  empty=''\n  dot='.'\n  dotdot='..'\n if path ==empty:\n  return dot\n initial_slashes=path.startswith(sep)\n \n \n if (initial_slashes and\n path.startswith(sep *2)and not path.startswith(sep *3)):\n  initial_slashes=2\n comps=path.split(sep)\n new_comps=[]\n for comp in comps:\n  if comp in (empty,dot):\n   continue\n  if (comp !=dotdot or (not initial_slashes and not new_comps)or\n  (new_comps and new_comps[-1]==dotdot)):\n   new_comps.append(comp)\n  elif new_comps:\n   new_comps.pop()\n comps=new_comps\n path=sep.join(comps)\n if initial_slashes:\n  path=sep *initial_slashes+path\n return path or dot\n \n \ndef abspath(path):\n ''\n if not isabs(path):\n  if isinstance(path,bytes):\n   cwd=os.getcwdb()\n  else :\n   cwd=os.getcwd()\n  path=join(cwd,path)\n return normpath(path)\n \n \n \n \n \ndef realpath(filename):\n ''\n \n path,ok=_joinrealpath(filename[:0],filename,{})\n return abspath(path)\n \n \n \ndef _joinrealpath(path,rest,seen):\n if isinstance(path,bytes):\n  sep=b'/'\n  curdir=b'.'\n  pardir=b'..'\n else :\n  sep='/'\n  curdir='.'\n  pardir='..'\n  \n if isabs(rest):\n  rest=rest[1:]\n  path=sep\n  \n while rest:\n  name,_,rest=rest.partition(sep)\n  if not name or name ==curdir:\n  \n   continue\n  if name ==pardir:\n  \n   if path:\n    path,name=split(path)\n    if name ==pardir:\n     path=join(path,pardir,pardir)\n   else :\n    path=pardir\n   continue\n  newpath=join(path,name)\n  if not islink(newpath):\n   path=newpath\n   continue\n   \n  if newpath in seen:\n  \n   path=seen[newpath]\n   if path is not None :\n   \n    continue\n    \n    \n   return join(newpath,rest),False\n  seen[newpath]=None\n  path,ok=_joinrealpath(path,os.readlink(newpath),seen)\n  if not ok:\n   return join(path,rest),False\n  seen[newpath]=path\n  \n return path,True\n \n \nsupports_unicode_filenames=(sys.platform =='darwin')\n\ndef relpath(path,start=None ):\n ''\n \n if not path:\n  raise ValueError(\"no path specified\")\n  \n if isinstance(path,bytes):\n  curdir=b'.'\n  sep=b'/'\n  pardir=b'..'\n else :\n  curdir='.'\n  sep='/'\n  pardir='..'\n  \n if start is None :\n  start=curdir\n  \n start_list=[x for x in abspath(start).split(sep)if x]\n path_list=[x for x in abspath(path).split(sep)if x]\n \n \n i=len(commonprefix([start_list,path_list]))\n \n rel_list=[pardir]*(len(start_list)-i)+path_list[i:]\n if not rel_list:\n  return curdir\n return join(*rel_list)\n"], "encodings.iso8859_16": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-16',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u0105'\n'\\u0141'\n'\\u20ac'\n'\\u201e'\n'\\u0160'\n'\\xa7'\n'\\u0161'\n'\\xa9'\n'\\u0218'\n'\\xab'\n'\\u0179'\n'\\xad'\n'\\u017a'\n'\\u017b'\n'\\xb0'\n'\\xb1'\n'\\u010c'\n'\\u0142'\n'\\u017d'\n'\\u201d'\n'\\xb6'\n'\\xb7'\n'\\u017e'\n'\\u010d'\n'\\u0219'\n'\\xbb'\n'\\u0152'\n'\\u0153'\n'\\u0178'\n'\\u017c'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\u0106'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u0110'\n'\\u0143'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\u0150'\n'\\xd6'\n'\\u015a'\n'\\u0170'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0118'\n'\\u021a'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\u0107'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u0111'\n'\\u0144'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\u0151'\n'\\xf6'\n'\\u015b'\n'\\u0171'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0119'\n'\\u021b'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.iso8859_15": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-15',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\u20ac'\n'\\xa5'\n'\\u0160'\n'\\xa7'\n'\\u0161'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\u017d'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\u017e'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\u0152'\n'\\u0153'\n'\\u0178'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.ptcp154": [".py", "''\n\n\n\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='ptcp154',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0496'\n'\\u0492'\n'\\u04ee'\n'\\u0493'\n'\\u201e'\n'\\u2026'\n'\\u04b6'\n'\\u04ae'\n'\\u04b2'\n'\\u04af'\n'\\u04a0'\n'\\u04e2'\n'\\u04a2'\n'\\u049a'\n'\\u04ba'\n'\\u04b8'\n'\\u0497'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u04b3'\n'\\u04b7'\n'\\u04a1'\n'\\u04e3'\n'\\u04a3'\n'\\u049b'\n'\\u04bb'\n'\\u04b9'\n'\\xa0'\n'\\u040e'\n'\\u045e'\n'\\u0408'\n'\\u04e8'\n'\\u0498'\n'\\u04b0'\n'\\xa7'\n'\\u0401'\n'\\xa9'\n'\\u04d8'\n'\\xab'\n'\\xac'\n'\\u04ef'\n'\\xae'\n'\\u049c'\n'\\xb0'\n'\\u04b1'\n'\\u0406'\n'\\u0456'\n'\\u0499'\n'\\u04e9'\n'\\xb6'\n'\\xb7'\n'\\u0451'\n'\\u2116'\n'\\u04d9'\n'\\xbb'\n'\\u0458'\n'\\u04aa'\n'\\u04ab'\n'\\u049d'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "codeop": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport __future__\n\n_features=[getattr(__future__,fname)\nfor fname in __future__.all_feature_names]\n\n__all__=[\"compile_command\",\"Compile\",\"CommandCompiler\"]\n\nPyCF_DONT_IMPLY_DEDENT=0x200\n\ndef _maybe_compile(compiler,source,filename,symbol):\n\n for line in source.split(\"\\n\"):\n  line=line.strip()\n  if line and line[0]!='#':\n   break\n else :\n  if symbol !=\"eval\":\n   source=\"pass\"\n   \n err=err1=err2=None\n code=code1=code2=None\n \n try :\n  code=compiler(source,filename,symbol)\n except SyntaxError as err:\n  pass\n  \n try :\n  code1=compiler(source+\"\\n\",filename,symbol)\n except SyntaxError as e:\n  err1=e\n  \n try :\n  code2=compiler(source+\"\\n\\n\",filename,symbol)\n except SyntaxError as e:\n  err2=e\n  \n if code:\n  return code\n if not code1 and repr(err1)==repr(err2):\n  raise err1\n  \ndef _compile(source,filename,symbol):\n return compile(source,filename,symbol,PyCF_DONT_IMPLY_DEDENT)\n \ndef compile_command(source,filename=\"<input>\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(_compile,source,filename,symbol)\n \nclass Compile:\n ''\n\n\n \n def __init__(self):\n  self.flags=PyCF_DONT_IMPLY_DEDENT\n  \n def __call__(self,source,filename,symbol):\n  codeob=compile(source,filename,symbol,self.flags,1)\n  for feature in _features:\n   if codeob.co_flags&feature.compiler_flag:\n    self.flags |=feature.compiler_flag\n  return codeob\n  \nclass CommandCompiler:\n ''\n\n\n\n \n \n def __init__(self,):\n  self.compiler=Compile()\n  \n def __call__(self,source,filename=\"<input>\",symbol=\"single\"):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  return _maybe_compile(self.compiler,source,filename,symbol)\n"], "encodings.cp863": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp863',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00c2,\n0x0085:0x00e0,\n0x0086:0x00b6,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x2017,\n0x008e:0x00c0,\n0x008f:0x00a7,\n0x0090:0x00c9,\n0x0091:0x00c8,\n0x0092:0x00ca,\n0x0093:0x00f4,\n0x0094:0x00cb,\n0x0095:0x00cf,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00a4,\n0x0099:0x00d4,\n0x009a:0x00dc,\n0x009b:0x00a2,\n0x009c:0x00a3,\n0x009d:0x00d9,\n0x009e:0x00db,\n0x009f:0x0192,\n0x00a0:0x00a6,\n0x00a1:0x00b4,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00a8,\n0x00a5:0x00b8,\n0x00a6:0x00b3,\n0x00a7:0x00af,\n0x00a8:0x00ce,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00be,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xc2'\n'\\xe0'\n'\\xb6'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\u2017'\n'\\xc0'\n'\\xa7'\n'\\xc9'\n'\\xc8'\n'\\xca'\n'\\xf4'\n'\\xcb'\n'\\xcf'\n'\\xfb'\n'\\xf9'\n'\\xa4'\n'\\xd4'\n'\\xdc'\n'\\xa2'\n'\\xa3'\n'\\xd9'\n'\\xdb'\n'\\u0192'\n'\\xa6'\n'\\xb4'\n'\\xf3'\n'\\xfa'\n'\\xa8'\n'\\xb8'\n'\\xb3'\n'\\xaf'\n'\\xce'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xbe'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a2:0x009b,\n0x00a3:0x009c,\n0x00a4:0x0098,\n0x00a6:0x00a0,\n0x00a7:0x008f,\n0x00a8:0x00a4,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00af:0x00a7,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00a6,\n0x00b4:0x00a1,\n0x00b5:0x00e6,\n0x00b6:0x0086,\n0x00b7:0x00fa,\n0x00b8:0x00a5,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00ad,\n0x00c0:0x008e,\n0x00c2:0x0084,\n0x00c7:0x0080,\n0x00c8:0x0091,\n0x00c9:0x0090,\n0x00ca:0x0092,\n0x00cb:0x0094,\n0x00ce:0x00a8,\n0x00cf:0x0095,\n0x00d4:0x0099,\n0x00d9:0x009d,\n0x00db:0x009e,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e2:0x0083,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f7:0x00f6,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x2017:0x008d,\n0x207f:0x00fc,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "encodings.mac_farsi": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-farsi',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xa0'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\u06ba'\n'\\xab'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\u2026'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xbb'\n'\\xf4'\n'\\xf6'\n'\\xf7'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n' '\n'!'\n'\"'\n'#'\n'$'\n'\\u066a'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n'\\u060c'\n'-'\n'.'\n'/'\n'\\u06f0'\n'\\u06f1'\n'\\u06f2'\n'\\u06f3'\n'\\u06f4'\n'\\u06f5'\n'\\u06f6'\n'\\u06f7'\n'\\u06f8'\n'\\u06f9'\n':'\n'\\u061b'\n'<'\n'='\n'>'\n'\\u061f'\n'\\u274a'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\u0636'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'\\u0640'\n'\\u0641'\n'\\u0642'\n'\\u0643'\n'\\u0644'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\u0649'\n'\\u064a'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\u064f'\n'\\u0650'\n'\\u0651'\n'\\u0652'\n'\\u067e'\n'\\u0679'\n'\\u0686'\n'\\u06d5'\n'\\u06a4'\n'\\u06af'\n'\\u0688'\n'\\u0691'\n'{'\n'|'\n'}'\n'\\u0698'\n'\\u06d2'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.cp857": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp857',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x0131,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x0130,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x015e,\n0x009f:0x015f,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x011e,\n0x00a7:0x011f,\n0x00a8:0x00bf,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x00c0,\n0x00b8:0x00a9,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x00a2,\n0x00be:0x00a5,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x00e3,\n0x00c7:0x00c3,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x00ba,\n0x00d1:0x00aa,\n0x00d2:0x00ca,\n0x00d3:0x00cb,\n0x00d4:0x00c8,\n0x00d5:None ,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x00cf,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x00a6,\n0x00de:0x00cc,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x00d2,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:None ,\n0x00e8:0x00d7,\n0x00e9:0x00da,\n0x00ea:0x00db,\n0x00eb:0x00d9,\n0x00ed:0x00ff,\n0x00ee:0x00af,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:None ,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\u0131'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\u0130'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\u015e'\n'\\u015f'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\u011e'\n'\\u011f'\n'\\xbf'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\xc0'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\xe3'\n'\\xc3'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\xba'\n'\\xaa'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\ufffe'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\xcc'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\xd2'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\ufffe'\n'\\xd7'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\xec'\n'\\xff'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\ufffe'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x00bd,\n0x00a3:0x009c,\n0x00a4:0x00cf,\n0x00a5:0x00be,\n0x00a6:0x00dd,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x00b8,\n0x00aa:0x00d1,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00af:0x00ee,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b4:0x00ef,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b8:0x00f7,\n0x00b9:0x00fb,\n0x00ba:0x00d0,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00bf:0x00a8,\n0x00c0:0x00b7,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c3:0x00c7,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c8:0x00d4,\n0x00c9:0x0090,\n0x00ca:0x00d2,\n0x00cb:0x00d3,\n0x00cc:0x00de,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00cf:0x00d8,\n0x00d1:0x00a5,\n0x00d2:0x00e3,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x00e8,\n0x00d8:0x009d,\n0x00d9:0x00eb,\n0x00da:0x00e9,\n0x00db:0x00ea,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x00c6,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x00ec,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00ff:0x00ed,\n0x011e:0x00a6,\n0x011f:0x00a7,\n0x0130:0x0098,\n0x0131:0x008d,\n0x015e:0x009e,\n0x015f:0x009f,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "bdb": [".py", "''\n\nimport fnmatch\nimport sys\nimport os\nfrom inspect import CO_GENERATOR\n\n__all__=[\"BdbQuit\",\"Bdb\",\"Breakpoint\"]\n\nclass BdbQuit(Exception):\n ''\n \n \nclass Bdb:\n ''\n\n\n\n\n \n \n def __init__(self,skip=None ):\n  self.skip=set(skip)if skip else None\n  self.breaks={}\n  self.fncache={}\n  self.frame_returning=None\n  \n def canonic(self,filename):\n  if filename ==\"<\"+filename[1:-1]+\">\":\n   return filename\n  canonic=self.fncache.get(filename)\n  if not canonic:\n   canonic=os.path.abspath(filename)\n   canonic=os.path.normcase(canonic)\n   self.fncache[filename]=canonic\n  return canonic\n  \n def reset(self):\n  import linecache\n  linecache.checkcache()\n  self.botframe=None\n  self._set_stopinfo(None ,None )\n  \n def trace_dispatch(self,frame,event,arg):\n  if self.quitting:\n   return\n  if event =='line':\n   return self.dispatch_line(frame)\n  if event =='call':\n   return self.dispatch_call(frame,arg)\n  if event =='return':\n   return self.dispatch_return(frame,arg)\n  if event =='exception':\n   return self.dispatch_exception(frame,arg)\n  if event =='c_call':\n   return self.trace_dispatch\n  if event =='c_exception':\n   return self.trace_dispatch\n  if event =='c_return':\n   return self.trace_dispatch\n  print('bdb.Bdb.dispatch: unknown debugging event:',repr(event))\n  return self.trace_dispatch\n  \n def dispatch_line(self,frame):\n  if self.stop_here(frame)or self.break_here(frame):\n   self.user_line(frame)\n   if self.quitting:raise BdbQuit\n  return self.trace_dispatch\n  \n def dispatch_call(self,frame,arg):\n \n  if self.botframe is None :\n  \n   self.botframe=frame.f_back\n   return self.trace_dispatch\n  if not (self.stop_here(frame)or self.break_anywhere(frame)):\n  \n   return\n   \n  if self.stopframe and frame.f_code.co_flags&CO_GENERATOR:\n   return self.trace_dispatch\n  self.user_call(frame,arg)\n  if self.quitting:raise BdbQuit\n  return self.trace_dispatch\n  \n def dispatch_return(self,frame,arg):\n  if self.stop_here(frame)or frame ==self.returnframe:\n  \n   if self.stopframe and frame.f_code.co_flags&CO_GENERATOR:\n    return self.trace_dispatch\n   try :\n    self.frame_returning=frame\n    self.user_return(frame,arg)\n   finally :\n    self.frame_returning=None\n   if self.quitting:raise BdbQuit\n   \n   if self.stopframe is frame and self.stoplineno !=-1:\n    self._set_stopinfo(None ,None )\n  return self.trace_dispatch\n  \n def dispatch_exception(self,frame,arg):\n  if self.stop_here(frame):\n  \n  \n  \n   if not (frame.f_code.co_flags&CO_GENERATOR\n   and arg[0]is StopIteration and arg[2]is None ):\n    self.user_exception(frame,arg)\n    if self.quitting:raise BdbQuit\n    \n    \n    \n    \n  elif (self.stopframe and frame is not self.stopframe\n  and self.stopframe.f_code.co_flags&CO_GENERATOR\n  and arg[0]in (StopIteration,GeneratorExit)):\n   self.user_exception(frame,arg)\n   if self.quitting:raise BdbQuit\n   \n  return self.trace_dispatch\n  \n  \n  \n  \n  \n def is_skipped_module(self,module_name):\n  for pattern in self.skip:\n   if fnmatch.fnmatch(module_name,pattern):\n    return True\n  return False\n  \n def stop_here(self,frame):\n \n \n  if self.skip and  self.is_skipped_module(frame.f_globals.get('__name__')):\n   return False\n  if frame is self.stopframe:\n   if self.stoplineno ==-1:\n    return False\n   return frame.f_lineno >=self.stoplineno\n  if not self.stopframe:\n   return True\n  return False\n  \n def break_here(self,frame):\n  filename=self.canonic(frame.f_code.co_filename)\n  if filename not in self.breaks:\n   return False\n  lineno=frame.f_lineno\n  if lineno not in self.breaks[filename]:\n  \n  \n   lineno=frame.f_code.co_firstlineno\n   if lineno not in self.breaks[filename]:\n    return False\n    \n    \n  (bp,flag)=effective(filename,lineno,frame)\n  if bp:\n   self.currentbp=bp.number\n   if (flag and bp.temporary):\n    self.do_clear(str(bp.number))\n   return True\n  else :\n   return False\n   \n def do_clear(self,arg):\n  raise NotImplementedError(\"subclass of bdb must implement do_clear()\")\n  \n def break_anywhere(self,frame):\n  return self.canonic(frame.f_code.co_filename)in self.breaks\n  \n  \n  \n  \n def user_call(self,frame,argument_list):\n  ''\n  \n  pass\n  \n def user_line(self,frame):\n  ''\n  pass\n  \n def user_return(self,frame,return_value):\n  ''\n  pass\n  \n def user_exception(self,frame,exc_info):\n  ''\n  \n  pass\n  \n def _set_stopinfo(self,stopframe,returnframe,stoplineno=0):\n  self.stopframe=stopframe\n  self.returnframe=returnframe\n  self.quitting=False\n  \n  \n  self.stoplineno=stoplineno\n  \n  \n  \n  \n def set_until(self,frame,lineno=None ):\n  ''\n  \n  \n  if lineno is None :\n   lineno=frame.f_lineno+1\n  self._set_stopinfo(frame,frame,lineno)\n  \n def set_step(self):\n  ''\n  \n  \n  \n  \n  if self.frame_returning:\n   caller_frame=self.frame_returning.f_back\n   if caller_frame and not caller_frame.f_trace:\n    caller_frame.f_trace=self.trace_dispatch\n  self._set_stopinfo(None ,None )\n  \n def set_next(self,frame):\n  ''\n  self._set_stopinfo(frame,None )\n  \n def set_return(self,frame):\n  ''\n  if frame.f_code.co_flags&CO_GENERATOR:\n   self._set_stopinfo(frame,None ,-1)\n  else :\n   self._set_stopinfo(frame.f_back,frame)\n   \n def set_trace(self,frame=None ):\n  ''\n\n\n  \n  if frame is None :\n   frame=sys._getframe().f_back\n  self.reset()\n  while frame:\n   frame.f_trace=self.trace_dispatch\n   self.botframe=frame\n   frame=frame.f_back\n  self.set_step()\n  sys.settrace(self.trace_dispatch)\n  \n def set_continue(self):\n \n  self._set_stopinfo(self.botframe,None ,-1)\n  if not self.breaks:\n  \n   sys.settrace(None )\n   frame=sys._getframe().f_back\n   while frame and frame is not self.botframe:\n    del frame.f_trace\n    frame=frame.f_back\n    \n def set_quit(self):\n  self.stopframe=self.botframe\n  self.returnframe=None\n  self.quitting=True\n  sys.settrace(None )\n  \n  \n  \n  \n  \n  \n  \n  \n def set_break(self,filename,lineno,temporary=False ,cond=None ,\n funcname=None ):\n  filename=self.canonic(filename)\n  import linecache\n  line=linecache.getline(filename,lineno)\n  if not line:\n   return'Line %s:%d does not exist'%(filename,lineno)\n  list=self.breaks.setdefault(filename,[])\n  if lineno not in list:\n   list.append(lineno)\n  bp=Breakpoint(filename,lineno,temporary,cond,funcname)\n  \n def _prune_breaks(self,filename,lineno):\n  if (filename,lineno)not in Breakpoint.bplist:\n   self.breaks[filename].remove(lineno)\n  if not self.breaks[filename]:\n   del self.breaks[filename]\n   \n def clear_break(self,filename,lineno):\n  filename=self.canonic(filename)\n  if filename not in self.breaks:\n   return'There are no breakpoints in %s'%filename\n  if lineno not in self.breaks[filename]:\n   return'There is no breakpoint at %s:%d'%(filename,lineno)\n   \n   \n  for bp in Breakpoint.bplist[filename,lineno][:]:\n   bp.deleteMe()\n  self._prune_breaks(filename,lineno)\n  \n def clear_bpbynumber(self,arg):\n  try :\n   bp=self.get_bpbynumber(arg)\n  except ValueError as err:\n   return str(err)\n  bp.deleteMe()\n  self._prune_breaks(bp.file,bp.line)\n  \n def clear_all_file_breaks(self,filename):\n  filename=self.canonic(filename)\n  if filename not in self.breaks:\n   return'There are no breakpoints in %s'%filename\n  for line in self.breaks[filename]:\n   blist=Breakpoint.bplist[filename,line]\n   for bp in blist:\n    bp.deleteMe()\n  del self.breaks[filename]\n  \n def clear_all_breaks(self):\n  if not self.breaks:\n   return'There are no breakpoints'\n  for bp in Breakpoint.bpbynumber:\n   if bp:\n    bp.deleteMe()\n  self.breaks={}\n  \n def get_bpbynumber(self,arg):\n  if not arg:\n   raise ValueError('Breakpoint number expected')\n  try :\n   number=int(arg)\n  except ValueError:\n   raise ValueError('Non-numeric breakpoint number %s'%arg)\n  try :\n   bp=Breakpoint.bpbynumber[number]\n  except IndexError:\n   raise ValueError('Breakpoint number %d out of range'%number)\n  if bp is None :\n   raise ValueError('Breakpoint %d already deleted'%number)\n  return bp\n  \n def get_break(self,filename,lineno):\n  filename=self.canonic(filename)\n  return filename in self.breaks and  lineno in self.breaks[filename]\n  \n def get_breaks(self,filename,lineno):\n  filename=self.canonic(filename)\n  return filename in self.breaks and  lineno in self.breaks[filename]and  Breakpoint.bplist[filename,lineno]or []\n  \n def get_file_breaks(self,filename):\n  filename=self.canonic(filename)\n  if filename in self.breaks:\n   return self.breaks[filename]\n  else :\n   return []\n   \n def get_all_breaks(self):\n  return self.breaks\n  \n  \n  \n  \n def get_stack(self,f,t):\n  stack=[]\n  if t and t.tb_frame is f:\n   t=t.tb_next\n  while f is not None :\n   stack.append((f,f.f_lineno))\n   if f is self.botframe:\n    break\n   f=f.f_back\n  stack.reverse()\n  i=max(0,len(stack)-1)\n  while t is not None :\n   stack.append((t.tb_frame,t.tb_lineno))\n   t=t.tb_next\n  if f is None :\n   i=max(0,len(stack)-1)\n  return stack,i\n  \n def format_stack_entry(self,frame_lineno,lprefix=': '):\n  import linecache,reprlib\n  frame,lineno=frame_lineno\n  filename=self.canonic(frame.f_code.co_filename)\n  s='%s(%r)'%(filename,lineno)\n  if frame.f_code.co_name:\n   s +=frame.f_code.co_name\n  else :\n   s +=\"<lambda>\"\n  if'__args__'in frame.f_locals:\n   args=frame.f_locals['__args__']\n  else :\n   args=None\n  if args:\n   s +=reprlib.repr(args)\n  else :\n   s +='()'\n  if'__return__'in frame.f_locals:\n   rv=frame.f_locals['__return__']\n   s +='->'\n   s +=reprlib.repr(rv)\n  line=linecache.getline(filename,lineno,frame.f_globals)\n  if line:\n   s +=lprefix+line.strip()\n  return s\n  \n  \n  \n  \n  \n def run(self,cmd,globals=None ,locals=None ):\n  if globals is None :\n   import __main__\n   globals=__main__.__dict__\n  if locals is None :\n   locals=globals\n  self.reset()\n  if isinstance(cmd,str):\n   cmd=compile(cmd,\"<string>\",\"exec\")\n  sys.settrace(self.trace_dispatch)\n  try :\n   exec(cmd,globals,locals)\n  except BdbQuit:\n   pass\n  finally :\n   self.quitting=True\n   sys.settrace(None )\n   \n def runeval(self,expr,globals=None ,locals=None ):\n  if globals is None :\n   import __main__\n   globals=__main__.__dict__\n  if locals is None :\n   locals=globals\n  self.reset()\n  sys.settrace(self.trace_dispatch)\n  try :\n   return eval(expr,globals,locals)\n  except BdbQuit:\n   pass\n  finally :\n   self.quitting=True\n   sys.settrace(None )\n   \n def runctx(self,cmd,globals,locals):\n \n  self.run(cmd,globals,locals)\n  \n  \n  \n def runcall(self,func,*args,**kwds):\n  self.reset()\n  sys.settrace(self.trace_dispatch)\n  res=None\n  try :\n   res=func(*args,**kwds)\n  except BdbQuit:\n   pass\n  finally :\n   self.quitting=True\n   sys.settrace(None )\n  return res\n  \n  \ndef set_trace():\n Bdb().set_trace()\n \n \nclass Breakpoint:\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n next=1\n bplist={}\n bpbynumber=[None ]\n \n \n \n def __init__(self,file,line,temporary=False ,cond=None ,funcname=None ):\n  self.funcname=funcname\n  \n  self.func_first_executable_line=None\n  self.file=file\n  self.line=line\n  self.temporary=temporary\n  self.cond=cond\n  self.enabled=True\n  self.ignore=0\n  self.hits=0\n  self.number=Breakpoint.next\n  Breakpoint.next +=1\n  \n  self.bpbynumber.append(self)\n  if (file,line)in self.bplist:\n   self.bplist[file,line].append(self)\n  else :\n   self.bplist[file,line]=[self]\n   \n def deleteMe(self):\n  index=(self.file,self.line)\n  self.bpbynumber[self.number]=None\n  self.bplist[index].remove(self)\n  if not self.bplist[index]:\n  \n   del self.bplist[index]\n   \n def enable(self):\n  self.enabled=True\n  \n def disable(self):\n  self.enabled=False\n  \n def bpprint(self,out=None ):\n  if out is None :\n   out=sys.stdout\n  print(self.bpformat(),file=out)\n  \n def bpformat(self):\n  if self.temporary:\n   disp='del  '\n  else :\n   disp='keep '\n  if self.enabled:\n   disp=disp+'yes  '\n  else :\n   disp=disp+'no   '\n  ret='%-4dbreakpoint   %s at %s:%d'%(self.number,disp,\n  self.file,self.line)\n  if self.cond:\n   ret +='\\n\\tstop only if %s'%(self.cond,)\n  if self.ignore:\n   ret +='\\n\\tignore next %d hits'%(self.ignore,)\n  if self.hits:\n   if self.hits >1:\n    ss='s'\n   else :\n    ss=''\n   ret +='\\n\\tbreakpoint already hit %d time%s'%(self.hits,ss)\n  return ret\n  \n def __str__(self):\n  return'breakpoint %s at %s:%s'%(self.number,self.file,self.line)\n  \n  \n  \ndef checkfuncname(b,frame):\n ''\n if not b.funcname:\n \n  if b.line !=frame.f_lineno:\n  \n  \n   return False\n  return True\n  \n  \n  \n if frame.f_code.co_name !=b.funcname:\n \n  return False\n  \n  \n if not b.func_first_executable_line:\n \n  b.func_first_executable_line=frame.f_lineno\n  \n if b.func_first_executable_line !=frame.f_lineno:\n \n  return False\n return True\n \n \n \ndef effective(file,line,frame):\n ''\n\n\n\n\n\n \n possibles=Breakpoint.bplist[file,line]\n for b in possibles:\n  if not b.enabled:\n   continue\n  if not checkfuncname(b,frame):\n   continue\n   \n  b.hits +=1\n  if not b.cond:\n  \n   if b.ignore >0:\n    b.ignore -=1\n    continue\n   else :\n   \n    return (b,True )\n  else :\n  \n  \n  \n   try :\n    val=eval(b.cond,frame.f_globals,frame.f_locals)\n    if val:\n     if b.ignore >0:\n      b.ignore -=1\n      \n     else :\n      return (b,True )\n      \n      \n   except :\n   \n   \n   \n    return (b,False )\n return (None ,None )\n \n \n \n \nclass Tdb(Bdb):\n def user_call(self,frame,args):\n  name=frame.f_code.co_name\n  if not name:name='???'\n  print('+++ call',name,args)\n def user_line(self,frame):\n  import linecache\n  name=frame.f_code.co_name\n  if not name:name='???'\n  fn=self.canonic(frame.f_code.co_filename)\n  line=linecache.getline(fn,frame.f_lineno,frame.f_globals)\n  print('+++',fn,frame.f_lineno,name,':',line.strip())\n def user_return(self,frame,retval):\n  print('+++ return',retval)\n def user_exception(self,frame,exc_stuff):\n  print('+++ exception',exc_stuff)\n  self.set_continue()\n  \ndef foo(n):\n print('foo(',n,')')\n x=bar(n *10)\n print('bar returned',x)\n \ndef bar(a):\n print('bar(',a,')')\n return a /2\n \ndef test():\n t=Tdb()\n t.run('import bdb; bdb.foo(10)')\n"], "javascript": [".js", "var $module=(function($B) {\n  return {\n    JSObject: $B.JSObject,\n    JSConstructor: $B.JSConstructor,\n    console: $B.JSObject(window.console),\n    load:function(script_url, names){\n        // Load and eval() the Javascript file at script_url\n        // Set the names in array \"names\" in the Javacript global namespace\n        var file_obj = $B.builtins.open(script_url)\n        var content = $B.builtins.getattr(file_obj, 'read')()\n        eval(content)\n        if(names!==undefined){\n            if(!Array.isArray(names)){\n                throw $B.builtins.TypeError(\"argument 'names' should be a list, not '\"+$B.get_class(names).__name__)\n            }else{\n                for(var i=0;i<names.length;i++){\n                    try{window[names[i]]=eval(names[i])}\n                    catch(err){throw $B.builtins.NameError(\"name '\"+names[i]+\"' not found in script \"+script_url)}\n                }\n            }\n        }\n    },\n    py2js: function(src, module_name){\n        if (is_none(module_name)) {\n            module_name = '__main__'+$B.UUID()\n        }\n        return $B.py2js(src,module_name,module_name,'__builtins__').to_js()\n    },\n    pyobj2jsobj:function(obj){ return $B.pyobj2jsobj(obj)},\n    jsobj2pyobj:function(obj){ return $B.jsobj2pyobj(obj)}\n  }\n})(__BRYTHON__)\n"], "encodings.cp874": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp874',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2026'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\u0e01'\n'\\u0e02'\n'\\u0e03'\n'\\u0e04'\n'\\u0e05'\n'\\u0e06'\n'\\u0e07'\n'\\u0e08'\n'\\u0e09'\n'\\u0e0a'\n'\\u0e0b'\n'\\u0e0c'\n'\\u0e0d'\n'\\u0e0e'\n'\\u0e0f'\n'\\u0e10'\n'\\u0e11'\n'\\u0e12'\n'\\u0e13'\n'\\u0e14'\n'\\u0e15'\n'\\u0e16'\n'\\u0e17'\n'\\u0e18'\n'\\u0e19'\n'\\u0e1a'\n'\\u0e1b'\n'\\u0e1c'\n'\\u0e1d'\n'\\u0e1e'\n'\\u0e1f'\n'\\u0e20'\n'\\u0e21'\n'\\u0e22'\n'\\u0e23'\n'\\u0e24'\n'\\u0e25'\n'\\u0e26'\n'\\u0e27'\n'\\u0e28'\n'\\u0e29'\n'\\u0e2a'\n'\\u0e2b'\n'\\u0e2c'\n'\\u0e2d'\n'\\u0e2e'\n'\\u0e2f'\n'\\u0e30'\n'\\u0e31'\n'\\u0e32'\n'\\u0e33'\n'\\u0e34'\n'\\u0e35'\n'\\u0e36'\n'\\u0e37'\n'\\u0e38'\n'\\u0e39'\n'\\u0e3a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0e3f'\n'\\u0e40'\n'\\u0e41'\n'\\u0e42'\n'\\u0e43'\n'\\u0e44'\n'\\u0e45'\n'\\u0e46'\n'\\u0e47'\n'\\u0e48'\n'\\u0e49'\n'\\u0e4a'\n'\\u0e4b'\n'\\u0e4c'\n'\\u0e4d'\n'\\u0e4e'\n'\\u0e4f'\n'\\u0e50'\n'\\u0e51'\n'\\u0e52'\n'\\u0e53'\n'\\u0e54'\n'\\u0e55'\n'\\u0e56'\n'\\u0e57'\n'\\u0e58'\n'\\u0e59'\n'\\u0e5a'\n'\\u0e5b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_random": [".py", "from browser import window,alert\n\ndef _randint(a,b):\n return int(window.Math.random()*(b -a+1)+a)\n \ndef _rand_with_seed(x,rand_obj):\n\n\n degrees=rand_obj._state %360\n x=window.Math.sin(degrees /(2 *window.Math.PI))*10000\n \n \n \n \n \n if not hasattr(rand_obj,'incr'):\n  rand_obj.incr=1\n rand_obj._state +=rand_obj.incr\n return x -window.Math.floor(x)\n \ndef _urandom(n,rand_obj=None ):\n ''\n \n \n if rand_obj is None or rand_obj._state is None :\n  randbytes=[_randint(0,255)for i in range(n)]\n else :\n  randbytes=[]\n  for i in range(n):\n   randbytes.append(int(256 *_rand_with_seed(i,rand_obj)))\n return bytes(randbytes)\n \nclass Random:\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n VERSION=3\n \n def __init__(self,x=None ):\n  ''\n\n\n  \n  \n  self._state=x\n  \n def seed(self,a=None ,version=2):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  \n  self._state=a\n  self.gauss_next=None\n  \n def getstate(self):\n  ''\n  return self._state\n  \n def setstate(self,state):\n  ''\n  self._state=state\n  \n def random(self):\n  ''\n  return window.Math.random()\n  \n def getrandbits(self,k):\n  ''\n  if k <=0:\n   raise ValueError('number of bits must be greater than zero')\n  if k !=int(k):\n   raise TypeError('number of bits should be an integer')\n  numbytes=(k+7)//8\n  x=int.from_bytes(_urandom(numbytes,self),'big')\n  \n  return x >>(numbytes *8 -k)\n"], "encodings.cp1254": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1254',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u0152'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\u0161'\n'\\u203a'\n'\\u0153'\n'\\ufffe'\n'\\ufffe'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u011e'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0130'\n'\\u015e'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u011f'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0131'\n'\\u015f'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "urllib.parse": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport re\nimport sys\nimport collections\n\n__all__=[\"urlparse\",\"urlunparse\",\"urljoin\",\"urldefrag\",\n\"urlsplit\",\"urlunsplit\",\"urlencode\",\"parse_qs\",\n\"parse_qsl\",\"quote\",\"quote_plus\",\"quote_from_bytes\",\n\"unquote\",\"unquote_plus\",\"unquote_to_bytes\"]\n\n\nuses_relative=['ftp','http','gopher','nntp','imap',\n'wais','file','https','shttp','mms',\n'prospero','rtsp','rtspu','','sftp',\n'svn','svn+ssh']\nuses_netloc=['ftp','http','gopher','nntp','telnet',\n'imap','wais','file','mms','https','shttp',\n'snews','prospero','rtsp','rtspu','rsync','',\n'svn','svn+ssh','sftp','nfs','git','git+ssh']\nuses_params=['ftp','hdl','prospero','http','imap',\n'https','shttp','rtsp','rtspu','sip','sips',\n'mms','','sftp','tel']\n\n\n\nnon_hierarchical=['gopher','hdl','mailto','news',\n'telnet','wais','imap','snews','sip','sips']\nuses_query=['http','wais','imap','https','shttp','mms',\n'gopher','rtsp','rtspu','sip','sips','']\nuses_fragment=['ftp','hdl','http','gopher','news',\n'nntp','wais','https','shttp','snews',\n'file','prospero','']\n\n\nscheme_chars=('abcdefghijklmnopqrstuvwxyz'\n'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n'0123456789'\n'+-.')\n\n\nMAX_CACHE_SIZE=20\n_parse_cache={}\n\ndef clear_cache():\n ''\n _parse_cache.clear()\n _safe_quoters.clear()\n \n \n \n \n \n \n \n \n_implicit_encoding='ascii'\n_implicit_errors='strict'\n\ndef _noop(obj):\n return obj\n \ndef _encode_result(obj,encoding=_implicit_encoding,\nerrors=_implicit_errors):\n return obj.encode(encoding,errors)\n \ndef _decode_args(args,encoding=_implicit_encoding,\nerrors=_implicit_errors):\n return tuple(x.decode(encoding,errors)if x else''for x in args)\n \ndef _coerce_args(*args):\n\n\n\n\n\n str_input=isinstance(args[0],str)\n for arg in args[1:]:\n \n \n  if arg and isinstance(arg,str)!=str_input:\n   raise TypeError(\"Cannot mix str and non-str arguments\")\n if str_input:\n  return args+(_noop,)\n return _decode_args(args)+(_encode_result,)\n \n \nclass _ResultMixinStr(object):\n ''\n __slots__=()\n \n def encode(self,encoding='ascii',errors='strict'):\n  return self._encoded_counterpart(*(x.encode(encoding,errors)for x in self))\n  \n  \nclass _ResultMixinBytes(object):\n ''\n __slots__=()\n \n def decode(self,encoding='ascii',errors='strict'):\n  return self._decoded_counterpart(*(x.decode(encoding,errors)for x in self))\n  \n  \nclass _NetlocResultMixinBase(object):\n ''\n __slots__=()\n \n @property\n def username(self):\n  return self._userinfo[0]\n  \n @property\n def password(self):\n  return self._userinfo[1]\n  \n @property\n def hostname(self):\n  hostname=self._hostinfo[0]\n  if not hostname:\n   hostname=None\n  elif hostname is not None :\n   hostname=hostname.lower()\n  return hostname\n  \n @property\n def port(self):\n  port=self._hostinfo[1]\n  if port is not None :\n   port=int(port,10)\n   \n   if not (0 <=port <=65535):\n    return None\n  return port\n  \n  \nclass _NetlocResultMixinStr(_NetlocResultMixinBase,_ResultMixinStr):\n __slots__=()\n \n @property\n def _userinfo(self):\n  netloc=self.netloc\n  userinfo,have_info,hostinfo=netloc.rpartition('@')\n  if have_info:\n   username,have_password,password=userinfo.partition(':')\n   if not have_password:\n    password=None\n  else :\n   username=password=None\n  return username,password\n  \n @property\n def _hostinfo(self):\n  netloc=self.netloc\n  _,_,hostinfo=netloc.rpartition('@')\n  _,have_open_br,bracketed=hostinfo.partition('[')\n  if have_open_br:\n   hostname,_,port=bracketed.partition(']')\n   _,have_port,port=port.partition(':')\n  else :\n   hostname,have_port,port=hostinfo.partition(':')\n  if not have_port:\n   port=None\n  return hostname,port\n  \n  \nclass _NetlocResultMixinBytes(_NetlocResultMixinBase,_ResultMixinBytes):\n __slots__=()\n \n @property\n def _userinfo(self):\n  netloc=self.netloc\n  userinfo,have_info,hostinfo=netloc.rpartition(b'@')\n  if have_info:\n   username,have_password,password=userinfo.partition(b':')\n   if not have_password:\n    password=None\n  else :\n   username=password=None\n  return username,password\n  \n @property\n def _hostinfo(self):\n  netloc=self.netloc\n  _,_,hostinfo=netloc.rpartition(b'@')\n  _,have_open_br,bracketed=hostinfo.partition(b'[')\n  if have_open_br:\n   hostname,_,port=bracketed.partition(b']')\n   _,have_port,port=port.partition(b':')\n  else :\n   hostname,have_port,port=hostinfo.partition(b':')\n  if not have_port:\n   port=None\n  return hostname,port\n  \n  \nfrom collections import namedtuple\n\n_DefragResultBase=namedtuple('DefragResult','url fragment')\n_SplitResultBase=namedtuple('SplitResult','scheme netloc path query fragment')\n_ParseResultBase=namedtuple('ParseResult','scheme netloc path params query fragment')\n\n\n\n\nResultBase=_NetlocResultMixinStr\n\n\nclass DefragResult(_DefragResultBase,_ResultMixinStr):\n __slots__=()\n def geturl(self):\n  if self.fragment:\n   return self.url+'#'+self.fragment\n  else :\n   return self.url\n   \nclass SplitResult(_SplitResultBase,_NetlocResultMixinStr):\n __slots__=()\n def geturl(self):\n  return urlunsplit(self)\n  \nclass ParseResult(_ParseResultBase,_NetlocResultMixinStr):\n __slots__=()\n def geturl(self):\n  return urlunparse(self)\n  \n  \nclass DefragResultBytes(_DefragResultBase,_ResultMixinBytes):\n __slots__=()\n def geturl(self):\n  if self.fragment:\n   return self.url+b'#'+self.fragment\n  else :\n   return self.url\n   \nclass SplitResultBytes(_SplitResultBase,_NetlocResultMixinBytes):\n __slots__=()\n def geturl(self):\n  return urlunsplit(self)\n  \nclass ParseResultBytes(_ParseResultBase,_NetlocResultMixinBytes):\n __slots__=()\n def geturl(self):\n  return urlunparse(self)\n  \n  \ndef _fix_result_transcoding():\n _result_pairs=(\n (DefragResult,DefragResultBytes),\n (SplitResult,SplitResultBytes),\n (ParseResult,ParseResultBytes),\n )\n for _decoded,_encoded in _result_pairs:\n  _decoded._encoded_counterpart=_encoded\n  _encoded._decoded_counterpart=_decoded\n  \n_fix_result_transcoding()\ndel _fix_result_transcoding\n\ndef urlparse(url,scheme='',allow_fragments=True ):\n ''\n\n\n\n \n url,scheme,_coerce_result=_coerce_args(url,scheme)\n splitresult=urlsplit(url,scheme,allow_fragments)\n scheme,netloc,url,query,fragment=splitresult\n if scheme in uses_params and';'in url:\n  url,params=_splitparams(url)\n else :\n  params=''\n result=ParseResult(scheme,netloc,url,params,query,fragment)\n return _coerce_result(result)\n \ndef _splitparams(url):\n if'/'in url:\n  i=url.find(';',url.rfind('/'))\n  if i <0:\n   return url,''\n else :\n  i=url.find(';')\n return url[:i],url[i+1:]\n \ndef _splitnetloc(url,start=0):\n delim=len(url)\n for c in'/?#':\n  wdelim=url.find(c,start)\n  if wdelim >=0:\n   delim=min(delim,wdelim)\n return url[start:delim],url[delim:]\n \ndef urlsplit(url,scheme='',allow_fragments=True ):\n ''\n\n\n\n \n url,scheme,_coerce_result=_coerce_args(url,scheme)\n allow_fragments=bool(allow_fragments)\n key=url,scheme,allow_fragments,type(url),type(scheme)\n cached=_parse_cache.get(key,None )\n if cached:\n  return _coerce_result(cached)\n if len(_parse_cache)>=MAX_CACHE_SIZE:\n  clear_cache()\n netloc=query=fragment=''\n i=url.find(':')\n if i >0:\n  if url[:i]=='http':\n   scheme=url[:i].lower()\n   url=url[i+1:]\n   if url[:2]=='//':\n    netloc,url=_splitnetloc(url,2)\n    if (('['in netloc and']'not in netloc)or\n    (']'in netloc and'['not in netloc)):\n     raise ValueError(\"Invalid IPv6 URL\")\n   if allow_fragments and'#'in url:\n    url,fragment=url.split('#',1)\n   if'?'in url:\n    url,query=url.split('?',1)\n   v=SplitResult(scheme,netloc,url,query,fragment)\n   _parse_cache[key]=v\n   return _coerce_result(v)\n  for c in url[:i]:\n   if c not in scheme_chars:\n    break\n  else :\n  \n  \n   rest=url[i+1:]\n   if not rest or any(c not in'0123456789'for c in rest):\n   \n    scheme,url=url[:i].lower(),rest\n    \n if url[:2]=='//':\n  netloc,url=_splitnetloc(url,2)\n  if (('['in netloc and']'not in netloc)or\n  (']'in netloc and'['not in netloc)):\n   raise ValueError(\"Invalid IPv6 URL\")\n if allow_fragments and'#'in url:\n  url,fragment=url.split('#',1)\n if'?'in url:\n  url,query=url.split('?',1)\n v=SplitResult(scheme,netloc,url,query,fragment)\n _parse_cache[key]=v\n return _coerce_result(v)\n \ndef urlunparse(components):\n ''\n\n\n \n scheme,netloc,url,params,query,fragment,_coerce_result=(\n _coerce_args(*components))\n if params:\n  url=\"%s;%s\"%(url,params)\n return _coerce_result(urlunsplit((scheme,netloc,url,query,fragment)))\n \ndef urlunsplit(components):\n ''\n\n\n\n \n scheme,netloc,url,query,fragment,_coerce_result=(\n _coerce_args(*components))\n if netloc or (scheme and scheme in uses_netloc and url[:2]!='//'):\n  if url and url[:1]!='/':url='/'+url\n  url='//'+(netloc or'')+url\n if scheme:\n  url=scheme+':'+url\n if query:\n  url=url+'?'+query\n if fragment:\n  url=url+'#'+fragment\n return _coerce_result(url)\n \ndef urljoin(base,url,allow_fragments=True ):\n ''\n \n if not base:\n  return url\n if not url:\n  return base\n base,url,_coerce_result=_coerce_args(base,url)\n bscheme,bnetloc,bpath,bparams,bquery,bfragment= urlparse(base,'',allow_fragments)\n scheme,netloc,path,params,query,fragment= urlparse(url,bscheme,allow_fragments)\n if scheme !=bscheme or scheme not in uses_relative:\n  return _coerce_result(url)\n if scheme in uses_netloc:\n  if netloc:\n   return _coerce_result(urlunparse((scheme,netloc,path,\n   params,query,fragment)))\n  netloc=bnetloc\n if path[:1]=='/':\n  return _coerce_result(urlunparse((scheme,netloc,path,\n  params,query,fragment)))\n if not path and not params:\n  path=bpath\n  params=bparams\n  if not query:\n   query=bquery\n  return _coerce_result(urlunparse((scheme,netloc,path,\n  params,query,fragment)))\n segments=bpath.split('/')[:-1]+path.split('/')\n \n if segments[-1]=='.':\n  segments[-1]=''\n while'.'in segments:\n  segments.remove('.')\n while 1:\n  i=1\n  n=len(segments)-1\n  while i <n:\n   if (segments[i]=='..'\n   and segments[i -1]not in ('','..')):\n    del segments[i -1:i+1]\n    break\n   i=i+1\n  else :\n   break\n if segments ==['','..']:\n  segments[-1]=''\n elif len(segments)>=2 and segments[-1]=='..':\n  segments[-2:]=['']\n return _coerce_result(urlunparse((scheme,netloc,'/'.join(segments),\n params,query,fragment)))\n \ndef urldefrag(url):\n ''\n\n\n\n\n \n url,_coerce_result=_coerce_args(url)\n if'#'in url:\n  s,n,p,a,q,frag=urlparse(url)\n  defrag=urlunparse((s,n,p,a,q,''))\n else :\n  frag=''\n  defrag=url\n return _coerce_result(DefragResult(defrag,frag))\n \n_hexdig='0123456789ABCDEFabcdef'\n_hextobyte={(a+b).encode():bytes([int(a+b,16)])\nfor a in _hexdig for b in _hexdig}\n\ndef unquote_to_bytes(string):\n ''\n \n \n if not string:\n \n  string.split\n  return b''\n if isinstance(string,str):\n  string=string.encode('utf-8')\n bits=string.split(b'%')\n if len(bits)==1:\n  return string\n res=[bits[0]]\n append=res.append\n for item in bits[1:]:\n  try :\n   append(_hextobyte[item[:2]])\n   append(item[2:])\n  except KeyError:\n   append(b'%')\n   append(item)\n return b''.join(res)\n \n_asciire=re.compile('([\\x00-\\x7f]+)')\n\ndef unquote(string,encoding='utf-8',errors='replace'):\n ''\n\n\n\n\n\n\n\n \n if'%'not in string:\n  string.split\n  return string\n if encoding is None :\n  encoding='utf-8'\n if errors is None :\n  errors='replace'\n bits=_asciire.split(string)\n res=[bits[0]]\n append=res.append\n for i in range(1,len(bits),2):\n  append(unquote_to_bytes(bits[i]).decode(encoding,errors))\n  append(bits[i+1])\n return''.join(res)\n \ndef parse_qs(qs,keep_blank_values=False ,strict_parsing=False ,\nencoding='utf-8',errors='replace'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n parsed_result={}\n pairs=parse_qsl(qs,keep_blank_values,strict_parsing,\n encoding=encoding,errors=errors)\n for name,value in pairs:\n  if name in parsed_result:\n   parsed_result[name].append(value)\n  else :\n   parsed_result[name]=[value]\n return parsed_result\n \ndef parse_qsl(qs,keep_blank_values=False ,strict_parsing=False ,\nencoding='utf-8',errors='replace'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n qs,_coerce_result=_coerce_args(qs)\n pairs=[s2 for s1 in qs.split('&')for s2 in s1.split(';')]\n r=[]\n for name_value in pairs:\n  if not name_value and not strict_parsing:\n   continue\n  nv=name_value.split('=',1)\n  if len(nv)!=2:\n   if strict_parsing:\n    raise ValueError(\"bad query field: %r\"%(name_value,))\n    \n   if keep_blank_values:\n    nv.append('')\n   else :\n    continue\n  if len(nv[1])or keep_blank_values:\n   name=nv[0].replace('+',' ')\n   name=unquote(name,encoding=encoding,errors=errors)\n   name=_coerce_result(name)\n   value=nv[1].replace('+',' ')\n   value=unquote(value,encoding=encoding,errors=errors)\n   value=_coerce_result(value)\n   r.append((name,value))\n return r\n \ndef unquote_plus(string,encoding='utf-8',errors='replace'):\n ''\n\n\n\n \n string=string.replace('+',' ')\n return unquote(string,encoding,errors)\n \n_ALWAYS_SAFE=frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nb'abcdefghijklmnopqrstuvwxyz'\nb'0123456789'\nb'_.-')\n_ALWAYS_SAFE_BYTES=bytes(_ALWAYS_SAFE)\n_safe_quoters={}\n\nclass Quoter(collections.defaultdict):\n ''\n\n\n\n \n \n \n def __init__(self,safe):\n  ''\n  self.safe=_ALWAYS_SAFE.union(safe)\n  \n def __repr__(self):\n \n  return\"<Quoter %r>\"%dict(self)\n  \n def __missing__(self,b):\n \n  res=chr(b)if b in self.safe else'%{:02X}'.format(b)\n  self[b]=res\n  return res\n  \ndef quote(string,safe='/',encoding=None ,errors=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if isinstance(string,str):\n  if not string:\n   return string\n  if encoding is None :\n   encoding='utf-8'\n  if errors is None :\n   errors='strict'\n  string=string.encode(encoding,errors)\n else :\n  if encoding is not None :\n   raise TypeError(\"quote() doesn't support 'encoding' for bytes\")\n  if errors is not None :\n   raise TypeError(\"quote() doesn't support 'errors' for bytes\")\n return quote_from_bytes(string,safe)\n \ndef quote_plus(string,safe='',encoding=None ,errors=None ):\n ''\n\n\n \n \n \n if ((isinstance(string,str)and' 'not in string)or\n (isinstance(string,bytes)and b' 'not in string)):\n  return quote(string,safe,encoding,errors)\n if isinstance(safe,str):\n  space=' '\n else :\n  space=b' '\n string=quote(string,safe+space,encoding,errors)\n return string.replace(' ','+')\n \ndef quote_from_bytes(bs,safe='/'):\n ''\n\n\n \n if not isinstance(bs,(bytes,bytearray)):\n  raise TypeError(\"quote_from_bytes() expected bytes\")\n if not bs:\n  return''\n if isinstance(safe,str):\n \n  safe=safe.encode('ascii','ignore')\n else :\n  safe=bytes([c for c in safe if c <128])\n if not bs.rstrip(_ALWAYS_SAFE_BYTES+safe):\n  return bs.decode()\n try :\n  quoter=_safe_quoters[safe]\n except KeyError:\n  _safe_quoters[safe]=quoter=Quoter(safe).__getitem__\n return''.join([quoter(char)for char in bs])\n \ndef urlencode(query,doseq=False ,safe='',encoding=None ,errors=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if hasattr(query,\"items\"):\n  query=query.items()\n else :\n \n \n  try :\n  \n  \n   if len(query)and not isinstance(query[0],tuple):\n    raise TypeError\n    \n    \n    \n    \n  except TypeError:\n   ty,va,tb=sys.exc_info()\n   raise TypeError(\"not a valid non-string sequence \"\n   \"or mapping object\").with_traceback(tb)\n   \n l=[]\n if not doseq:\n  for k,v in query:\n   if isinstance(k,bytes):\n    k=quote_plus(k,safe)\n   else :\n    k=quote_plus(str(k),safe,encoding,errors)\n    \n   if isinstance(v,bytes):\n    v=quote_plus(v,safe)\n   else :\n    v=quote_plus(str(v),safe,encoding,errors)\n   l.append(k+'='+v)\n else :\n  for k,v in query:\n   if isinstance(k,bytes):\n    k=quote_plus(k,safe)\n   else :\n    k=quote_plus(str(k),safe,encoding,errors)\n    \n   if isinstance(v,bytes):\n    v=quote_plus(v,safe)\n    l.append(k+'='+v)\n   elif isinstance(v,str):\n    v=quote_plus(v,safe,encoding,errors)\n    l.append(k+'='+v)\n   else :\n    try :\n    \n     x=len(v)\n    except TypeError:\n    \n     v=quote_plus(str(v),safe,encoding,errors)\n     l.append(k+'='+v)\n    else :\n    \n     for elt in v:\n      if isinstance(elt,bytes):\n       elt=quote_plus(elt,safe)\n      else :\n       elt=quote_plus(str(elt),safe,encoding,errors)\n      l.append(k+'='+elt)\n return'&'.join(l)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \ndef to_bytes(url):\n ''\n \n \n \n if isinstance(url,str):\n  try :\n   url=url.encode(\"ASCII\").decode()\n  except UnicodeError:\n   raise UnicodeError(\"URL \"+repr(url)+\n   \" contains non-ASCII characters\")\n return url\n \ndef unwrap(url):\n ''\n url=str(url).strip()\n if url[:1]=='<'and url[-1:]=='>':\n  url=url[1:-1].strip()\n if url[:4]=='URL:':url=url[4:].strip()\n return url\n \n_typeprog=None\ndef splittype(url):\n ''\n global _typeprog\n if _typeprog is None :\n  import re\n  _typeprog=re.compile('^([^/:]+):')\n  \n match=_typeprog.match(url)\n if match:\n  scheme=match.group(1)\n  return scheme.lower(),url[len(scheme)+1:]\n return None ,url\n \n_hostprog=None\ndef splithost(url):\n ''\n global _hostprog\n if _hostprog is None :\n  import re\n  _hostprog=re.compile('^//([^/?]*)(.*)$')\n  \n match=_hostprog.match(url)\n if match:\n  host_port=match.group(1)\n  path=match.group(2)\n  if path and not path.startswith('/'):\n   path='/'+path\n  return host_port,path\n return None ,url\n \n_userprog=None\ndef splituser(host):\n ''\n global _userprog\n if _userprog is None :\n  import re\n  _userprog=re.compile('^(.*)@(.*)$')\n  \n match=_userprog.match(host)\n if match:return match.group(1,2)\n return None ,host\n \n_passwdprog=None\ndef splitpasswd(user):\n ''\n global _passwdprog\n if _passwdprog is None :\n  import re\n  _passwdprog=re.compile('^([^:]*):(.*)$',re.S)\n  \n match=_passwdprog.match(user)\n if match:return match.group(1,2)\n return user,None\n \n \n_portprog=None\ndef splitport(host):\n ''\n global _portprog\n if _portprog is None :\n  import re\n  _portprog=re.compile('^(.*):([0-9]+)$')\n  \n match=_portprog.match(host)\n if match:return match.group(1,2)\n return host,None\n \n_nportprog=None\ndef splitnport(host,defport=-1):\n ''\n\n\n \n global _nportprog\n if _nportprog is None :\n  import re\n  _nportprog=re.compile('^(.*):(.*)$')\n  \n match=_nportprog.match(host)\n if match:\n  host,port=match.group(1,2)\n  try :\n   if not port:raise ValueError(\"no digits\")\n   nport=int(port)\n  except ValueError:\n   nport=None\n  return host,nport\n return host,defport\n \n_queryprog=None\ndef splitquery(url):\n ''\n global _queryprog\n if _queryprog is None :\n  import re\n  _queryprog=re.compile('^(.*)\\?([^?]*)$')\n  \n match=_queryprog.match(url)\n if match:return match.group(1,2)\n return url,None\n \n_tagprog=None\ndef splittag(url):\n ''\n global _tagprog\n if _tagprog is None :\n  import re\n  _tagprog=re.compile('^(.*)#([^#]*)$')\n  \n match=_tagprog.match(url)\n if match:return match.group(1,2)\n return url,None\n \ndef splitattr(url):\n ''\n \n words=url.split(';')\n return words[0],words[1:]\n \n_valueprog=None\ndef splitvalue(attr):\n ''\n global _valueprog\n if _valueprog is None :\n  import re\n  _valueprog=re.compile('^([^=]*)=(.*)$')\n  \n match=_valueprog.match(attr)\n if match:return match.group(1,2)\n return attr,None\n"], "html": [".py", "''\n\n\n\n\n_escape_map={ord('&'):'&amp;',ord('<'):'&lt;',ord('>'):'&gt;'}\n_escape_map_full={ord('&'):'&amp;',ord('<'):'&lt;',ord('>'):'&gt;',\nord('\"'):'&quot;',ord('\\''):'&#x27;'}\n\n\n\ndef escape(s,quote=True ):\n ''\n\n\n\n\n \n if quote:\n  return s.translate(_escape_map_full)\n return s.translate(_escape_map)\n", 1], "tokenize": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__author__='Ka-Ping Yee <ping@lfw.org>'\n__credits__=('GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, '\n'Skip Montanaro, Raymond Hettinger, Trent Nelson, '\n'Michael Foord')\nimport builtins\nimport re\nimport sys\nfrom token import *\nfrom codecs import lookup,BOM_UTF8\nimport collections\nfrom io import TextIOWrapper\ncookie_re=re.compile(r'^[ \\t\\f]*#.*coding[:=][ \\t]*([-\\w.]+)',re.ASCII)\n\nimport token\n__all__=token.__all__+[\"COMMENT\",\"tokenize\",\"detect_encoding\",\n\"NL\",\"untokenize\",\"ENCODING\",\"TokenInfo\"]\ndel token\n\nCOMMENT=N_TOKENS\ntok_name[COMMENT]='COMMENT'\nNL=N_TOKENS+1\ntok_name[NL]='NL'\nENCODING=N_TOKENS+2\ntok_name[ENCODING]='ENCODING'\nN_TOKENS +=3\nEXACT_TOKEN_TYPES={\n'(':LPAR,\n')':RPAR,\n'[':LSQB,\n']':RSQB,\n':':COLON,\n',':COMMA,\n';':SEMI,\n'+':PLUS,\n'-':MINUS,\n'*':STAR,\n'/':SLASH,\n'|':VBAR,\n'&':AMPER,\n'<':LESS,\n'>':GREATER,\n'=':EQUAL,\n'.':DOT,\n'%':PERCENT,\n'{':LBRACE,\n'}':RBRACE,\n'==':EQEQUAL,\n'!=':NOTEQUAL,\n'<=':LESSEQUAL,\n'>=':GREATEREQUAL,\n'~':TILDE,\n'^':CIRCUMFLEX,\n'<<':LEFTSHIFT,\n'>>':RIGHTSHIFT,\n'**':DOUBLESTAR,\n'+=':PLUSEQUAL,\n'-=':MINEQUAL,\n'*=':STAREQUAL,\n'/=':SLASHEQUAL,\n'%=':PERCENTEQUAL,\n'&=':AMPEREQUAL,\n'|=':VBAREQUAL,\n'^=':CIRCUMFLEXEQUAL,\n'<<=':LEFTSHIFTEQUAL,\n'>>=':RIGHTSHIFTEQUAL,\n'**=':DOUBLESTAREQUAL,\n'//':DOUBLESLASH,\n'//=':DOUBLESLASHEQUAL,\n'@':AT\n}\n\nclass TokenInfo(collections.namedtuple('TokenInfo','type string start end line')):\n def __repr__(self):\n  annotated_type='%d (%s)'%(self.type,tok_name[self.type])\n  return ('TokenInfo(type=%s, string=%r, start=%r, end=%r, line=%r)'%\n  self._replace(type=annotated_type))\n  \n @property\n def exact_type(self):\n  if self.type ==OP and self.string in EXACT_TOKEN_TYPES:\n   return EXACT_TOKEN_TYPES[self.string]\n  else :\n   return self.type\n   \ndef group(*choices):return'('+'|'.join(choices)+')'\ndef any(*choices):return group(*choices)+'*'\ndef maybe(*choices):return group(*choices)+'?'\n\n\n\nWhitespace=r'[ \\f\\t]*'\nComment=r'#[^\\r\\n]*'\nIgnore=Whitespace+any(r'\\\\\\r?\\n'+Whitespace)+maybe(Comment)\nName=r'\\w+'\n\nHexnumber=r'0[xX][0-9a-fA-F]+'\nBinnumber=r'0[bB][01]+'\nOctnumber=r'0[oO][0-7]+'\nDecnumber=r'(?:0+|[1-9][0-9]*)'\nIntnumber=group(Hexnumber,Binnumber,Octnumber,Decnumber)\nExponent=r'[eE][-+]?[0-9]+'\nPointfloat=group(r'[0-9]+\\.[0-9]*',r'\\.[0-9]+')+maybe(Exponent)\nExpfloat=r'[0-9]+'+Exponent\nFloatnumber=group(Pointfloat,Expfloat)\nImagnumber=group(r'[0-9]+[jJ]',Floatnumber+r'[jJ]')\nNumber=group(Imagnumber,Floatnumber,Intnumber)\n\nStringPrefix=r'(?:[bB][rR]?|[rR][bB]?|[uU])?'\n\n\nSingle=r\"[^'\\\\]*(?:\\\\.[^'\\\\]*)*'\"\n\nDouble=r'[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"'\n\nSingle3=r\"[^'\\\\]*(?:(?:\\\\.|'(?!''))[^'\\\\]*)*'''\"\n\nDouble3=r'[^\"\\\\]*(?:(?:\\\\.|\"(?!\"\"))[^\"\\\\]*)*\"\"\"'\nTriple=group(StringPrefix+\"'''\",StringPrefix+'\"\"\"')\n\nString=group(StringPrefix+r\"'[^\\n'\\\\]*(?:\\\\.[^\\n'\\\\]*)*'\",\nStringPrefix+r'\"[^\\n\"\\\\]*(?:\\\\.[^\\n\"\\\\]*)*\"')\n\n\n\n\nOperator=group(r\"\\*\\*=?\",r\">>=?\",r\"<<=?\",r\"!=\",\nr\"//=?\",r\"->\",\nr\"[+\\-*/%&|^=<>]=?\",\nr\"~\")\n\nBracket='[][(){}]'\nSpecial=group(r'\\r?\\n',r'\\.\\.\\.',r'[:;.,@]')\nFunny=group(Operator,Bracket,Special)\n\nPlainToken=group(Number,Funny,String,Name)\nToken=Ignore+PlainToken\n\n\nContStr=group(StringPrefix+r\"'[^\\n'\\\\]*(?:\\\\.[^\\n'\\\\]*)*\"+\ngroup(\"'\",r'\\\\\\r?\\n'),\nStringPrefix+r'\"[^\\n\"\\\\]*(?:\\\\.[^\\n\"\\\\]*)*'+\ngroup('\"',r'\\\\\\r?\\n'))\nPseudoExtras=group(r'\\\\\\r?\\n|\\Z',Comment,Triple)\nPseudoToken=Whitespace+group(PseudoExtras,Number,Funny,ContStr,Name)\n\ndef _compile(expr):\n return re.compile(expr,re.UNICODE)\n \nendpats={\"'\":Single,'\"':Double,\n\"'''\":Single3,'\"\"\"':Double3,\n\"r'''\":Single3,'r\"\"\"':Double3,\n\"b'''\":Single3,'b\"\"\"':Double3,\n\"R'''\":Single3,'R\"\"\"':Double3,\n\"B'''\":Single3,'B\"\"\"':Double3,\n\"br'''\":Single3,'br\"\"\"':Double3,\n\"bR'''\":Single3,'bR\"\"\"':Double3,\n\"Br'''\":Single3,'Br\"\"\"':Double3,\n\"BR'''\":Single3,'BR\"\"\"':Double3,\n\"rb'''\":Single3,'rb\"\"\"':Double3,\n\"Rb'''\":Single3,'Rb\"\"\"':Double3,\n\"rB'''\":Single3,'rB\"\"\"':Double3,\n\"RB'''\":Single3,'RB\"\"\"':Double3,\n\"u'''\":Single3,'u\"\"\"':Double3,\n\"R'''\":Single3,'R\"\"\"':Double3,\n\"U'''\":Single3,'U\"\"\"':Double3,\n'r':None ,'R':None ,'b':None ,'B':None ,\n'u':None ,'U':None }\n\ntriple_quoted={}\nfor t in (\"'''\",'\"\"\"',\n\"r'''\",'r\"\"\"',\"R'''\",'R\"\"\"',\n\"b'''\",'b\"\"\"',\"B'''\",'B\"\"\"',\n\"br'''\",'br\"\"\"',\"Br'''\",'Br\"\"\"',\n\"bR'''\",'bR\"\"\"',\"BR'''\",'BR\"\"\"',\n\"rb'''\",'rb\"\"\"',\"rB'''\",'rB\"\"\"',\n\"Rb'''\",'Rb\"\"\"',\"RB'''\",'RB\"\"\"',\n\"u'''\",'u\"\"\"',\"U'''\",'U\"\"\"',\n):\n triple_quoted[t]=t\nsingle_quoted={}\nfor t in (\"'\",'\"',\n\"r'\",'r\"',\"R'\",'R\"',\n\"b'\",'b\"',\"B'\",'B\"',\n\"br'\",'br\"',\"Br'\",'Br\"',\n\"bR'\",'bR\"',\"BR'\",'BR\"',\n\"rb'\",'rb\"',\"rB'\",'rB\"',\n\"Rb'\",'Rb\"',\"RB'\",'RB\"',\n\"u'\",'u\"',\"U'\",'U\"',\n):\n single_quoted[t]=t\n \ntabsize=8\n\nclass TokenError(Exception):pass\n\nclass StopTokenizing(Exception):pass\n\n\nclass Untokenizer:\n\n def __init__(self):\n  self.tokens=[]\n  self.prev_row=1\n  self.prev_col=0\n  self.encoding=None\n  \n def add_whitespace(self,start):\n  row,col=start\n  assert row <=self.prev_row\n  col_offset=col -self.prev_col\n  if col_offset:\n   self.tokens.append(\" \"*col_offset)\n   \n def untokenize(self,iterable):\n  for t in iterable:\n   if len(t)==2:\n    self.compat(t,iterable)\n    break\n   tok_type,token,start,end,line=t\n   if tok_type ==ENCODING:\n    self.encoding=token\n    continue\n   self.add_whitespace(start)\n   self.tokens.append(token)\n   self.prev_row,self.prev_col=end\n   if tok_type in (NEWLINE,NL):\n    self.prev_row +=1\n    self.prev_col=0\n  return\"\".join(self.tokens)\n  \n def compat(self,token,iterable):\n  startline=False\n  indents=[]\n  toks_append=self.tokens.append\n  toknum,tokval=token\n  \n  if toknum in (NAME,NUMBER):\n   tokval +=' '\n  if toknum in (NEWLINE,NL):\n   startline=True\n  prevstring=False\n  for tok in iterable:\n   toknum,tokval=tok[:2]\n   if toknum ==ENCODING:\n    self.encoding=tokval\n    continue\n    \n   if toknum in (NAME,NUMBER):\n    tokval +=' '\n    \n    \n   if toknum ==STRING:\n    if prevstring:\n     tokval=' '+tokval\n    prevstring=True\n   else :\n    prevstring=False\n    \n   if toknum ==INDENT:\n    indents.append(tokval)\n    continue\n   elif toknum ==DEDENT:\n    indents.pop()\n    continue\n   elif toknum in (NEWLINE,NL):\n    startline=True\n   elif startline and indents:\n    toks_append(indents[-1])\n    startline=False\n   toks_append(tokval)\n   \n   \ndef untokenize(iterable):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n ut=Untokenizer()\n out=ut.untokenize(iterable)\n if ut.encoding is not None :\n  out=out.encode(ut.encoding)\n return out\n \n \ndef _get_normal_name(orig_enc):\n ''\n \n enc=orig_enc[:12].lower().replace(\"_\",\"-\")\n if enc ==\"utf-8\"or enc.startswith(\"utf-8-\"):\n  return\"utf-8\"\n if enc in (\"latin-1\",\"iso-8859-1\",\"iso-latin-1\")or enc.startswith((\"latin-1-\",\"iso-8859-1-\",\"iso-latin-1-\")):\n  return\"iso-8859-1\"\n return orig_enc\n \ndef detect_encoding(readline):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n  filename=readline.__self__.name\n except AttributeError:\n  filename=None\n bom_found=False\n encoding=None\n default='utf-8'\n def read_or_stop():\n  try :\n   return readline()\n  except StopIteration:\n   return b''\n   \n def find_cookie(line):\n  try :\n  \n  \n  \n   line_string=line.decode('utf-8')\n  except UnicodeDecodeError:\n   msg=\"invalid or missing encoding declaration\"\n   if filename is not None :\n    msg='{} for {!r}'.format(msg,filename)\n   raise SyntaxError(msg)\n   \n  match=cookie_re.match(line_string)\n  if not match:\n   return None\n  encoding=_get_normal_name(match.group(1))\n  try :\n   codec=lookup(encoding)\n  except LookupError:\n  \n   if filename is None :\n    msg=\"unknown encoding: \"+encoding\n   else :\n    msg=\"unknown encoding for {!r}: {}\".format(filename,\n    encoding)\n   raise SyntaxError(msg)\n   \n  if bom_found:\n   if encoding !='utf-8':\n   \n    if filename is None :\n     msg='encoding problem: utf-8'\n    else :\n     msg='encoding problem for {!r}: utf-8'.format(filename)\n    raise SyntaxError(msg)\n   encoding +='-sig'\n  return encoding\n  \n first=read_or_stop()\n if first.startswith(BOM_UTF8):\n  bom_found=True\n  first=first[3:]\n  default='utf-8-sig'\n if not first:\n  return default,[]\n  \n encoding=find_cookie(first)\n if encoding:\n  return encoding,[first]\n  \n second=read_or_stop()\n if not second:\n  return default,[first]\n  \n encoding=find_cookie(second)\n if encoding:\n  return encoding,[first,second]\n  \n return default,[first,second]\n \n \ndef open(filename):\n ''\n\n \n buffer=builtins.open(filename,'rb')\n encoding,lines=detect_encoding(buffer.readline)\n buffer.seek(0)\n text=TextIOWrapper(buffer,encoding,line_buffering=True )\n text.mode='r'\n return text\n \n \ndef tokenize(readline):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n from itertools import chain,repeat\n encoding,consumed=detect_encoding(readline)\n rl_gen=iter(readline,b\"\")\n empty=repeat(b\"\")\n return _tokenize(chain(consumed,rl_gen,empty).__next__,encoding)\n \n \ndef _tokenize(readline,encoding):\n lnum=parenlev=continued=0\n numchars='0123456789'\n contstr,needcont='',0\n contline=None\n indents=[0]\n \n if encoding is not None :\n  if encoding ==\"utf-8-sig\":\n  \n   encoding=\"utf-8\"\n  yield TokenInfo(ENCODING,encoding,(0,0),(0,0),'')\n while True :\n  try :\n   line=readline()\n  except StopIteration:\n   line=b''\n   \n  if encoding is not None :\n   line=line.decode(encoding)\n  lnum +=1\n  pos,max=0,len(line)\n  \n  if contstr:\n   if not line:\n    raise TokenError(\"EOF in multi-line string\",strstart)\n   endmatch=endprog.match(line)\n   if endmatch:\n    pos=end=endmatch.end(0)\n    yield TokenInfo(STRING,contstr+line[:end],\n    strstart,(lnum,end),contline+line)\n    contstr,needcont='',0\n    contline=None\n   elif needcont and line[-2:]!='\\\\\\n'and line[-3:]!='\\\\\\r\\n':\n    yield TokenInfo(ERRORTOKEN,contstr+line,\n    strstart,(lnum,len(line)),contline)\n    contstr=''\n    contline=None\n    continue\n   else :\n    contstr=contstr+line\n    contline=contline+line\n    continue\n    \n  elif parenlev ==0 and not continued:\n   if not line:break\n   column=0\n   while pos <max:\n    if line[pos]==' ':\n     column +=1\n    elif line[pos]=='\\t':\n     column=(column //tabsize+1)*tabsize\n    elif line[pos]=='\\f':\n     column=0\n    else :\n     break\n    pos +=1\n   if pos ==max:\n    break\n    \n   if line[pos]in'#\\r\\n':\n    if line[pos]=='#':\n     comment_token=line[pos:].rstrip('\\r\\n')\n     nl_pos=pos+len(comment_token)\n     yield TokenInfo(COMMENT,comment_token,\n     (lnum,pos),(lnum,pos+len(comment_token)),line)\n     yield TokenInfo(NL,line[nl_pos:],\n     (lnum,nl_pos),(lnum,len(line)),line)\n    else :\n     yield TokenInfo((NL,COMMENT)[line[pos]=='#'],line[pos:],\n     (lnum,pos),(lnum,len(line)),line)\n    continue\n    \n   if column >indents[-1]:\n    indents.append(column)\n    yield TokenInfo(INDENT,line[:pos],(lnum,0),(lnum,pos),line)\n   while column <indents[-1]:\n    if column not in indents:\n     raise IndentationError(\n     \"unindent does not match any outer indentation level\",\n     (\"<tokenize>\",lnum,pos,line))\n    indents=indents[:-1]\n    yield TokenInfo(DEDENT,'',(lnum,pos),(lnum,pos),line)\n    \n  else :\n   if not line:\n    raise TokenError(\"EOF in multi-line statement\",(lnum,0))\n   continued=0\n   \n  while pos <max:\n   pseudomatch=_compile(PseudoToken).match(line,pos)\n   if pseudomatch:\n    start,end=pseudomatch.span(1)\n    spos,epos,pos=(lnum,start),(lnum,end),end\n    if start ==end:\n     continue\n    token,initial=line[start:end],line[start]\n    \n    if (initial in numchars or\n    (initial =='.'and token !='.'and token !='...')):\n     yield TokenInfo(NUMBER,token,spos,epos,line)\n    elif initial in'\\r\\n':\n     yield TokenInfo(NL if parenlev >0 else NEWLINE,\n     token,spos,epos,line)\n    elif initial =='#':\n     assert not token.endswith(\"\\n\")\n     yield TokenInfo(COMMENT,token,spos,epos,line)\n    elif token in triple_quoted:\n     endprog=_compile(endpats[token])\n     endmatch=endprog.match(line,pos)\n     if endmatch:\n      pos=endmatch.end(0)\n      token=line[start:pos]\n      yield TokenInfo(STRING,token,spos,(lnum,pos),line)\n     else :\n      strstart=(lnum,start)\n      contstr=line[start:]\n      contline=line\n      break\n    elif initial in single_quoted or    token[:2]in single_quoted or    token[:3]in single_quoted:\n     if token[-1]=='\\n':\n      strstart=(lnum,start)\n      endprog=_compile(endpats[initial]or\n      endpats[token[1]]or\n      endpats[token[2]])\n      contstr,needcont=line[start:],1\n      contline=line\n      break\n     else :\n      yield TokenInfo(STRING,token,spos,epos,line)\n    elif initial.isidentifier():\n     yield TokenInfo(NAME,token,spos,epos,line)\n    elif initial =='\\\\':\n     continued=1\n    else :\n     if initial in'([{':\n      parenlev +=1\n     elif initial in')]}':\n      parenlev -=1\n     yield TokenInfo(OP,token,spos,epos,line)\n   else :\n    yield TokenInfo(ERRORTOKEN,line[pos],\n    (lnum,pos),(lnum,pos+1),line)\n    pos +=1\n    \n for indent in indents[1:]:\n  yield TokenInfo(DEDENT,'',(lnum,0),(lnum,0),'')\n yield TokenInfo(ENDMARKER,'',(lnum,0),(lnum,0),'')\n \n \n \n \ndef generate_tokens(readline):\n return _tokenize(readline,None )\n \ndef main():\n import argparse\n \n \n def perror(message):\n  print(message,file=sys.stderr)\n  \n def error(message,filename=None ,location=None ):\n  if location:\n   args=(filename,)+location+(message,)\n   perror(\"%s:%d:%d: error: %s\"%args)\n  elif filename:\n   perror(\"%s: error: %s\"%(filename,message))\n  else :\n   perror(\"error: %s\"%message)\n  sys.exit(1)\n  \n  \n parser=argparse.ArgumentParser(prog='python -m tokenize')\n parser.add_argument(dest='filename',nargs='?',\n metavar='filename.py',\n help='the file to tokenize; defaults to stdin')\n parser.add_argument('-e','--exact',dest='exact',action='store_true',\n help='display token names using the exact type')\n args=parser.parse_args()\n \n try :\n \n  if args.filename:\n   filename=args.filename\n   with builtins.open(filename,'rb')as f:\n    tokens=list(tokenize(f.readline))\n  else :\n   filename=\"<stdin>\"\n   tokens=_tokenize(sys.stdin.readline,None )\n   \n   \n  for token in tokens:\n   token_type=token.type\n   if args.exact:\n    token_type=token.exact_type\n   token_range=\"%d,%d-%d,%d:\"%(token.start+token.end)\n   print(\"%-20s%-15s%-15r\"%\n   (token_range,tok_name[token_type],token.string))\n except IndentationError as err:\n  line,column=err.args[1][1:3]\n  error(err.args[0],filename,(line,column))\n except TokenError as err:\n  line,column=err.args[1]\n  error(err.args[0],filename,(line,column))\n except SyntaxError as err:\n  error(err,filename)\n except IOError as err:\n  error(err)\n except KeyboardInterrupt:\n  print(\"interrupted\\n\")\n except Exception as err:\n  perror(\"unexpected error: %s\"%err)\n  raise\n  \nif __name__ ==\"__main__\":\n main()\n"], "xml.dom.minicompat": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"NodeList\",\"EmptyNodeList\",\"StringTypes\",\"defproperty\"]\n\nimport xml.dom\n\nStringTypes=(str,)\n\n\nclass NodeList(list):\n __slots__=()\n \n def item(self,index):\n  if 0 <=index <len(self):\n   return self[index]\n   \n def _get_length(self):\n  return len(self)\n  \n def _set_length(self,value):\n  raise xml.dom.NoModificationAllowedErr(\n  \"attempt to modify read-only attribute 'length'\")\n  \n length=property(_get_length,_set_length,\n doc=\"The number of nodes in the NodeList.\")\n \n def __getstate__(self):\n  return list(self)\n  \n def __setstate__(self,state):\n  self[:]=state\n  \n  \nclass EmptyNodeList(tuple):\n __slots__=()\n \n def __add__(self,other):\n  NL=NodeList()\n  NL.extend(other)\n  return NL\n  \n def __radd__(self,other):\n  NL=NodeList()\n  NL.extend(other)\n  return NL\n  \n def item(self,index):\n  return None\n  \n def _get_length(self):\n  return 0\n  \n def _set_length(self,value):\n  raise xml.dom.NoModificationAllowedErr(\n  \"attempt to modify read-only attribute 'length'\")\n  \n length=property(_get_length,_set_length,\n doc=\"The number of nodes in the NodeList.\")\n \n \ndef defproperty(klass,name,doc):\n get=getattr(klass,(\"_get_\"+name))\n def set(self,value,name=name):\n  raise xml.dom.NoModificationAllowedErr(\n  \"attempt to modify read-only attribute \"+repr(name))\n assert not hasattr(klass,\"_set_\"+name), \"expected not to find _set_\"+name\n prop=property(get,set,doc=doc)\n setattr(klass,name,prop)\n"], "encodings.mac_latin2": [".py", "''\n\n\n\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-latin2',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\u0100'\n'\\u0101'\n'\\xc9'\n'\\u0104'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\u0105'\n'\\u010c'\n'\\xe4'\n'\\u010d'\n'\\u0106'\n'\\u0107'\n'\\xe9'\n'\\u0179'\n'\\u017a'\n'\\u010e'\n'\\xed'\n'\\u010f'\n'\\u0112'\n'\\u0113'\n'\\u0116'\n'\\xf3'\n'\\u0117'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\u011a'\n'\\u011b'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\u0118'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\u0119'\n'\\xa8'\n'\\u2260'\n'\\u0123'\n'\\u012e'\n'\\u012f'\n'\\u012a'\n'\\u2264'\n'\\u2265'\n'\\u012b'\n'\\u0136'\n'\\u2202'\n'\\u2211'\n'\\u0142'\n'\\u013b'\n'\\u013c'\n'\\u013d'\n'\\u013e'\n'\\u0139'\n'\\u013a'\n'\\u0145'\n'\\u0146'\n'\\u0143'\n'\\xac'\n'\\u221a'\n'\\u0144'\n'\\u0147'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u0148'\n'\\u0150'\n'\\xd5'\n'\\u0151'\n'\\u014c'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\u014d'\n'\\u0154'\n'\\u0155'\n'\\u0158'\n'\\u2039'\n'\\u203a'\n'\\u0159'\n'\\u0156'\n'\\u0157'\n'\\u0160'\n'\\u201a'\n'\\u201e'\n'\\u0161'\n'\\u015a'\n'\\u015b'\n'\\xc1'\n'\\u0164'\n'\\u0165'\n'\\xcd'\n'\\u017d'\n'\\u017e'\n'\\u016a'\n'\\xd3'\n'\\xd4'\n'\\u016b'\n'\\u016e'\n'\\xda'\n'\\u016f'\n'\\u0170'\n'\\u0171'\n'\\u0172'\n'\\u0173'\n'\\xdd'\n'\\xfd'\n'\\u0137'\n'\\u017b'\n'\\u0141'\n'\\u017c'\n'\\u0122'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_multiprocessing": [".js", "// multiprocessing\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +'=_b_[\"'+$b+'\"]')\neval($s.join(';'))\n\n//for(var $py_builtin in _b_){eval(\"var \"+$py_builtin+\"=_b_[$py_builtin]\")}\n\nvar $ProcessDict = {__class__:$B.$type,__name__:'Process'}\n\nvar $convert_args=function(args) {\n    var _list=[]\n    for(var i=0, _len_i = args.length; i < _len_i; i++) {\n      var _a=args[i]\n      if(isinstance(_a, str)){_list.push(\"'\"+_a+\"'\")} else {_list.push(_a)} \n    }\n\n    return _list.join(',')\n}\n\n$ProcessDict.__mro__ = [$ProcessDict, _b_.object.$dict]\n\n$ProcessDict.__str__=$ProcessDict.toString=$ProcessDict.__repr__=function(self){\n   return '<object Process>'\n}\n\n$ProcessDict.is_alive = function(self){return self.$alive}\n\n$ProcessDict.join = function(self, timeout){\n   // need to block until process is complete\n   // could probably use a addEventListener to execute all existing code\n   // after this join statement\n\n   self.$worker.addEventListener('message', function (e) {\n        var data=e.data\n        if (data.stdout != '') { // output stdout from process\n           $B.stdout.write(data.stdout)\n        }\n   }, false);\n}\n\n$ProcessDict.run = function(self){\n   //fix me\n}\n\n$ProcessDict.start = function(self){\n   //var _args=[]\n   //for(var i=0; i < self.$args.length; i++) {\n   //   var _a=self.$args[i]\n   //   if(isinstance(_a, str)){_args.push(\"'\"+_a+\"'\")} else {_args.push(_a)} \n   //}\n\n   self.$worker.postMessage({target: self.$target, \n                             args: $convert_args(self.$args),\n                          //   kwargs: self.$kwargs\n                           })\n   self.$worker.addEventListener('error', function(e) { throw e})\n   self.$alive=true\n}\n\n$ProcessDict.terminate = function(self){\n   self.$worker.terminate()\n   self.$alive=false\n}\n\n// variables\n//name\n//daemon\n//pid\n//exitcode\n\nfunction Process(){\n    //arguments group=None, target=None, name=None, args=(), kwargs=()\n\n    var $ns=$B.args('Process',0,{},[],arguments,{},null,'kw')\n    var kw=$ns['kw']\n\n    var target=_b_.dict.$dict.get($ns['kw'],'target',None)\n    var args=_b_.dict.$dict.get($ns['kw'],'args',tuple())\n\n    var worker = new Worker('/src/web_workers/multiprocessing.js')\n\n    var res = {\n        __class__:$ProcessDict,\n        $worker: worker,\n        name: $ns['name'] || None,\n        $target: target+'',\n        $args: args,\n        //$kwargs: $ns['kw'],\n        $alive: false\n    }\n    return res\n}\n\nProcess.__class__ = $B.$factory\nProcess.$dict = $ProcessDict\n\n\nvar $PoolDict = {__class__:$B.$type,__name__:'Pool'}\n\n$PoolDict.__mro__ = [$PoolDict, _b_.object.$dict]\n\n$PoolDict.__enter__ = function(self){}\n$PoolDict.__exit__ = function(self){}\n\n$PoolDict.__str__ = $PoolDict.toString = $PoolDict.__repr__=function(self){\n   return '<object Pool>'\n}\n\n$PoolDict.map = function(){\n\n   var $ns=$B.args('Pool.map', 3,\n       {self:null, func:null, fargs:null}, ['self', 'func', 'fargs'],\n       arguments,{},'args','kw')\n   var func=$ns['func']\n   var fargs=$ns['fargs']\n\n   var _results=[]\n\n   fargs=iter(fargs)\n\n   var _pos=0\n   console.log(self.$processes)\n   _workers=[]\n   for(var i=0; i < self.$processes; i++) {\n       _workers[i] = new Worker('/src/web_workers/multiprocessing.js')\n       var arg\n\n       try{arg=getattr(fargs, '__next__')()} \n       catch(err) {\n          if (err.__name__ != 'StopIteration') throw err\n       }\n       console.log(arg)\n       _workers[i].finished=false\n       _workers[i].postMessage({target: func+'', pos: _pos,\n                             args: $convert_args([arg])})\n       _pos++\n\n       _workers[i].addEventListener('message', function(e) {\n           _results[e.data.pos]=e.data.result\n           if (_results.length == args.length) return _results\n\n           try {\n               arg=getattr(fargs, '__next__')()\n               e.currentTarget.postMessage({target: func+'', pos: _pos,\n                                            args: $convert_args([arg])})\n               _pos++\n           } catch(err) {\n               if (err.__name__ != 'StopIteration') throw err\n               this.finished=true\n           }\n       }, false);\n   }\n}\n\n$PoolDict.apply_async = function(){\n\n   var $ns=$B.$MakeArgs('apply_async', 3, \n       {self:null, func:null, fargs:null}, ['self', 'func', 'fargs'],\n       arguments,{},'args','kw')\n   var func=$ns['func']\n   var fargs=$ns['fargs']\n\n   fargs=iter(fargs)\n\n   async_result = {}\n   async_result.get=function(timeout){\n                      console.log(results)\n                      console.log(fargs)\n                      return this.results}\n   async_result.results=[]\n\n   var _pos=0\n\n   _workers=[]\n   for(var i=0; i < self.$processes; i++) {\n       _workers[i] = new Worker('/src/web_workers/multiprocessing.js')\n       var arg\n\n       try{arg=getattr(fargs, '__next__')()} \n       catch(err) {\n          if (err.__name__ != 'StopIteration') throw err\n       }\n       //console.log(arg)\n       //_workers[i].finished=false\n       _workers[i].postMessage({target: func+'', pos: _pos,\n                             args: $convert_args([arg])})\n       _pos++\n\n       _workers[i].addEventListener('message', function(e) {\n           async_result.results[e.data.pos]=e.data.result\n           //if (_results.length == args.length) return _results\n\n           try {\n               arg=getattr(fargs, '__next__')()\n               e.currentTarget.postMessage({target: func+'', pos: _pos,\n                                            args: $convert_args([arg])})\n               _pos++\n           } catch(err) {\n               if (err.__name__ != 'StopIteration') throw err\n               this.finished=true\n           }\n       }, false);\n   }\n\n   console.log(\"return\", async_result)\n   return async_result\n}\n\nfunction Pool(){\n    console.log(\"pool\")\n    console.log(arguments)\n    var $ns=$B.args('Pool',1,\n        {processes:null},['processes'],arguments,{},'args','kw')\n    //var kw=$ns['kw']\n\n    var processes=$ns['processes']\n\n    if (processes == None) {\n       // look to see if we have stored cpu_count in local storage\n       // maybe we should create a brython config file with settings,etc..??\n\n       // if not there use a tool such as Core Estimator to calculate number of cpu's\n       // http://eligrey.com/blog/post/cpu-core-estimation-with-javascript\n    }\n\n    console.log(processes)\n    var res = {\n        __class__:$PoolDict,\n        $processes:processes\n    }\n    return res\n}\n\nPool.__class__ = $B.$factory\nPool.$dict = $PoolDict\n\nreturn {Process:Process, Pool:Pool}\n\n})(__BRYTHON__)\n"], "argparse": [".py", "\n\n\"\"\"Command-line parsing library\n\nThis module is an optparse-inspired command-line parsing library that:\n\n    - handles both optional and positional arguments\n    - produces highly informative usage messages\n    - supports parsers that dispatch to sub-parsers\n\nThe following is a simple usage example that sums integers from the\ncommand-line and writes the result to a file::\n\n    parser = argparse.ArgumentParser(\n        description='sum the integers at the command line')\n    parser.add_argument(\n        'integers', metavar='int', nargs='+', type=int,\n        help='an integer to be summed')\n    parser.add_argument(\n        '--log', default=sys.stdout, type=argparse.FileType('w'),\n        help='the file where the sum should be written')\n    args = parser.parse_args()\n    args.log.write('%s' % sum(args.integers))\n    args.log.close()\n\nThe module contains the following public classes:\n\n    - ArgumentParser -- The main entry point for command-line parsing. As the\n        example above shows, the add_argument() method is used to populate\n        the parser with actions for optional and positional arguments. Then\n        the parse_args() method is invoked to convert the args at the\n        command-line into an object with attributes.\n\n    - ArgumentError -- The exception raised by ArgumentParser objects when\n        there are errors with the parser's actions. Errors raised while\n        parsing the command-line are caught by ArgumentParser and emitted\n        as command-line messages.\n\n    - FileType -- A factory for defining types of files to be created. As the\n        example above shows, instances of FileType are typically passed as\n        the type= argument of add_argument() calls.\n\n    - Action -- The base class for parser actions. Typically actions are\n        selected by passing strings like 'store_true' or 'append_const' to\n        the action= argument of add_argument(). However, for greater\n        customization of ArgumentParser actions, subclasses of Action may\n        be defined and passed as the action= argument.\n\n    - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,\n        ArgumentDefaultsHelpFormatter -- Formatter classes which\n        may be passed as the formatter_class= argument to the\n        ArgumentParser constructor. HelpFormatter is the default,\n        RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser\n        not to change the formatting for help text, and\n        ArgumentDefaultsHelpFormatter adds information about argument defaults\n        to the help.\n\nAll other classes in this module are considered implementation details.\n(Also note that HelpFormatter and RawDescriptionHelpFormatter are only\nconsidered public as object names -- the API of the formatter objects is\nstill considered an implementation detail.)\n\"\"\"\n\n__version__='1.1'\n__all__=[\n'ArgumentParser',\n'ArgumentError',\n'ArgumentTypeError',\n'FileType',\n'HelpFormatter',\n'ArgumentDefaultsHelpFormatter',\n'RawDescriptionHelpFormatter',\n'RawTextHelpFormatter',\n'MetavarTypeHelpFormatter',\n'Namespace',\n'Action',\n'ONE_OR_MORE',\n'OPTIONAL',\n'PARSER',\n'REMAINDER',\n'SUPPRESS',\n'ZERO_OR_MORE',\n]\n\n\nimport collections as _collections\nimport copy as _copy\nimport os as _os\nimport re as _re\nimport sys as _sys\nimport textwrap as _textwrap\n\nfrom gettext import gettext as _,ngettext\n\n\nSUPPRESS='==SUPPRESS=='\n\nOPTIONAL='?'\nZERO_OR_MORE='*'\nONE_OR_MORE='+'\nPARSER='A...'\nREMAINDER='...'\n_UNRECOGNIZED_ARGS_ATTR='_unrecognized_args'\n\n\n\n\n\nclass _AttributeHolder(object):\n ''\n\n\n\n\n\n \n \n def __repr__(self):\n  type_name=type(self).__name__\n  arg_strings=[]\n  for arg in self._get_args():\n   arg_strings.append(repr(arg))\n  for name,value in self._get_kwargs():\n   arg_strings.append('%s=%r'%(name,value))\n  return'%s(%s)'%(type_name,', '.join(arg_strings))\n  \n def _get_kwargs(self):\n  return sorted(self.__dict__.items())\n  \n def _get_args(self):\n  return []\n  \n  \ndef _ensure_value(namespace,name,value):\n if getattr(namespace,name,None )is None :\n  setattr(namespace,name,value)\n return getattr(namespace,name)\n \n \n \n \n \n \nclass HelpFormatter(object):\n ''\n\n\n\n \n \n def __init__(self,\n prog,\n indent_increment=2,\n max_help_position=24,\n width=None ):\n \n \n  if width is None :\n   try :\n    width=int(_os.environ['COLUMNS'])\n   except (KeyError,ValueError):\n    width=80\n   width -=2\n   \n  self._prog=prog\n  self._indent_increment=indent_increment\n  self._max_help_position=max_help_position\n  self._max_help_position=min(max_help_position,\n  max(width -20,indent_increment *2))\n  self._width=width\n  \n  self._current_indent=0\n  self._level=0\n  self._action_max_length=0\n  \n  self._root_section=self._Section(self,None )\n  self._current_section=self._root_section\n  \n  self._whitespace_matcher=_re.compile(r'\\s+')\n  self._long_break_matcher=_re.compile(r'\\n\\n\\n+')\n  \n  \n  \n  \n def _indent(self):\n  self._current_indent +=self._indent_increment\n  self._level +=1\n  \n def _dedent(self):\n  self._current_indent -=self._indent_increment\n  assert self._current_indent >=0,'Indent decreased below 0.'\n  self._level -=1\n  \n class _Section(object):\n \n  def __init__(self,formatter,parent,heading=None ):\n   self.formatter=formatter\n   self.parent=parent\n   self.heading=heading\n   self.items=[]\n   \n  def format_help(self):\n  \n   if self.parent is not None :\n    self.formatter._indent()\n   join=self.formatter._join_parts\n   for func,args in self.items:\n    func(*args)\n   item_help=join([func(*args)for func,args in self.items])\n   if self.parent is not None :\n    self.formatter._dedent()\n    \n    \n   if not item_help:\n    return''\n    \n    \n   if self.heading is not SUPPRESS and self.heading is not None :\n    current_indent=self.formatter._current_indent\n    heading='%*s%s:\\n'%(current_indent,'',self.heading)\n   else :\n    heading=''\n    \n    \n   return join(['\\n',heading,item_help,'\\n'])\n   \n def _add_item(self,func,args):\n  self._current_section.items.append((func,args))\n  \n  \n  \n  \n def start_section(self,heading):\n  self._indent()\n  section=self._Section(self,self._current_section,heading)\n  self._add_item(section.format_help,[])\n  self._current_section=section\n  \n def end_section(self):\n  self._current_section=self._current_section.parent\n  self._dedent()\n  \n def add_text(self,text):\n  if text is not SUPPRESS and text is not None :\n   self._add_item(self._format_text,[text])\n   \n def add_usage(self,usage,actions,groups,prefix=None ):\n  if usage is not SUPPRESS:\n   args=usage,actions,groups,prefix\n   self._add_item(self._format_usage,args)\n   \n def add_argument(self,action):\n  if action.help is not SUPPRESS:\n  \n  \n   get_invocation=self._format_action_invocation\n   invocations=[get_invocation(action)]\n   for subaction in self._iter_indented_subactions(action):\n    invocations.append(get_invocation(subaction))\n    \n    \n   invocation_length=max([len(s)for s in invocations])\n   action_length=invocation_length+self._current_indent\n   self._action_max_length=max(self._action_max_length,\n   action_length)\n   \n   \n   self._add_item(self._format_action,[action])\n   \n def add_arguments(self,actions):\n  for action in actions:\n   self.add_argument(action)\n   \n   \n   \n   \n def format_help(self):\n  help=self._root_section.format_help()\n  if help:\n   help=self._long_break_matcher.sub('\\n\\n',help)\n   help=help.strip('\\n')+'\\n'\n  return help\n  \n def _join_parts(self,part_strings):\n  return''.join([part\n  for part in part_strings\n  if part and part is not SUPPRESS])\n  \n def _format_usage(self,usage,actions,groups,prefix):\n  if prefix is None :\n   prefix=_('usage: ')\n   \n   \n  if usage is not None :\n   usage=usage %dict(prog=self._prog)\n   \n   \n  elif usage is None and not actions:\n   usage='%(prog)s'%dict(prog=self._prog)\n   \n   \n  elif usage is None :\n   prog='%(prog)s'%dict(prog=self._prog)\n   \n   \n   optionals=[]\n   positionals=[]\n   for action in actions:\n    if action.option_strings:\n     optionals.append(action)\n    else :\n     positionals.append(action)\n     \n     \n   format=self._format_actions_usage\n   action_usage=format(optionals+positionals,groups)\n   usage=' '.join([s for s in [prog,action_usage]if s])\n   \n   \n   text_width=self._width -self._current_indent\n   if len(prefix)+len(usage)>text_width:\n   \n   \n    part_regexp=r'\\(.*?\\)+|\\[.*?\\]+|\\S+'\n    opt_usage=format(optionals,groups)\n    pos_usage=format(positionals,groups)\n    opt_parts=_re.findall(part_regexp,opt_usage)\n    pos_parts=_re.findall(part_regexp,pos_usage)\n    assert' '.join(opt_parts)==opt_usage\n    assert' '.join(pos_parts)==pos_usage\n    \n    \n    def get_lines(parts,indent,prefix=None ):\n     lines=[]\n     line=[]\n     if prefix is not None :\n      line_len=len(prefix)-1\n     else :\n      line_len=len(indent)-1\n     for part in parts:\n      if line_len+1+len(part)>text_width and line:\n       lines.append(indent+' '.join(line))\n       line=[]\n       line_len=len(indent)-1\n      line.append(part)\n      line_len +=len(part)+1\n     if line:\n      lines.append(indent+' '.join(line))\n     if prefix is not None :\n      lines[0]=lines[0][len(indent):]\n     return lines\n     \n     \n    if len(prefix)+len(prog)<=0.75 *text_width:\n     indent=' '*(len(prefix)+len(prog)+1)\n     if opt_parts:\n      lines=get_lines([prog]+opt_parts,indent,prefix)\n      lines.extend(get_lines(pos_parts,indent))\n     elif pos_parts:\n      lines=get_lines([prog]+pos_parts,indent,prefix)\n     else :\n      lines=[prog]\n      \n      \n    else :\n     indent=' '*len(prefix)\n     parts=opt_parts+pos_parts\n     lines=get_lines(parts,indent)\n     if len(lines)>1:\n      lines=[]\n      lines.extend(get_lines(opt_parts,indent))\n      lines.extend(get_lines(pos_parts,indent))\n     lines=[prog]+lines\n     \n     \n    usage='\\n'.join(lines)\n    \n    \n  return'%s%s\\n\\n'%(prefix,usage)\n  \n def _format_actions_usage(self,actions,groups):\n \n  group_actions=set()\n  inserts={}\n  for group in groups:\n   try :\n    start=actions.index(group._group_actions[0])\n   except ValueError:\n    continue\n   else :\n    end=start+len(group._group_actions)\n    if actions[start:end]==group._group_actions:\n     for action in group._group_actions:\n      group_actions.add(action)\n     if not group.required:\n      if start in inserts:\n       inserts[start]+=' ['\n      else :\n       inserts[start]='['\n      inserts[end]=']'\n     else :\n      if start in inserts:\n       inserts[start]+=' ('\n      else :\n       inserts[start]='('\n      inserts[end]=')'\n     for i in range(start+1,end):\n      inserts[i]='|'\n      \n      \n  parts=[]\n  for i,action in enumerate(actions):\n  \n  \n  \n   if action.help is SUPPRESS:\n    parts.append(None )\n    if inserts.get(i)=='|':\n     inserts.pop(i)\n    elif inserts.get(i+1)=='|':\n     inserts.pop(i+1)\n     \n     \n   elif not action.option_strings:\n    default=self._get_default_metavar_for_positional(action)\n    part=self._format_args(action,default)\n    \n    \n    if action in group_actions:\n     if part[0]=='['and part[-1]==']':\n      part=part[1:-1]\n      \n      \n    parts.append(part)\n    \n    \n   else :\n    option_string=action.option_strings[0]\n    \n    \n    \n    if action.nargs ==0:\n     part='%s'%option_string\n     \n     \n     \n    else :\n     default=self._get_default_metavar_for_optional(action)\n     args_string=self._format_args(action,default)\n     part='%s %s'%(option_string,args_string)\n     \n     \n    if not action.required and action not in group_actions:\n     part='[%s]'%part\n     \n     \n    parts.append(part)\n    \n    \n  for i in sorted(inserts,reverse=True ):\n   parts[i:i]=[inserts[i]]\n   \n   \n  text=' '.join([item for item in parts if item is not None ])\n  \n  \n  open=r'[\\[(]'\n  close=r'[\\])]'\n  text=_re.sub(r'(%s) '%open,r'\\1',text)\n  text=_re.sub(r' (%s)'%close,r'\\1',text)\n  text=_re.sub(r'%s *%s'%(open,close),r'',text)\n  text=_re.sub(r'\\(([^|]*)\\)',r'\\1',text)\n  text=text.strip()\n  \n  \n  return text\n  \n def _format_text(self,text):\n  if'%(prog)'in text:\n   text=text %dict(prog=self._prog)\n  text_width=max(self._width -self._current_indent,11)\n  indent=' '*self._current_indent\n  return self._fill_text(text,text_width,indent)+'\\n\\n'\n  \n def _format_action(self,action):\n \n  help_position=min(self._action_max_length+2,\n  self._max_help_position)\n  help_width=max(self._width -help_position,11)\n  action_width=help_position -self._current_indent -2\n  action_header=self._format_action_invocation(action)\n  \n  \n  if not action.help:\n   tup=self._current_indent,'',action_header\n   action_header='%*s%s\\n'%tup\n   \n   \n  elif len(action_header)<=action_width:\n   tup=self._current_indent,'',action_width,action_header\n   action_header='%*s%-*s  '%tup\n   indent_first=0\n   \n   \n  else :\n   tup=self._current_indent,'',action_header\n   action_header='%*s%s\\n'%tup\n   indent_first=help_position\n   \n   \n  parts=[action_header]\n  \n  \n  if action.help:\n   help_text=self._expand_help(action)\n   help_lines=self._split_lines(help_text,help_width)\n   parts.append('%*s%s\\n'%(indent_first,'',help_lines[0]))\n   for line in help_lines[1:]:\n    parts.append('%*s%s\\n'%(help_position,'',line))\n    \n    \n  elif not action_header.endswith('\\n'):\n   parts.append('\\n')\n   \n   \n  for subaction in self._iter_indented_subactions(action):\n   parts.append(self._format_action(subaction))\n   \n   \n  return self._join_parts(parts)\n  \n def _format_action_invocation(self,action):\n  if not action.option_strings:\n   default=self._get_default_metavar_for_positional(action)\n   metavar,=self._metavar_formatter(action,default)(1)\n   return metavar\n   \n  else :\n   parts=[]\n   \n   \n   \n   if action.nargs ==0:\n    parts.extend(action.option_strings)\n    \n    \n    \n   else :\n    default=self._get_default_metavar_for_optional(action)\n    args_string=self._format_args(action,default)\n    for option_string in action.option_strings:\n     parts.append('%s %s'%(option_string,args_string))\n     \n   return', '.join(parts)\n   \n def _metavar_formatter(self,action,default_metavar):\n  if action.metavar is not None :\n   result=action.metavar\n  elif action.choices is not None :\n   choice_strs=[str(choice)for choice in action.choices]\n   result='{%s}'%','.join(choice_strs)\n  else :\n   result=default_metavar\n   \n  def format(tuple_size):\n   if isinstance(result,tuple):\n    return result\n   else :\n    return (result,)*tuple_size\n  return format\n  \n def _format_args(self,action,default_metavar):\n  get_metavar=self._metavar_formatter(action,default_metavar)\n  if action.nargs is None :\n   result='%s'%get_metavar(1)\n  elif action.nargs ==OPTIONAL:\n   result='[%s]'%get_metavar(1)\n  elif action.nargs ==ZERO_OR_MORE:\n   result='[%s [%s ...]]'%get_metavar(2)\n  elif action.nargs ==ONE_OR_MORE:\n   result='%s [%s ...]'%get_metavar(2)\n  elif action.nargs ==REMAINDER:\n   result='...'\n  elif action.nargs ==PARSER:\n   result='%s ...'%get_metavar(1)\n  else :\n   formats=['%s'for _ in range(action.nargs)]\n   result=' '.join(formats)%get_metavar(action.nargs)\n  return result\n  \n def _expand_help(self,action):\n  params=dict(vars(action),prog=self._prog)\n  for name in list(params):\n   if params[name]is SUPPRESS:\n    del params[name]\n  for name in list(params):\n   if hasattr(params[name],'__name__'):\n    params[name]=params[name].__name__\n  if params.get('choices')is not None :\n   choices_str=', '.join([str(c)for c in params['choices']])\n   params['choices']=choices_str\n  return self._get_help_string(action)%params\n  \n def _iter_indented_subactions(self,action):\n  try :\n   get_subactions=action._get_subactions\n  except AttributeError:\n   pass\n  else :\n   self._indent()\n   yield from get_subactions()\n   self._dedent()\n   \n def _split_lines(self,text,width):\n  text=self._whitespace_matcher.sub(' ',text).strip()\n  return _textwrap.wrap(text,width)\n  \n def _fill_text(self,text,width,indent):\n  text=self._whitespace_matcher.sub(' ',text).strip()\n  return _textwrap.fill(text,width,initial_indent=indent,\n  subsequent_indent=indent)\n  \n def _get_help_string(self,action):\n  return action.help\n  \n def _get_default_metavar_for_optional(self,action):\n  return action.dest.upper()\n  \n def _get_default_metavar_for_positional(self,action):\n  return action.dest\n  \n  \nclass RawDescriptionHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _fill_text(self,text,width,indent):\n  return''.join(indent+line for line in text.splitlines(keepends=True ))\n  \n  \nclass RawTextHelpFormatter(RawDescriptionHelpFormatter):\n ''\n\n\n\n \n \n def _split_lines(self,text,width):\n  return text.splitlines()\n  \n  \nclass ArgumentDefaultsHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _get_help_string(self,action):\n  help=action.help\n  if'%(default)'not in action.help:\n   if action.default is not SUPPRESS:\n    defaulting_nargs=[OPTIONAL,ZERO_OR_MORE]\n    if action.option_strings or action.nargs in defaulting_nargs:\n     help +=' (default: %(default)s)'\n  return help\n  \n  \nclass MetavarTypeHelpFormatter(HelpFormatter):\n ''\n\n\n\n\n \n \n def _get_default_metavar_for_optional(self,action):\n  return action.type.__name__\n  \n def _get_default_metavar_for_positional(self,action):\n  return action.type.__name__\n  \n  \n  \n  \n  \n  \n  \ndef _get_action_name(argument):\n if argument is None :\n  return None\n elif argument.option_strings:\n  return'/'.join(argument.option_strings)\n elif argument.metavar not in (None ,SUPPRESS):\n  return argument.metavar\n elif argument.dest not in (None ,SUPPRESS):\n  return argument.dest\n else :\n  return None\n  \n  \nclass ArgumentError(Exception):\n ''\n\n\n\n \n \n def __init__(self,argument,message):\n  self.argument_name=_get_action_name(argument)\n  self.message=message\n  \n def __str__(self):\n  if self.argument_name is None :\n   format='%(message)s'\n  else :\n   format='argument %(argument_name)s: %(message)s'\n  return format %dict(message=self.message,\n  argument_name=self.argument_name)\n  \n  \nclass ArgumentTypeError(Exception):\n ''\n pass\n \n \n \n \n \n \nclass Action(_AttributeHolder):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n  self.option_strings=option_strings\n  self.dest=dest\n  self.nargs=nargs\n  self.const=const\n  self.default=default\n  self.type=type\n  self.choices=choices\n  self.required=required\n  self.help=help\n  self.metavar=metavar\n  \n def _get_kwargs(self):\n  names=[\n  'option_strings',\n  'dest',\n  'nargs',\n  'const',\n  'default',\n  'type',\n  'choices',\n  'help',\n  'metavar',\n  ]\n  return [(name,getattr(self,name))for name in names]\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  raise NotImplementedError(_('.__call__() not defined'))\n  \n  \nclass _StoreAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n  if nargs ==0:\n   raise ValueError('nargs for store actions must be > 0; if you '\n   'have nothing to store, actions such as store '\n   'true or store const may be more appropriate')\n  if const is not None and nargs !=OPTIONAL:\n   raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n  super(_StoreAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  nargs=nargs,\n  const=const,\n  default=default,\n  type=type,\n  choices=choices,\n  required=required,\n  help=help,\n  metavar=metavar)\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  setattr(namespace,self.dest,values)\n  \n  \nclass _StoreConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n  super(_StoreConstAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  nargs=0,\n  const=const,\n  default=default,\n  required=required,\n  help=help)\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  setattr(namespace,self.dest,self.const)\n  \n  \nclass _StoreTrueAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=False ,\n required=False ,\n help=None ):\n  super(_StoreTrueAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  const=True ,\n  default=default,\n  required=required,\n  help=help)\n  \n  \nclass _StoreFalseAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=True ,\n required=False ,\n help=None ):\n  super(_StoreFalseAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  const=False ,\n  default=default,\n  required=required,\n  help=help)\n  \n  \nclass _AppendAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n  if nargs ==0:\n   raise ValueError('nargs for append actions must be > 0; if arg '\n   'strings are not supplying the value to append, '\n   'the append const action may be more appropriate')\n  if const is not None and nargs !=OPTIONAL:\n   raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n  super(_AppendAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  nargs=nargs,\n  const=const,\n  default=default,\n  type=type,\n  choices=choices,\n  required=required,\n  help=help,\n  metavar=metavar)\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  items=_copy.copy(_ensure_value(namespace,self.dest,[]))\n  items.append(values)\n  setattr(namespace,self.dest,items)\n  \n  \nclass _AppendConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n  super(_AppendConstAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  nargs=0,\n  const=const,\n  default=default,\n  required=required,\n  help=help,\n  metavar=metavar)\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  items=_copy.copy(_ensure_value(namespace,self.dest,[]))\n  items.append(self.const)\n  setattr(namespace,self.dest,items)\n  \n  \nclass _CountAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n default=None ,\n required=False ,\n help=None ):\n  super(_CountAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  nargs=0,\n  default=default,\n  required=required,\n  help=help)\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  new_count=_ensure_value(namespace,self.dest,0)+1\n  setattr(namespace,self.dest,new_count)\n  \n  \nclass _HelpAction(Action):\n\n def __init__(self,\n option_strings,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=None ):\n  super(_HelpAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  default=default,\n  nargs=0,\n  help=help)\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  parser.print_help()\n  parser.exit()\n  \n  \nclass _VersionAction(Action):\n\n def __init__(self,\n option_strings,\n version=None ,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=\"show program's version number and exit\"):\n  super(_VersionAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  default=default,\n  nargs=0,\n  help=help)\n  self.version=version\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  version=self.version\n  if version is None :\n   version=parser.version\n  formatter=parser._get_formatter()\n  formatter.add_text(version)\n  parser._print_message(formatter.format_help(),_sys.stdout)\n  parser.exit()\n  \n  \nclass _SubParsersAction(Action):\n\n class _ChoicesPseudoAction(Action):\n \n  def __init__(self,name,aliases,help):\n   metavar=dest=name\n   if aliases:\n    metavar +=' (%s)'%', '.join(aliases)\n   sup=super(_SubParsersAction._ChoicesPseudoAction,self)\n   sup.__init__(option_strings=[],dest=dest,help=help,\n   metavar=metavar)\n   \n def __init__(self,\n option_strings,\n prog,\n parser_class,\n dest=SUPPRESS,\n help=None ,\n metavar=None ):\n \n  self._prog_prefix=prog\n  self._parser_class=parser_class\n  self._name_parser_map=_collections.OrderedDict()\n  self._choices_actions=[]\n  \n  super(_SubParsersAction,self).__init__(\n  option_strings=option_strings,\n  dest=dest,\n  nargs=PARSER,\n  choices=self._name_parser_map,\n  help=help,\n  metavar=metavar)\n  \n def add_parser(self,name,**kwargs):\n \n  if kwargs.get('prog')is None :\n   kwargs['prog']='%s %s'%(self._prog_prefix,name)\n   \n  aliases=kwargs.pop('aliases',())\n  \n  \n  if'help'in kwargs:\n   help=kwargs.pop('help')\n   choice_action=self._ChoicesPseudoAction(name,aliases,help)\n   self._choices_actions.append(choice_action)\n   \n   \n  parser=self._parser_class(**kwargs)\n  self._name_parser_map[name]=parser\n  \n  \n  for alias in aliases:\n   self._name_parser_map[alias]=parser\n   \n  return parser\n  \n def _get_subactions(self):\n  return self._choices_actions\n  \n def __call__(self,parser,namespace,values,option_string=None ):\n  parser_name=values[0]\n  arg_strings=values[1:]\n  \n  \n  if self.dest is not SUPPRESS:\n   setattr(namespace,self.dest,parser_name)\n   \n   \n  try :\n   parser=self._name_parser_map[parser_name]\n  except KeyError:\n   args={'parser_name':parser_name,\n   'choices':', '.join(self._name_parser_map)}\n   msg=_('unknown parser %(parser_name)r (choices: %(choices)s)')%args\n   raise ArgumentError(self,msg)\n   \n   \n   \n   \n   \n   \n   \n   \n  subnamespace,arg_strings=parser.parse_known_args(arg_strings,None )\n  for key,value in vars(subnamespace).items():\n   setattr(namespace,key,value)\n   \n  if arg_strings:\n   vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR,[])\n   getattr(namespace,_UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)\n   \n   \n   \n   \n   \n   \nclass FileType(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,mode='r',bufsize=-1,encoding=None ,errors=None ):\n  self._mode=mode\n  self._bufsize=bufsize\n  self._encoding=encoding\n  self._errors=errors\n  \n def __call__(self,string):\n \n  if string =='-':\n   if'r'in self._mode:\n    return _sys.stdin\n   elif'w'in self._mode:\n    return _sys.stdout\n   else :\n    msg=_('argument \"-\" with mode %r')%self._mode\n    raise ValueError(msg)\n    \n    \n  try :\n   return open(string,self._mode,self._bufsize,self._encoding,\n   self._errors)\n  except OSError as e:\n   message=_(\"can't open '%s': %s\")\n   raise ArgumentTypeError(message %(string,e))\n   \n def __repr__(self):\n  args=self._mode,self._bufsize\n  kwargs=[('encoding',self._encoding),('errors',self._errors)]\n  args_str=', '.join([repr(arg)for arg in args if arg !=-1]+\n  ['%s=%r'%(kw,arg)for kw,arg in kwargs\n  if arg is not None ])\n  return'%s(%s)'%(type(self).__name__,args_str)\n  \n  \n  \n  \n  \nclass Namespace(_AttributeHolder):\n ''\n\n\n\n \n \n def __init__(self,**kwargs):\n  for name in kwargs:\n   setattr(self,name,kwargs[name])\n   \n def __eq__(self,other):\n  if not isinstance(other,Namespace):\n   return NotImplemented\n  return vars(self)==vars(other)\n  \n def __ne__(self,other):\n  if not isinstance(other,Namespace):\n   return NotImplemented\n  return not (self ==other)\n  \n def __contains__(self,key):\n  return key in self.__dict__\n  \n  \nclass _ActionsContainer(object):\n\n def __init__(self,\n description,\n prefix_chars,\n argument_default,\n conflict_handler):\n  super(_ActionsContainer,self).__init__()\n  \n  self.description=description\n  self.argument_default=argument_default\n  self.prefix_chars=prefix_chars\n  self.conflict_handler=conflict_handler\n  \n  \n  self._registries={}\n  \n  \n  self.register('action',None ,_StoreAction)\n  self.register('action','store',_StoreAction)\n  self.register('action','store_const',_StoreConstAction)\n  self.register('action','store_true',_StoreTrueAction)\n  self.register('action','store_false',_StoreFalseAction)\n  self.register('action','append',_AppendAction)\n  self.register('action','append_const',_AppendConstAction)\n  self.register('action','count',_CountAction)\n  self.register('action','help',_HelpAction)\n  self.register('action','version',_VersionAction)\n  self.register('action','parsers',_SubParsersAction)\n  \n  \n  self._get_handler()\n  \n  \n  self._actions=[]\n  self._option_string_actions={}\n  \n  \n  self._action_groups=[]\n  self._mutually_exclusive_groups=[]\n  \n  \n  self._defaults={}\n  \n  \n  self._negative_number_matcher=_re.compile(r'^-\\d+$|^-\\d*\\.\\d+$')\n  \n  \n  \n  self._has_negative_number_optionals=[]\n  \n  \n  \n  \n def register(self,registry_name,value,object):\n  registry=self._registries.setdefault(registry_name,{})\n  registry[value]=object\n  \n def _registry_get(self,registry_name,value,default=None ):\n  return self._registries[registry_name].get(value,default)\n  \n  \n  \n  \n def set_defaults(self,**kwargs):\n  self._defaults.update(kwargs)\n  \n  \n  \n  for action in self._actions:\n   if action.dest in kwargs:\n    action.default=kwargs[action.dest]\n    \n def get_default(self,dest):\n  for action in self._actions:\n   if action.dest ==dest and action.default is not None :\n    return action.default\n  return self._defaults.get(dest,None )\n  \n  \n  \n  \n  \n def add_argument(self,*args,**kwargs):\n  ''\n\n\n  \n  \n  \n  \n  \n  chars=self.prefix_chars\n  if not args or len(args)==1 and args[0][0]not in chars:\n   if args and'dest'in kwargs:\n    raise ValueError('dest supplied twice for positional argument')\n   kwargs=self._get_positional_kwargs(*args,**kwargs)\n   \n   \n  else :\n   kwargs=self._get_optional_kwargs(*args,**kwargs)\n   \n   \n  if'default'not in kwargs:\n   dest=kwargs['dest']\n   if dest in self._defaults:\n    kwargs['default']=self._defaults[dest]\n   elif self.argument_default is not None :\n    kwargs['default']=self.argument_default\n    \n    \n  action_class=self._pop_action_class(kwargs)\n  if not callable(action_class):\n   raise ValueError('unknown action \"%s\"'%(action_class,))\n  action=action_class(**kwargs)\n  \n  \n  type_func=self._registry_get('type',action.type,action.type)\n  if not callable(type_func):\n   raise ValueError('%r is not callable'%(type_func,))\n   \n   \n  if hasattr(self,\"_get_formatter\"):\n   try :\n    self._get_formatter()._format_args(action,None )\n   except TypeError:\n    raise ValueError(\"length of metavar tuple does not match nargs\")\n    \n  return self._add_action(action)\n  \n def add_argument_group(self,*args,**kwargs):\n  group=_ArgumentGroup(self,*args,**kwargs)\n  self._action_groups.append(group)\n  return group\n  \n def add_mutually_exclusive_group(self,**kwargs):\n  group=_MutuallyExclusiveGroup(self,**kwargs)\n  self._mutually_exclusive_groups.append(group)\n  return group\n  \n def _add_action(self,action):\n \n  self._check_conflict(action)\n  \n  \n  self._actions.append(action)\n  action.container=self\n  \n  \n  for option_string in action.option_strings:\n   self._option_string_actions[option_string]=action\n   \n   \n  for option_string in action.option_strings:\n   if self._negative_number_matcher.match(option_string):\n    if not self._has_negative_number_optionals:\n     self._has_negative_number_optionals.append(True )\n     \n     \n  return action\n  \n def _remove_action(self,action):\n  self._actions.remove(action)\n  \n def _add_container_actions(self,container):\n \n  title_group_map={}\n  for group in self._action_groups:\n   if group.title in title_group_map:\n    msg=_('cannot merge actions - two groups are named %r')\n    raise ValueError(msg %(group.title))\n   title_group_map[group.title]=group\n   \n   \n  group_map={}\n  for group in container._action_groups:\n  \n  \n  \n   if group.title not in title_group_map:\n    title_group_map[group.title]=self.add_argument_group(\n    title=group.title,\n    description=group.description,\n    conflict_handler=group.conflict_handler)\n    \n    \n   for action in group._group_actions:\n    group_map[action]=title_group_map[group.title]\n    \n    \n    \n    \n  for group in container._mutually_exclusive_groups:\n   mutex_group=self.add_mutually_exclusive_group(\n   required=group.required)\n   \n   \n   for action in group._group_actions:\n    group_map[action]=mutex_group\n    \n    \n  for action in container._actions:\n   group_map.get(action,self)._add_action(action)\n   \n def _get_positional_kwargs(self,dest,**kwargs):\n \n  if'required'in kwargs:\n   msg=_(\"'required' is an invalid argument for positionals\")\n   raise TypeError(msg)\n   \n   \n   \n  if kwargs.get('nargs')not in [OPTIONAL,ZERO_OR_MORE]:\n   kwargs['required']=True\n  if kwargs.get('nargs')==ZERO_OR_MORE and'default'not in kwargs:\n   kwargs['required']=True\n   \n   \n  return dict(kwargs,dest=dest,option_strings=[])\n  \n def _get_optional_kwargs(self,*args,**kwargs):\n \n  option_strings=[]\n  long_option_strings=[]\n  for option_string in args:\n  \n   if not option_string[0]in self.prefix_chars:\n    args={'option':option_string,\n    'prefix_chars':self.prefix_chars}\n    msg=_('invalid option string %(option)r: '\n    'must start with a character %(prefix_chars)r')\n    raise ValueError(msg %args)\n    \n    \n   option_strings.append(option_string)\n   if option_string[0]in self.prefix_chars:\n    if len(option_string)>1:\n     if option_string[1]in self.prefix_chars:\n      long_option_strings.append(option_string)\n      \n      \n  dest=kwargs.pop('dest',None )\n  if dest is None :\n   if long_option_strings:\n    dest_option_string=long_option_strings[0]\n   else :\n    dest_option_string=option_strings[0]\n   dest=dest_option_string.lstrip(self.prefix_chars)\n   if not dest:\n    msg=_('dest= is required for options like %r')\n    raise ValueError(msg %option_string)\n   dest=dest.replace('-','_')\n   \n   \n  return dict(kwargs,dest=dest,option_strings=option_strings)\n  \n def _pop_action_class(self,kwargs,default=None ):\n  action=kwargs.pop('action',default)\n  return self._registry_get('action',action,action)\n  \n def _get_handler(self):\n \n  handler_func_name='_handle_conflict_%s'%self.conflict_handler\n  try :\n   return getattr(self,handler_func_name)\n  except AttributeError:\n   msg=_('invalid conflict_resolution value: %r')\n   raise ValueError(msg %self.conflict_handler)\n   \n def _check_conflict(self,action):\n \n \n  confl_optionals=[]\n  for option_string in action.option_strings:\n   if option_string in self._option_string_actions:\n    confl_optional=self._option_string_actions[option_string]\n    confl_optionals.append((option_string,confl_optional))\n    \n    \n  if confl_optionals:\n   conflict_handler=self._get_handler()\n   conflict_handler(action,confl_optionals)\n   \n def _handle_conflict_error(self,action,conflicting_actions):\n  message=ngettext('conflicting option string: %s',\n  'conflicting option strings: %s',\n  len(conflicting_actions))\n  conflict_string=', '.join([option_string\n  for option_string,action\n  in conflicting_actions])\n  raise ArgumentError(action,message %conflict_string)\n  \n def _handle_conflict_resolve(self,action,conflicting_actions):\n \n \n  for option_string,action in conflicting_actions:\n  \n  \n   action.option_strings.remove(option_string)\n   self._option_string_actions.pop(option_string,None )\n   \n   \n   \n   if not action.option_strings:\n    action.container._remove_action(action)\n    \n    \nclass _ArgumentGroup(_ActionsContainer):\n\n def __init__(self,container,title=None ,description=None ,**kwargs):\n \n  update=kwargs.setdefault\n  update('conflict_handler',container.conflict_handler)\n  update('prefix_chars',container.prefix_chars)\n  update('argument_default',container.argument_default)\n  super_init=super(_ArgumentGroup,self).__init__\n  super_init(description=description,**kwargs)\n  \n  \n  self.title=title\n  self._group_actions=[]\n  \n  \n  self._registries=container._registries\n  self._actions=container._actions\n  self._option_string_actions=container._option_string_actions\n  self._defaults=container._defaults\n  self._has_negative_number_optionals=  container._has_negative_number_optionals\n  self._mutually_exclusive_groups=container._mutually_exclusive_groups\n  \n def _add_action(self,action):\n  action=super(_ArgumentGroup,self)._add_action(action)\n  self._group_actions.append(action)\n  return action\n  \n def _remove_action(self,action):\n  super(_ArgumentGroup,self)._remove_action(action)\n  self._group_actions.remove(action)\n  \n  \nclass _MutuallyExclusiveGroup(_ArgumentGroup):\n\n def __init__(self,container,required=False ):\n  super(_MutuallyExclusiveGroup,self).__init__(container)\n  self.required=required\n  self._container=container\n  \n def _add_action(self,action):\n  if action.required:\n   msg=_('mutually exclusive arguments must be optional')\n   raise ValueError(msg)\n  action=self._container._add_action(action)\n  self._group_actions.append(action)\n  return action\n  \n def _remove_action(self,action):\n  self._container._remove_action(action)\n  self._group_actions.remove(action)\n  \n  \nclass ArgumentParser(_AttributeHolder,_ActionsContainer):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n prog=None ,\n usage=None ,\n description=None ,\n epilog=None ,\n parents=[],\n formatter_class=HelpFormatter,\n prefix_chars='-',\n fromfile_prefix_chars=None ,\n argument_default=None ,\n conflict_handler='error',\n add_help=True ):\n \n  superinit=super(ArgumentParser,self).__init__\n  superinit(description=description,\n  prefix_chars=prefix_chars,\n  argument_default=argument_default,\n  conflict_handler=conflict_handler)\n  \n  \n  if prog is None :\n   prog=_os.path.basename(_sys.argv[0])\n   \n  self.prog=prog\n  self.usage=usage\n  self.epilog=epilog\n  self.formatter_class=formatter_class\n  self.fromfile_prefix_chars=fromfile_prefix_chars\n  self.add_help=add_help\n  \n  add_group=self.add_argument_group\n  self._positionals=add_group(_('positional arguments'))\n  self._optionals=add_group(_('optional arguments'))\n  self._subparsers=None\n  \n  \n  def identity(string):\n   return string\n  self.register('type',None ,identity)\n  \n  \n  \n  default_prefix='-'if'-'in prefix_chars else prefix_chars[0]\n  if self.add_help:\n   self.add_argument(\n   default_prefix+'h',default_prefix *2+'help',\n   action='help',default=SUPPRESS,\n   help=_('show this help message and exit'))\n   \n   \n  for parent in parents:\n   self._add_container_actions(parent)\n   try :\n    defaults=parent._defaults\n   except AttributeError:\n    pass\n   else :\n    self._defaults.update(defaults)\n    \n    \n    \n    \n def _get_kwargs(self):\n  names=[\n  'prog',\n  'usage',\n  'description',\n  'formatter_class',\n  'conflict_handler',\n  'add_help',\n  ]\n  return [(name,getattr(self,name))for name in names]\n  \n  \n  \n  \n def add_subparsers(self,**kwargs):\n  if self._subparsers is not None :\n   self.error(_('cannot have multiple subparser arguments'))\n   \n   \n  kwargs.setdefault('parser_class',type(self))\n  \n  if'title'in kwargs or'description'in kwargs:\n   title=_(kwargs.pop('title','subcommands'))\n   description=_(kwargs.pop('description',None ))\n   self._subparsers=self.add_argument_group(title,description)\n  else :\n   self._subparsers=self._positionals\n   \n   \n   \n  if kwargs.get('prog')is None :\n   formatter=self._get_formatter()\n   positionals=self._get_positional_actions()\n   groups=self._mutually_exclusive_groups\n   formatter.add_usage(self.usage,positionals,groups,'')\n   kwargs['prog']=formatter.format_help().strip()\n   \n   \n  parsers_class=self._pop_action_class(kwargs,'parsers')\n  action=parsers_class(option_strings=[],**kwargs)\n  self._subparsers._add_action(action)\n  \n  \n  return action\n  \n def _add_action(self,action):\n  if action.option_strings:\n   self._optionals._add_action(action)\n  else :\n   self._positionals._add_action(action)\n  return action\n  \n def _get_optional_actions(self):\n  return [action\n  for action in self._actions\n  if action.option_strings]\n  \n def _get_positional_actions(self):\n  return [action\n  for action in self._actions\n  if not action.option_strings]\n  \n  \n  \n  \n def parse_args(self,args=None ,namespace=None ):\n  args,argv=self.parse_known_args(args,namespace)\n  if argv:\n   msg=_('unrecognized arguments: %s')\n   self.error(msg %' '.join(argv))\n  return args\n  \n def parse_known_args(self,args=None ,namespace=None ):\n  if args is None :\n  \n   args=_sys.argv[1:]\n  else :\n  \n   args=list(args)\n   \n   \n  if namespace is None :\n   namespace=Namespace()\n   \n   \n  for action in self._actions:\n   if action.dest is not SUPPRESS:\n    if not hasattr(namespace,action.dest):\n     if action.default is not SUPPRESS:\n      setattr(namespace,action.dest,action.default)\n      \n      \n  for dest in self._defaults:\n   if not hasattr(namespace,dest):\n    setattr(namespace,dest,self._defaults[dest])\n    \n    \n  try :\n   namespace,args=self._parse_known_args(args,namespace)\n   if hasattr(namespace,_UNRECOGNIZED_ARGS_ATTR):\n    args.extend(getattr(namespace,_UNRECOGNIZED_ARGS_ATTR))\n    delattr(namespace,_UNRECOGNIZED_ARGS_ATTR)\n   return namespace,args\n  except ArgumentError:\n   err=_sys.exc_info()[1]\n   self.error(str(err))\n   \n def _parse_known_args(self,arg_strings,namespace):\n \n  if self.fromfile_prefix_chars is not None :\n   arg_strings=self._read_args_from_files(arg_strings)\n   \n   \n   \n  action_conflicts={}\n  for mutex_group in self._mutually_exclusive_groups:\n   group_actions=mutex_group._group_actions\n   for i,mutex_action in enumerate(mutex_group._group_actions):\n    conflicts=action_conflicts.setdefault(mutex_action,[])\n    conflicts.extend(group_actions[:i])\n    conflicts.extend(group_actions[i+1:])\n    \n    \n    \n    \n  option_string_indices={}\n  arg_string_pattern_parts=[]\n  arg_strings_iter=iter(arg_strings)\n  for i,arg_string in enumerate(arg_strings_iter):\n  \n  \n   if arg_string =='--':\n    arg_string_pattern_parts.append('-')\n    for arg_string in arg_strings_iter:\n     arg_string_pattern_parts.append('A')\n     \n     \n     \n   else :\n    option_tuple=self._parse_optional(arg_string)\n    if option_tuple is None :\n     pattern='A'\n    else :\n     option_string_indices[i]=option_tuple\n     pattern='O'\n    arg_string_pattern_parts.append(pattern)\n    \n    \n  arg_strings_pattern=''.join(arg_string_pattern_parts)\n  \n  \n  seen_actions=set()\n  seen_non_default_actions=set()\n  \n  def take_action(action,argument_strings,option_string=None ):\n   seen_actions.add(action)\n   argument_values=self._get_values(action,argument_strings)\n   \n   \n   \n   \n   if argument_values is not action.default:\n    seen_non_default_actions.add(action)\n    for conflict_action in action_conflicts.get(action,[]):\n     if conflict_action in seen_non_default_actions:\n      msg=_('not allowed with argument %s')\n      action_name=_get_action_name(conflict_action)\n      raise ArgumentError(action,msg %action_name)\n      \n      \n      \n   if argument_values is not SUPPRESS:\n    action(self,namespace,argument_values,option_string)\n    \n    \n  def consume_optional(start_index):\n  \n  \n   option_tuple=option_string_indices[start_index]\n   action,option_string,explicit_arg=option_tuple\n   \n   \n   \n   match_argument=self._match_argument\n   action_tuples=[]\n   while True :\n   \n   \n    if action is None :\n     extras.append(arg_strings[start_index])\n     return start_index+1\n     \n     \n     \n    if explicit_arg is not None :\n     arg_count=match_argument(action,'A')\n     \n     \n     \n     \n     chars=self.prefix_chars\n     if arg_count ==0 and option_string[1]not in chars:\n      action_tuples.append((action,[],option_string))\n      char=option_string[0]\n      option_string=char+explicit_arg[0]\n      new_explicit_arg=explicit_arg[1:]or None\n      optionals_map=self._option_string_actions\n      if option_string in optionals_map:\n       action=optionals_map[option_string]\n       explicit_arg=new_explicit_arg\n      else :\n       msg=_('ignored explicit argument %r')\n       raise ArgumentError(action,msg %explicit_arg)\n       \n       \n       \n     elif arg_count ==1:\n      stop=start_index+1\n      args=[explicit_arg]\n      action_tuples.append((action,args,option_string))\n      break\n      \n      \n      \n     else :\n      msg=_('ignored explicit argument %r')\n      raise ArgumentError(action,msg %explicit_arg)\n      \n      \n      \n      \n    else :\n     start=start_index+1\n     selected_patterns=arg_strings_pattern[start:]\n     arg_count=match_argument(action,selected_patterns)\n     stop=start+arg_count\n     args=arg_strings[start:stop]\n     action_tuples.append((action,args,option_string))\n     break\n     \n     \n     \n   assert action_tuples\n   for action,args,option_string in action_tuples:\n    take_action(action,args,option_string)\n   return stop\n   \n   \n   \n  positionals=self._get_positional_actions()\n  \n  \n  def consume_positionals(start_index):\n  \n   match_partial=self._match_arguments_partial\n   selected_pattern=arg_strings_pattern[start_index:]\n   arg_counts=match_partial(positionals,selected_pattern)\n   \n   \n   \n   for action,arg_count in zip(positionals,arg_counts):\n    args=arg_strings[start_index:start_index+arg_count]\n    start_index +=arg_count\n    take_action(action,args)\n    \n    \n    \n   positionals[:]=positionals[len(arg_counts):]\n   return start_index\n   \n   \n   \n  extras=[]\n  start_index=0\n  if option_string_indices:\n   max_option_string_index=max(option_string_indices)\n  else :\n   max_option_string_index=-1\n  while start_index <=max_option_string_index:\n  \n  \n   next_option_string_index=min([\n   index\n   for index in option_string_indices\n   if index >=start_index])\n   if start_index !=next_option_string_index:\n    positionals_end_index=consume_positionals(start_index)\n    \n    \n    \n    if positionals_end_index >start_index:\n     start_index=positionals_end_index\n     continue\n    else :\n     start_index=positionals_end_index\n     \n     \n     \n   if start_index not in option_string_indices:\n    strings=arg_strings[start_index:next_option_string_index]\n    extras.extend(strings)\n    start_index=next_option_string_index\n    \n    \n   start_index=consume_optional(start_index)\n   \n   \n  stop_index=consume_positionals(start_index)\n  \n  \n  extras.extend(arg_strings[stop_index:])\n  \n  \n  \n  required_actions=[]\n  for action in self._actions:\n   if action not in seen_actions:\n    if action.required:\n     required_actions.append(_get_action_name(action))\n    else :\n    \n    \n    \n    \n     if (action.default is not None and\n     isinstance(action.default,str)and\n     hasattr(namespace,action.dest)and\n     action.default is getattr(namespace,action.dest)):\n      setattr(namespace,action.dest,\n      self._get_value(action,action.default))\n      \n  if required_actions:\n   self.error(_('the following arguments are required: %s')%\n   ', '.join(required_actions))\n   \n   \n  for group in self._mutually_exclusive_groups:\n   if group.required:\n    for action in group._group_actions:\n     if action in seen_non_default_actions:\n      break\n      \n      \n    else :\n     names=[_get_action_name(action)\n     for action in group._group_actions\n     if action.help is not SUPPRESS]\n     msg=_('one of the arguments %s is required')\n     self.error(msg %' '.join(names))\n     \n     \n  return namespace,extras\n  \n def _read_args_from_files(self,arg_strings):\n \n  new_arg_strings=[]\n  for arg_string in arg_strings:\n  \n  \n   if not arg_string or arg_string[0]not in self.fromfile_prefix_chars:\n    new_arg_strings.append(arg_string)\n    \n    \n   else :\n    try :\n     with open(arg_string[1:])as args_file:\n      arg_strings=[]\n      for arg_line in args_file.read().splitlines():\n       for arg in self.convert_arg_line_to_args(arg_line):\n        arg_strings.append(arg)\n      arg_strings=self._read_args_from_files(arg_strings)\n      new_arg_strings.extend(arg_strings)\n    except OSError:\n     err=_sys.exc_info()[1]\n     self.error(str(err))\n     \n     \n  return new_arg_strings\n  \n def convert_arg_line_to_args(self,arg_line):\n  return [arg_line]\n  \n def _match_argument(self,action,arg_strings_pattern):\n \n  nargs_pattern=self._get_nargs_pattern(action)\n  match=_re.match(nargs_pattern,arg_strings_pattern)\n  \n  \n  if match is None :\n   nargs_errors={\n   None :_('expected one argument'),\n   OPTIONAL:_('expected at most one argument'),\n   ONE_OR_MORE:_('expected at least one argument'),\n   }\n   default=ngettext('expected %s argument',\n   'expected %s arguments',\n   action.nargs)%action.nargs\n   msg=nargs_errors.get(action.nargs,default)\n   raise ArgumentError(action,msg)\n   \n   \n  return len(match.group(1))\n  \n def _match_arguments_partial(self,actions,arg_strings_pattern):\n \n \n  result=[]\n  for i in range(len(actions),0,-1):\n   actions_slice=actions[:i]\n   pattern=''.join([self._get_nargs_pattern(action)\n   for action in actions_slice])\n   match=_re.match(pattern,arg_strings_pattern)\n   if match is not None :\n    result.extend([len(string)for string in match.groups()])\n    break\n    \n    \n  return result\n  \n def _parse_optional(self,arg_string):\n \n  if not arg_string:\n   return None\n   \n   \n  if not arg_string[0]in self.prefix_chars:\n   return None\n   \n   \n  if arg_string in self._option_string_actions:\n   action=self._option_string_actions[arg_string]\n   return action,arg_string,None\n   \n   \n  if len(arg_string)==1:\n   return None\n   \n   \n  if'='in arg_string:\n   option_string,explicit_arg=arg_string.split('=',1)\n   if option_string in self._option_string_actions:\n    action=self._option_string_actions[option_string]\n    return action,option_string,explicit_arg\n    \n    \n    \n  option_tuples=self._get_option_tuples(arg_string)\n  \n  \n  if len(option_tuples)>1:\n   options=', '.join([option_string\n   for action,option_string,explicit_arg in option_tuples])\n   args={'option':arg_string,'matches':options}\n   msg=_('ambiguous option: %(option)s could match %(matches)s')\n   self.error(msg %args)\n   \n   \n   \n  elif len(option_tuples)==1:\n   option_tuple,=option_tuples\n   return option_tuple\n   \n   \n   \n   \n  if self._negative_number_matcher.match(arg_string):\n   if not self._has_negative_number_optionals:\n    return None\n    \n    \n  if' 'in arg_string:\n   return None\n   \n   \n   \n  return None ,arg_string,None\n  \n def _get_option_tuples(self,option_string):\n  result=[]\n  \n  \n  \n  chars=self.prefix_chars\n  if option_string[0]in chars and option_string[1]in chars:\n   if'='in option_string:\n    option_prefix,explicit_arg=option_string.split('=',1)\n   else :\n    option_prefix=option_string\n    explicit_arg=None\n   for option_string in self._option_string_actions:\n    if option_string.startswith(option_prefix):\n     action=self._option_string_actions[option_string]\n     tup=action,option_string,explicit_arg\n     result.append(tup)\n     \n     \n     \n     \n  elif option_string[0]in chars and option_string[1]not in chars:\n   option_prefix=option_string\n   explicit_arg=None\n   short_option_prefix=option_string[:2]\n   short_explicit_arg=option_string[2:]\n   \n   for option_string in self._option_string_actions:\n    if option_string ==short_option_prefix:\n     action=self._option_string_actions[option_string]\n     tup=action,option_string,short_explicit_arg\n     result.append(tup)\n    elif option_string.startswith(option_prefix):\n     action=self._option_string_actions[option_string]\n     tup=action,option_string,explicit_arg\n     result.append(tup)\n     \n     \n  else :\n   self.error(_('unexpected option string: %s')%option_string)\n   \n   \n  return result\n  \n def _get_nargs_pattern(self,action):\n \n \n  nargs=action.nargs\n  \n  \n  if nargs is None :\n   nargs_pattern='(-*A-*)'\n   \n   \n  elif nargs ==OPTIONAL:\n   nargs_pattern='(-*A?-*)'\n   \n   \n  elif nargs ==ZERO_OR_MORE:\n   nargs_pattern='(-*[A-]*)'\n   \n   \n  elif nargs ==ONE_OR_MORE:\n   nargs_pattern='(-*A[A-]*)'\n   \n   \n  elif nargs ==REMAINDER:\n   nargs_pattern='([-AO]*)'\n   \n   \n  elif nargs ==PARSER:\n   nargs_pattern='(-*A[-AO]*)'\n   \n   \n  else :\n   nargs_pattern='(-*%s-*)'%'-*'.join('A'*nargs)\n   \n   \n  if action.option_strings:\n   nargs_pattern=nargs_pattern.replace('-*','')\n   nargs_pattern=nargs_pattern.replace('-','')\n   \n   \n  return nargs_pattern\n  \n  \n  \n  \n def _get_values(self,action,arg_strings):\n \n  if action.nargs not in [PARSER,REMAINDER]:\n   try :\n    arg_strings.remove('--')\n   except ValueError:\n    pass\n    \n    \n  if not arg_strings and action.nargs ==OPTIONAL:\n   if action.option_strings:\n    value=action.const\n   else :\n    value=action.default\n   if isinstance(value,str):\n    value=self._get_value(action,value)\n    self._check_value(action,value)\n    \n    \n    \n  elif (not arg_strings and action.nargs ==ZERO_OR_MORE and\n  not action.option_strings):\n   if action.default is not None :\n    value=action.default\n   else :\n    value=arg_strings\n   self._check_value(action,value)\n   \n   \n  elif len(arg_strings)==1 and action.nargs in [None ,OPTIONAL]:\n   arg_string,=arg_strings\n   value=self._get_value(action,arg_string)\n   self._check_value(action,value)\n   \n   \n  elif action.nargs ==REMAINDER:\n   value=[self._get_value(action,v)for v in arg_strings]\n   \n   \n  elif action.nargs ==PARSER:\n   value=[self._get_value(action,v)for v in arg_strings]\n   self._check_value(action,value[0])\n   \n   \n  else :\n   value=[self._get_value(action,v)for v in arg_strings]\n   for v in value:\n    self._check_value(action,v)\n    \n    \n  return value\n  \n def _get_value(self,action,arg_string):\n  type_func=self._registry_get('type',action.type,action.type)\n  if not callable(type_func):\n   msg=_('%r is not callable')\n   raise ArgumentError(action,msg %type_func)\n   \n   \n  try :\n   result=type_func(arg_string)\n   \n   \n  except ArgumentTypeError:\n   name=getattr(action.type,'__name__',repr(action.type))\n   msg=str(_sys.exc_info()[1])\n   raise ArgumentError(action,msg)\n   \n   \n  except (TypeError,ValueError):\n   name=getattr(action.type,'__name__',repr(action.type))\n   args={'type':name,'value':arg_string}\n   msg=_('invalid %(type)s value: %(value)r')\n   raise ArgumentError(action,msg %args)\n   \n   \n  return result\n  \n def _check_value(self,action,value):\n \n  if action.choices is not None and value not in action.choices:\n   args={'value':value,\n   'choices':', '.join(map(repr,action.choices))}\n   msg=_('invalid choice: %(value)r (choose from %(choices)s)')\n   raise ArgumentError(action,msg %args)\n   \n   \n   \n   \n def format_usage(self):\n  formatter=self._get_formatter()\n  formatter.add_usage(self.usage,self._actions,\n  self._mutually_exclusive_groups)\n  return formatter.format_help()\n  \n def format_help(self):\n  formatter=self._get_formatter()\n  \n  \n  formatter.add_usage(self.usage,self._actions,\n  self._mutually_exclusive_groups)\n  \n  \n  formatter.add_text(self.description)\n  \n  \n  for action_group in self._action_groups:\n   formatter.start_section(action_group.title)\n   formatter.add_text(action_group.description)\n   formatter.add_arguments(action_group._group_actions)\n   formatter.end_section()\n   \n   \n  formatter.add_text(self.epilog)\n  \n  \n  return formatter.format_help()\n  \n def _get_formatter(self):\n  return self.formatter_class(prog=self.prog)\n  \n  \n  \n  \n def print_usage(self,file=None ):\n  if file is None :\n   file=_sys.stdout\n  self._print_message(self.format_usage(),file)\n  \n def print_help(self,file=None ):\n  if file is None :\n   file=_sys.stdout\n  self._print_message(self.format_help(),file)\n  \n def _print_message(self,message,file=None ):\n  if message:\n   if file is None :\n    file=_sys.stderr\n   file.write(message)\n   \n   \n   \n   \n def exit(self,status=0,message=None ):\n  if message:\n   self._print_message(message,_sys.stderr)\n  _sys.exit(status)\n  \n def error(self,message):\n  ''\n\n\n\n\n\n\n  \n  self.print_usage(_sys.stderr)\n  args={'prog':self.prog,'message':message}\n  self.exit(2,_('%(prog)s: error: %(message)s\\n')%args)\n"], "this": [".py", "s=\"\"\"Gur Mra bs Clguba, ol Gvz Crgref\n\nOrnhgvshy vf orggre guna htyl.\nRkcyvpvg vf orggre guna vzcyvpvg.\nFvzcyr vf orggre guna pbzcyrk.\nPbzcyrk vf orggre guna pbzcyvpngrq.\nSyng vf orggre guna arfgrq.\nFcnefr vf orggre guna qrafr.\nErnqnovyvgl pbhagf.\nFcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.\nNygubhtu cenpgvpnyvgl orngf chevgl.\nReebef fubhyq arire cnff fvyragyl.\nHayrff rkcyvpvgyl fvyraprq.\nVa gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.\nGurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.\nNygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.\nAbj vf orggre guna arire.\nNygubhtu arire vf bsgra orggre guna *evtug* abj.\nVs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.\nVs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.\nAnzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!\"\"\"\n\nd={}\nfor c in (65,97):\n for i in range(26):\n  d[chr(i+c)]=chr((i+13)%26+c)\n  \nprint(\"\".join([d.get(c,c)for c in s]))\n"], "xml.sax.expatreader": [".py", "''\n\n\n\n\nversion=\"0.20\"\n\nfrom xml.sax._exceptions import *\nfrom xml.sax.handler import feature_validation,feature_namespaces\nfrom xml.sax.handler import feature_namespace_prefixes\nfrom xml.sax.handler import feature_external_ges,feature_external_pes\nfrom xml.sax.handler import feature_string_interning\nfrom xml.sax.handler import property_xml_string,property_interning_dict\n\n\nimport sys\nif sys.platform[:4]==\"java\":\n raise SAXReaderNotAvailable(\"expat not available in Java\",None )\ndel sys\n\ntry :\n from xml.parsers import expat\nexcept ImportError:\n raise SAXReaderNotAvailable(\"expat not supported\",None )\nelse :\n if not hasattr(expat,\"ParserCreate\"):\n  raise SAXReaderNotAvailable(\"expat not supported\",None )\nfrom xml.sax import xmlreader,saxutils,handler\n\nAttributesImpl=xmlreader.AttributesImpl\nAttributesNSImpl=xmlreader.AttributesNSImpl\n\n\n\n\ntry :\n import _weakref\nexcept ImportError:\n def _mkproxy(o):\n  return o\nelse :\n import weakref\n _mkproxy=weakref.proxy\n del weakref,_weakref\n \n \n \nclass ExpatLocator(xmlreader.Locator):\n ''\n\n\n\n \n def __init__(self,parser):\n  self._ref=_mkproxy(parser)\n  \n def getColumnNumber(self):\n  parser=self._ref\n  if parser._parser is None :\n   return None\n  return parser._parser.ErrorColumnNumber\n  \n def getLineNumber(self):\n  parser=self._ref\n  if parser._parser is None :\n   return 1\n  return parser._parser.ErrorLineNumber\n  \n def getPublicId(self):\n  parser=self._ref\n  if parser is None :\n   return None\n  return parser._source.getPublicId()\n  \n def getSystemId(self):\n  parser=self._ref\n  if parser is None :\n   return None\n  return parser._source.getSystemId()\n  \n  \n  \n  \nclass ExpatParser(xmlreader.IncrementalParser,xmlreader.Locator):\n ''\n \n def __init__(self,namespaceHandling=0,bufsize=2 **16 -20):\n  xmlreader.IncrementalParser.__init__(self,bufsize)\n  self._source=xmlreader.InputSource()\n  self._parser=None\n  self._namespaces=namespaceHandling\n  self._lex_handler_prop=None\n  self._parsing=0\n  self._entity_stack=[]\n  self._external_ges=1\n  self._interning=None\n  \n  \n  \n def parse(self,source):\n  ''\n  source=saxutils.prepare_input_source(source)\n  \n  self._source=source\n  self.reset()\n  self._cont_handler.setDocumentLocator(ExpatLocator(self))\n  xmlreader.IncrementalParser.parse(self,source)\n  \n def prepareParser(self,source):\n  if source.getSystemId()is not None :\n   self._parser.SetBase(source.getSystemId())\n   \n   \n   \n def setContentHandler(self,handler):\n  xmlreader.IncrementalParser.setContentHandler(self,handler)\n  if self._parsing:\n   self._reset_cont_handler()\n   \n def getFeature(self,name):\n  if name ==feature_namespaces:\n   return self._namespaces\n  elif name ==feature_string_interning:\n   return self._interning is not None\n  elif name in (feature_validation,feature_external_pes,\n  feature_namespace_prefixes):\n   return 0\n  elif name ==feature_external_ges:\n   return self._external_ges\n  raise SAXNotRecognizedException(\"Feature '%s' not recognized\"%name)\n  \n def setFeature(self,name,state):\n  if self._parsing:\n   raise SAXNotSupportedException(\"Cannot set features while parsing\")\n   \n  if name ==feature_namespaces:\n   self._namespaces=state\n  elif name ==feature_external_ges:\n   self._external_ges=state\n  elif name ==feature_string_interning:\n   if state:\n    if self._interning is None :\n     self._interning={}\n   else :\n    self._interning=None\n  elif name ==feature_validation:\n   if state:\n    raise SAXNotSupportedException(\n    \"expat does not support validation\")\n  elif name ==feature_external_pes:\n   if state:\n    raise SAXNotSupportedException(\n    \"expat does not read external parameter entities\")\n  elif name ==feature_namespace_prefixes:\n   if state:\n    raise SAXNotSupportedException(\n    \"expat does not report namespace prefixes\")\n  else :\n   raise SAXNotRecognizedException(\n   \"Feature '%s' not recognized\"%name)\n   \n def getProperty(self,name):\n  if name ==handler.property_lexical_handler:\n   return self._lex_handler_prop\n  elif name ==property_interning_dict:\n   return self._interning\n  elif name ==property_xml_string:\n   if self._parser:\n    if hasattr(self._parser,\"GetInputContext\"):\n     return self._parser.GetInputContext()\n    else :\n     raise SAXNotRecognizedException(\n     \"This version of expat does not support getting\"\n     \" the XML string\")\n   else :\n    raise SAXNotSupportedException(\n    \"XML string cannot be returned when not parsing\")\n  raise SAXNotRecognizedException(\"Property '%s' not recognized\"%name)\n  \n def setProperty(self,name,value):\n  if name ==handler.property_lexical_handler:\n   self._lex_handler_prop=value\n   if self._parsing:\n    self._reset_lex_handler_prop()\n  elif name ==property_interning_dict:\n   self._interning=value\n  elif name ==property_xml_string:\n   raise SAXNotSupportedException(\"Property '%s' cannot be set\"%\n   name)\n  else :\n   raise SAXNotRecognizedException(\"Property '%s' not recognized\"%\n   name)\n   \n   \n   \n def feed(self,data,isFinal=0):\n  if not self._parsing:\n   self.reset()\n   self._parsing=1\n   self._cont_handler.startDocument()\n   \n  try :\n  \n  \n  \n  \n   self._parser.Parse(data,isFinal)\n  except expat.error as e:\n   exc=SAXParseException(expat.ErrorString(e.code),e,self)\n   \n   self._err_handler.fatalError(exc)\n   \n def close(self):\n  if self._entity_stack:\n  \n   return\n  self.feed(\"\",isFinal=1)\n  self._cont_handler.endDocument()\n  self._parsing=0\n  \n  self._parser=None\n  bs=self._source.getByteStream()\n  if bs is not None :\n   bs.close()\n   \n def _reset_cont_handler(self):\n  self._parser.ProcessingInstructionHandler=  self._cont_handler.processingInstruction\n  self._parser.CharacterDataHandler=self._cont_handler.characters\n  \n def _reset_lex_handler_prop(self):\n  lex=self._lex_handler_prop\n  parser=self._parser\n  if lex is None :\n   parser.CommentHandler=None\n   parser.StartCdataSectionHandler=None\n   parser.EndCdataSectionHandler=None\n   parser.StartDoctypeDeclHandler=None\n   parser.EndDoctypeDeclHandler=None\n  else :\n   parser.CommentHandler=lex.comment\n   parser.StartCdataSectionHandler=lex.startCDATA\n   parser.EndCdataSectionHandler=lex.endCDATA\n   parser.StartDoctypeDeclHandler=self.start_doctype_decl\n   parser.EndDoctypeDeclHandler=lex.endDTD\n   \n def reset(self):\n  if self._namespaces:\n   self._parser=expat.ParserCreate(self._source.getEncoding(),\" \",\n   intern=self._interning)\n   self._parser.namespace_prefixes=1\n   self._parser.StartElementHandler=self.start_element_ns\n   self._parser.EndElementHandler=self.end_element_ns\n  else :\n   self._parser=expat.ParserCreate(self._source.getEncoding(),\n   intern=self._interning)\n   self._parser.StartElementHandler=self.start_element\n   self._parser.EndElementHandler=self.end_element\n   \n  self._reset_cont_handler()\n  self._parser.UnparsedEntityDeclHandler=self.unparsed_entity_decl\n  self._parser.NotationDeclHandler=self.notation_decl\n  self._parser.StartNamespaceDeclHandler=self.start_namespace_decl\n  self._parser.EndNamespaceDeclHandler=self.end_namespace_decl\n  \n  self._decl_handler_prop=None\n  if self._lex_handler_prop:\n   self._reset_lex_handler_prop()\n   \n   \n   \n  self._parser.ExternalEntityRefHandler=self.external_entity_ref\n  try :\n   self._parser.SkippedEntityHandler=self.skipped_entity_handler\n  except AttributeError:\n  \n   pass\n  self._parser.SetParamEntityParsing(\n  expat.XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)\n  \n  self._parsing=0\n  self._entity_stack=[]\n  \n  \n  \n def getColumnNumber(self):\n  if self._parser is None :\n   return None\n  return self._parser.ErrorColumnNumber\n  \n def getLineNumber(self):\n  if self._parser is None :\n   return 1\n  return self._parser.ErrorLineNumber\n  \n def getPublicId(self):\n  return self._source.getPublicId()\n  \n def getSystemId(self):\n  return self._source.getSystemId()\n  \n  \n def start_element(self,name,attrs):\n  self._cont_handler.startElement(name,AttributesImpl(attrs))\n  \n def end_element(self,name):\n  self._cont_handler.endElement(name)\n  \n def start_element_ns(self,name,attrs):\n  pair=name.split()\n  if len(pair)==1:\n  \n   pair=(None ,name)\n  elif len(pair)==3:\n   pair=pair[0],pair[1]\n  else :\n  \n   pair=tuple(pair)\n   \n  newattrs={}\n  qnames={}\n  for (aname,value)in attrs.items():\n   parts=aname.split()\n   length=len(parts)\n   if length ==1:\n   \n    qname=aname\n    apair=(None ,aname)\n   elif length ==3:\n    qname=\"%s:%s\"%(parts[2],parts[1])\n    apair=parts[0],parts[1]\n   else :\n   \n    qname=parts[1]\n    apair=tuple(parts)\n    \n   newattrs[apair]=value\n   qnames[apair]=qname\n   \n  self._cont_handler.startElementNS(pair,None ,\n  AttributesNSImpl(newattrs,qnames))\n  \n def end_element_ns(self,name):\n  pair=name.split()\n  if len(pair)==1:\n   pair=(None ,name)\n  elif len(pair)==3:\n   pair=pair[0],pair[1]\n  else :\n   pair=tuple(pair)\n   \n  self._cont_handler.endElementNS(pair,None )\n  \n  \n def processing_instruction(self,target,data):\n  self._cont_handler.processingInstruction(target,data)\n  \n  \n def character_data(self,data):\n  self._cont_handler.characters(data)\n  \n def start_namespace_decl(self,prefix,uri):\n  self._cont_handler.startPrefixMapping(prefix,uri)\n  \n def end_namespace_decl(self,prefix):\n  self._cont_handler.endPrefixMapping(prefix)\n  \n def start_doctype_decl(self,name,sysid,pubid,has_internal_subset):\n  self._lex_handler_prop.startDTD(name,pubid,sysid)\n  \n def unparsed_entity_decl(self,name,base,sysid,pubid,notation_name):\n  self._dtd_handler.unparsedEntityDecl(name,pubid,sysid,notation_name)\n  \n def notation_decl(self,name,base,sysid,pubid):\n  self._dtd_handler.notationDecl(name,pubid,sysid)\n  \n def external_entity_ref(self,context,base,sysid,pubid):\n  if not self._external_ges:\n   return 1\n   \n  source=self._ent_handler.resolveEntity(pubid,sysid)\n  source=saxutils.prepare_input_source(source,\n  self._source.getSystemId()or\n  \"\")\n  \n  self._entity_stack.append((self._parser,self._source))\n  self._parser=self._parser.ExternalEntityParserCreate(context)\n  self._source=source\n  \n  try :\n   xmlreader.IncrementalParser.parse(self,source)\n  except :\n   return 0\n   \n  (self._parser,self._source)=self._entity_stack[-1]\n  del self._entity_stack[-1]\n  return 1\n  \n def skipped_entity_handler(self,name,is_pe):\n  if is_pe:\n  \n   name='%'+name\n  self._cont_handler.skippedEntity(name)\n  \n  \n  \ndef create_parser(*args,**kwargs):\n return ExpatParser(*args,**kwargs)\n \n \n \nif __name__ ==\"__main__\":\n import xml.sax.saxutils\n p=create_parser()\n p.setContentHandler(xml.sax.saxutils.XMLGenerator())\n p.setErrorHandler(xml.sax.ErrorHandler())\n p.parse(\"http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml\")\n"], "atexit": [".py", "''\n\n\n\n\n\nclass __loader__(object):\n pass\n \ndef _clear(*args,**kw):\n ''\n \n pass\n \ndef _run_exitfuncs(*args,**kw):\n ''\n \n pass\n \ndef register(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef unregister(*args,**kw):\n ''\n\n\n\n \n pass\n"], "http.cookies": [".py", "#!/usr/bin/env python3\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nr\"\"\"\nHere's a sample session to show how to use this module.\nAt the moment, this is the only documentation.\n\nThe Basics\n----------\n\nImporting is easy...\n\n   >>> from http import cookies\n\nMost of the time you start by creating a cookie.\n\n   >>> C = cookies.SimpleCookie()\n\nOnce you've created your Cookie, you can add values just as if it were\na dictionary.\n\n   >>> C = cookies.SimpleCookie()\n   >>> C[\"fig\"] = \"newton\"\n   >>> C[\"sugar\"] = \"wafer\"\n   >>> C.output()\n   'Set-Cookie: fig=newton\\r\\nSet-Cookie: sugar=wafer'\n\nNotice that the printable representation of a Cookie is the\nappropriate format for a Set-Cookie: header.  This is the\ndefault behavior.  You can change the header and printed\nattributes by using the .output() function\n\n   >>> C = cookies.SimpleCookie()\n   >>> C[\"rocky\"] = \"road\"\n   >>> C[\"rocky\"][\"path\"] = \"/cookie\"\n   >>> print(C.output(header=\"Cookie:\"))\n   Cookie: rocky=road; Path=/cookie\n   >>> print(C.output(attrs=[], header=\"Cookie:\"))\n   Cookie: rocky=road\n\nThe load() method of a Cookie extracts cookies from a string.  In a\nCGI script, you would use this method to extract the cookies from the\nHTTP_COOKIE environment variable.\n\n   >>> C = cookies.SimpleCookie()\n   >>> C.load(\"chips=ahoy; vienna=finger\")\n   >>> C.output()\n   'Set-Cookie: chips=ahoy\\r\\nSet-Cookie: vienna=finger'\n\nThe load() method is darn-tootin smart about identifying cookies\nwithin a string.  Escaped quotation marks, nested semicolons, and other\nsuch trickeries do not confuse it.\n\n   >>> C = cookies.SimpleCookie()\n   >>> C.load('keebler=\"E=everybody; L=\\\\\"Loves\\\\\"; fudge=\\\\012;\";')\n   >>> print(C)\n   Set-Cookie: keebler=\"E=everybody; L=\\\"Loves\\\"; fudge=\\012;\"\n\nEach element of the Cookie also supports all of the RFC 2109\nCookie attributes.  Here's an example which sets the Path\nattribute.\n\n   >>> C = cookies.SimpleCookie()\n   >>> C[\"oreo\"] = \"doublestuff\"\n   >>> C[\"oreo\"][\"path\"] = \"/\"\n   >>> print(C)\n   Set-Cookie: oreo=doublestuff; Path=/\n\nEach dictionary element has a 'value' attribute, which gives you\nback the value associated with the key.\n\n   >>> C = cookies.SimpleCookie()\n   >>> C[\"twix\"] = \"none for you\"\n   >>> C[\"twix\"].value\n   'none for you'\n\nThe SimpleCookie expects that all values should be standard strings.\nJust to be sure, SimpleCookie invokes the str() builtin to convert\nthe value to a string, when the values are set dictionary-style.\n\n   >>> C = cookies.SimpleCookie()\n   >>> C[\"number\"] = 7\n   >>> C[\"string\"] = \"seven\"\n   >>> C[\"number\"].value\n   '7'\n   >>> C[\"string\"].value\n   'seven'\n   >>> C.output()\n   'Set-Cookie: number=7\\r\\nSet-Cookie: string=seven'\n\nFinis.\n\"\"\"\n\n\n\n\nimport re\nimport string\n\n__all__=[\"CookieError\",\"BaseCookie\",\"SimpleCookie\"]\n\n_nulljoin=''.join\n_semispacejoin='; '.join\n_spacejoin=' '.join\n\n\n\n\nclass CookieError(Exception):\n pass\n \n \n \n \n \n \n \n \n \n \n \n \n \n_LegalChars=string.ascii_letters+string.digits+\"!#$%&'*+-.^_`|~:\"\n_Translator={\n'\\000':'\\\\000','\\001':'\\\\001','\\002':'\\\\002',\n'\\003':'\\\\003','\\004':'\\\\004','\\005':'\\\\005',\n'\\006':'\\\\006','\\007':'\\\\007','\\010':'\\\\010',\n'\\011':'\\\\011','\\012':'\\\\012','\\013':'\\\\013',\n'\\014':'\\\\014','\\015':'\\\\015','\\016':'\\\\016',\n'\\017':'\\\\017','\\020':'\\\\020','\\021':'\\\\021',\n'\\022':'\\\\022','\\023':'\\\\023','\\024':'\\\\024',\n'\\025':'\\\\025','\\026':'\\\\026','\\027':'\\\\027',\n'\\030':'\\\\030','\\031':'\\\\031','\\032':'\\\\032',\n'\\033':'\\\\033','\\034':'\\\\034','\\035':'\\\\035',\n'\\036':'\\\\036','\\037':'\\\\037',\n\n\n\n\n',':'\\\\054',';':'\\\\073',\n\n'\"':'\\\\\"','\\\\':'\\\\\\\\',\n\n'\\177':'\\\\177','\\200':'\\\\200','\\201':'\\\\201',\n'\\202':'\\\\202','\\203':'\\\\203','\\204':'\\\\204',\n'\\205':'\\\\205','\\206':'\\\\206','\\207':'\\\\207',\n'\\210':'\\\\210','\\211':'\\\\211','\\212':'\\\\212',\n'\\213':'\\\\213','\\214':'\\\\214','\\215':'\\\\215',\n'\\216':'\\\\216','\\217':'\\\\217','\\220':'\\\\220',\n'\\221':'\\\\221','\\222':'\\\\222','\\223':'\\\\223',\n'\\224':'\\\\224','\\225':'\\\\225','\\226':'\\\\226',\n'\\227':'\\\\227','\\230':'\\\\230','\\231':'\\\\231',\n'\\232':'\\\\232','\\233':'\\\\233','\\234':'\\\\234',\n'\\235':'\\\\235','\\236':'\\\\236','\\237':'\\\\237',\n'\\240':'\\\\240','\\241':'\\\\241','\\242':'\\\\242',\n'\\243':'\\\\243','\\244':'\\\\244','\\245':'\\\\245',\n'\\246':'\\\\246','\\247':'\\\\247','\\250':'\\\\250',\n'\\251':'\\\\251','\\252':'\\\\252','\\253':'\\\\253',\n'\\254':'\\\\254','\\255':'\\\\255','\\256':'\\\\256',\n'\\257':'\\\\257','\\260':'\\\\260','\\261':'\\\\261',\n'\\262':'\\\\262','\\263':'\\\\263','\\264':'\\\\264',\n'\\265':'\\\\265','\\266':'\\\\266','\\267':'\\\\267',\n'\\270':'\\\\270','\\271':'\\\\271','\\272':'\\\\272',\n'\\273':'\\\\273','\\274':'\\\\274','\\275':'\\\\275',\n'\\276':'\\\\276','\\277':'\\\\277','\\300':'\\\\300',\n'\\301':'\\\\301','\\302':'\\\\302','\\303':'\\\\303',\n'\\304':'\\\\304','\\305':'\\\\305','\\306':'\\\\306',\n'\\307':'\\\\307','\\310':'\\\\310','\\311':'\\\\311',\n'\\312':'\\\\312','\\313':'\\\\313','\\314':'\\\\314',\n'\\315':'\\\\315','\\316':'\\\\316','\\317':'\\\\317',\n'\\320':'\\\\320','\\321':'\\\\321','\\322':'\\\\322',\n'\\323':'\\\\323','\\324':'\\\\324','\\325':'\\\\325',\n'\\326':'\\\\326','\\327':'\\\\327','\\330':'\\\\330',\n'\\331':'\\\\331','\\332':'\\\\332','\\333':'\\\\333',\n'\\334':'\\\\334','\\335':'\\\\335','\\336':'\\\\336',\n'\\337':'\\\\337','\\340':'\\\\340','\\341':'\\\\341',\n'\\342':'\\\\342','\\343':'\\\\343','\\344':'\\\\344',\n'\\345':'\\\\345','\\346':'\\\\346','\\347':'\\\\347',\n'\\350':'\\\\350','\\351':'\\\\351','\\352':'\\\\352',\n'\\353':'\\\\353','\\354':'\\\\354','\\355':'\\\\355',\n'\\356':'\\\\356','\\357':'\\\\357','\\360':'\\\\360',\n'\\361':'\\\\361','\\362':'\\\\362','\\363':'\\\\363',\n'\\364':'\\\\364','\\365':'\\\\365','\\366':'\\\\366',\n'\\367':'\\\\367','\\370':'\\\\370','\\371':'\\\\371',\n'\\372':'\\\\372','\\373':'\\\\373','\\374':'\\\\374',\n'\\375':'\\\\375','\\376':'\\\\376','\\377':'\\\\377'\n}\n\ndef _quote(str,LegalChars=_LegalChars):\n ''\n\n\n\n\n \n if all(c in LegalChars for c in str):\n  return str\n else :\n  return'\"'+_nulljoin(_Translator.get(s,s)for s in str)+'\"'\n  \n  \n_OctalPatt=re.compile(r\"\\\\[0-3][0-7][0-7]\")\n_QuotePatt=re.compile(r\"[\\\\].\")\n\ndef _unquote(str):\n\n\n if len(str)<2:\n  return str\n if str[0]!='\"'or str[-1]!='\"':\n  return str\n  \n  \n  \n  \n  \n str=str[1:-1]\n \n \n \n \n \n i=0\n n=len(str)\n res=[]\n while 0 <=i <n:\n  o_match=_OctalPatt.search(str,i)\n  q_match=_QuotePatt.search(str,i)\n  if not o_match and not q_match:\n   res.append(str[i:])\n   break\n   \n  j=k=-1\n  if o_match:\n   j=o_match.start(0)\n  if q_match:\n   k=q_match.start(0)\n  if q_match and (not o_match or k <j):\n   res.append(str[i:k])\n   res.append(str[k+1])\n   i=k+2\n  else :\n   res.append(str[i:j])\n   res.append(chr(int(str[j+1:j+4],8)))\n   i=j+4\n return _nulljoin(res)\n \n \n \n \n \n \n \n \n_weekdayname=['Mon','Tue','Wed','Thu','Fri','Sat','Sun']\n\n_monthname=[None ,\n'Jan','Feb','Mar','Apr','May','Jun',\n'Jul','Aug','Sep','Oct','Nov','Dec']\n\ndef _getdate(future=0,weekdayname=_weekdayname,monthname=_monthname):\n from time import gmtime,time\n now=time()\n year,month,day,hh,mm,ss,wd,y,z=gmtime(now+future)\n return\"%s, %02d %3s %4d %02d:%02d:%02d GMT\"% (weekdayname[wd],day,monthname[month],year,hh,mm,ss)\n \n \nclass Morsel(dict):\n ''\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n _reserved={\n \"expires\":\"expires\",\n \"path\":\"Path\",\n \"comment\":\"Comment\",\n \"domain\":\"Domain\",\n \"max-age\":\"Max-Age\",\n \"secure\":\"secure\",\n \"httponly\":\"httponly\",\n \"version\":\"Version\",\n }\n \n _flags={'secure','httponly'}\n \n def __init__(self):\n \n  self.key=self.value=self.coded_value=None\n  \n  \n  for key in self._reserved:\n   dict.__setitem__(self,key,\"\")\n   \n def __setitem__(self,K,V):\n  K=K.lower()\n  if not K in self._reserved:\n   raise CookieError(\"Invalid Attribute %s\"%K)\n  dict.__setitem__(self,K,V)\n  \n def isReservedKey(self,K):\n  return K.lower()in self._reserved\n  \n def set(self,key,val,coded_val,LegalChars=_LegalChars):\n \n \n  if key.lower()in self._reserved:\n   raise CookieError(\"Attempt to set a reserved key: %s\"%key)\n  if any(c not in LegalChars for c in key):\n   raise CookieError(\"Illegal key value: %s\"%key)\n   \n   \n  self.key=key\n  self.value=val\n  self.coded_value=coded_val\n  \n def output(self,attrs=None ,header=\"Set-Cookie:\"):\n  return\"%s %s\"%(header,self.OutputString(attrs))\n  \n __str__=output\n \n def __repr__(self):\n  return'<%s: %s=%s>'%(self.__class__.__name__,\n  self.key,repr(self.value))\n  \n def js_output(self,attrs=None ):\n \n  return\"\"\"\n        <script type=\"text/javascript\">\n        <!-- begin hiding\n        document.cookie = \\\"%s\\\";\n        // end hiding -->\n        </script>\n        \"\"\"%(self.OutputString(attrs).replace('\"',r'\\\"'))\n  \n def OutputString(self,attrs=None ):\n \n \n  result=[]\n  append=result.append\n  \n  \n  append(\"%s=%s\"%(self.key,self.coded_value))\n  \n  \n  if attrs is None :\n   attrs=self._reserved\n  items=sorted(self.items())\n  for key,value in items:\n   if value ==\"\":\n    continue\n   if key not in attrs:\n    continue\n   if key ==\"expires\"and isinstance(value,int):\n    append(\"%s=%s\"%(self._reserved[key],_getdate(value)))\n   elif key ==\"max-age\"and isinstance(value,int):\n    append(\"%s=%d\"%(self._reserved[key],value))\n   elif key ==\"secure\":\n    append(str(self._reserved[key]))\n   elif key ==\"httponly\":\n    append(str(self._reserved[key]))\n   else :\n    append(\"%s=%s\"%(self._reserved[key],value))\n    \n    \n  return _semispacejoin(result)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n_LegalCharsPatt=r\"[\\w\\d!#%&'~_`><@,:/\\$\\*\\+\\-\\.\\^\\|\\)\\(\\?\\}\\{\\=]\"\n_CookiePattern=re.compile(r\"\"\"\n    (?x)                           # This is a verbose pattern\n    (?P<key>                       # Start of group 'key'\n    \"\"\"+_LegalCharsPatt+r\"\"\"+?   # Any word of at least one letter\n    )                              # End of group 'key'\n    (                              # Optional group: there may not be a value.\n    \\s*=\\s*                          # Equal Sign\n    (?P<val>                         # Start of group 'val'\n    \"(?:[^\\\\\"]|\\\\.)*\"                  # Any doublequoted string\n    |                                  # or\n    \\w{3},\\s[\\w\\d\\s-]{9,11}\\s[\\d:]{8}\\sGMT  # Special case for \"expires\" attr\n    |                                  # or\n    \"\"\"+_LegalCharsPatt+r\"\"\"*      # Any word or empty string\n    )                                # End of group 'val'\n    )?                             # End of optional value group\n    \\s*                            # Any number of spaces.\n    (\\s+|;|$)                      # Ending either at space, semicolon, or EOS.\n    \"\"\",re.ASCII)\n\n\n\n\n\nclass BaseCookie(dict):\n ''\n \n def value_decode(self,val):\n  ''\n\n\n\n\n  \n  return val,val\n  \n def value_encode(self,val):\n  ''\n\n\n\n  \n  strval=str(val)\n  return strval,strval\n  \n def __init__(self,input=None ):\n  if input:\n   self.load(input)\n   \n def __set(self,key,real_value,coded_value):\n  ''\n  M=self.get(key,Morsel())\n  M.set(key,real_value,coded_value)\n  dict.__setitem__(self,key,M)\n  \n def __setitem__(self,key,value):\n  ''\n  rval,cval=self.value_encode(value)\n  self.__set(key,rval,cval)\n  \n def output(self,attrs=None ,header=\"Set-Cookie:\",sep=\"\\015\\012\"):\n  ''\n  result=[]\n  items=sorted(self.items())\n  for key,value in items:\n   result.append(value.output(attrs,header))\n  return sep.join(result)\n  \n __str__=output\n \n def __repr__(self):\n  l=[]\n  items=sorted(self.items())\n  for key,value in items:\n   l.append('%s=%s'%(key,repr(value.value)))\n  return'<%s: %s>'%(self.__class__.__name__,_spacejoin(l))\n  \n def js_output(self,attrs=None ):\n  ''\n  result=[]\n  items=sorted(self.items())\n  for key,value in items:\n   result.append(value.js_output(attrs))\n  return _nulljoin(result)\n  \n def load(self,rawdata):\n  ''\n\n\n\n  \n  if isinstance(rawdata,str):\n   self.__parse_string(rawdata)\n  else :\n  \n   for key,value in rawdata.items():\n    self[key]=value\n  return\n  \n def __parse_string(self,str,patt=_CookiePattern):\n  i=0\n  n=len(str)\n  M=None\n  \n  while 0 <=i <n:\n  \n   match=patt.search(str,i)\n   if not match:\n   \n    break\n    \n   key,value=match.group(\"key\"),match.group(\"val\")\n   i=match.end(0)\n   \n   \n   if key[0]==\"$\":\n   \n   \n   \n    if M:\n     M[key[1:]]=value\n   elif key.lower()in Morsel._reserved:\n    if M:\n     if value is None :\n      if key.lower()in Morsel._flags:\n       M[key]=True\n     else :\n      M[key]=_unquote(value)\n   elif value is not None :\n    rval,cval=self.value_decode(value)\n    self.__set(key,rval,cval)\n    M=self[key]\n    \n    \nclass SimpleCookie(BaseCookie):\n ''\n\n\n\n\n \n def value_decode(self,val):\n  return _unquote(val),val\n  \n def value_encode(self,val):\n  strval=str(val)\n  return strval,_quote(strval)\n"], "pydoc_data.topics": [".py", "\n\ntopics={'assert':'\\nThe ``assert`` statement\\n************************\\n\\nAssert statements are a convenient way to insert debugging assertions\\ninto a program:\\n\\n   assert_stmt ::= \"assert\" expression [\",\" expression]\\n\\nThe simple form, ``assert expression``, is equivalent to\\n\\n   if __debug__:\\n      if not expression: raise AssertionError\\n\\nThe extended form, ``assert expression1, expression2``, is equivalent\\nto\\n\\n   if __debug__:\\n      if not expression1: raise AssertionError(expression2)\\n\\nThese equivalences assume that ``__debug__`` and ``AssertionError``\\nrefer to the built-in variables with those names.  In the current\\nimplementation, the built-in variable ``__debug__`` is ``True`` under\\nnormal circumstances, ``False`` when optimization is requested\\n(command line option -O).  The current code generator emits no code\\nfor an assert statement when optimization is requested at compile\\ntime.  Note that it is unnecessary to include the source code for the\\nexpression that failed in the error message; it will be displayed as\\npart of the stack trace.\\n\\nAssignments to ``__debug__`` are illegal.  The value for the built-in\\nvariable is determined when the interpreter starts.\\n',\n'assignment':'\\nAssignment statements\\n*********************\\n\\nAssignment statements are used to (re)bind names to values and to\\nmodify attributes or items of mutable objects:\\n\\n   assignment_stmt ::= (target_list \"=\")+ (expression_list | yield_expression)\\n   target_list     ::= target (\",\" target)* [\",\"]\\n   target          ::= identifier\\n              | \"(\" target_list \")\"\\n              | \"[\" target_list \"]\"\\n              | attributeref\\n              | subscription\\n              | slicing\\n              | \"*\" target\\n\\n(See section *Primaries* for the syntax definitions for the last three\\nsymbols.)\\n\\nAn assignment statement evaluates the expression list (remember that\\nthis can be a single expression or a comma-separated list, the latter\\nyielding a tuple) and assigns the single resulting object to each of\\nthe target lists, from left to right.\\n\\nAssignment is defined recursively depending on the form of the target\\n(list). When a target is part of a mutable object (an attribute\\nreference, subscription or slicing), the mutable object must\\nultimately perform the assignment and decide about its validity, and\\nmay raise an exception if the assignment is unacceptable.  The rules\\nobserved by various types and the exceptions raised are given with the\\ndefinition of the object types (see section *The standard type\\nhierarchy*).\\n\\nAssignment of an object to a target list, optionally enclosed in\\nparentheses or square brackets, is recursively defined as follows.\\n\\n* If the target list is a single target: The object is assigned to\\n  that target.\\n\\n* If the target list is a comma-separated list of targets: The object\\n  must be an iterable with the same number of items as there are\\n  targets in the target list, and the items are assigned, from left to\\n  right, to the corresponding targets.\\n\\n  * If the target list contains one target prefixed with an asterisk,\\n    called a \"starred\" target: The object must be a sequence with at\\n    least as many items as there are targets in the target list, minus\\n    one.  The first items of the sequence are assigned, from left to\\n    right, to the targets before the starred target.  The final items\\n    of the sequence are assigned to the targets after the starred\\n    target.  A list of the remaining items in the sequence is then\\n    assigned to the starred target (the list can be empty).\\n\\n  * Else: The object must be a sequence with the same number of items\\n    as there are targets in the target list, and the items are\\n    assigned, from left to right, to the corresponding targets.\\n\\nAssignment of an object to a single target is recursively defined as\\nfollows.\\n\\n* If the target is an identifier (name):\\n\\n  * If the name does not occur in a ``global`` or ``nonlocal``\\n    statement in the current code block: the name is bound to the\\n    object in the current local namespace.\\n\\n  * Otherwise: the name is bound to the object in the global namespace\\n    or the outer namespace determined by ``nonlocal``, respectively.\\n\\n  The name is rebound if it was already bound.  This may cause the\\n  reference count for the object previously bound to the name to reach\\n  zero, causing the object to be deallocated and its destructor (if it\\n  has one) to be called.\\n\\n* If the target is a target list enclosed in parentheses or in square\\n  brackets: The object must be an iterable with the same number of\\n  items as there are targets in the target list, and its items are\\n  assigned, from left to right, to the corresponding targets.\\n\\n* If the target is an attribute reference: The primary expression in\\n  the reference is evaluated.  It should yield an object with\\n  assignable attributes; if this is not the case, ``TypeError`` is\\n  raised.  That object is then asked to assign the assigned object to\\n  the given attribute; if it cannot perform the assignment, it raises\\n  an exception (usually but not necessarily ``AttributeError``).\\n\\n  Note: If the object is a class instance and the attribute reference\\n  occurs on both sides of the assignment operator, the RHS expression,\\n  ``a.x`` can access either an instance attribute or (if no instance\\n  attribute exists) a class attribute.  The LHS target ``a.x`` is\\n  always set as an instance attribute, creating it if necessary.\\n  Thus, the two occurrences of ``a.x`` do not necessarily refer to the\\n  same attribute: if the RHS expression refers to a class attribute,\\n  the LHS creates a new instance attribute as the target of the\\n  assignment:\\n\\n     class Cls:\\n         x = 3             # class variable\\n     inst = Cls()\\n     inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x as 3\\n\\n  This description does not necessarily apply to descriptor\\n  attributes, such as properties created with ``property()``.\\n\\n* If the target is a subscription: The primary expression in the\\n  reference is evaluated.  It should yield either a mutable sequence\\n  object (such as a list) or a mapping object (such as a dictionary).\\n  Next, the subscript expression is evaluated.\\n\\n  If the primary is a mutable sequence object (such as a list), the\\n  subscript must yield an integer.  If it is negative, the sequence\\'s\\n  length is added to it.  The resulting value must be a nonnegative\\n  integer less than the sequence\\'s length, and the sequence is asked\\n  to assign the assigned object to its item with that index.  If the\\n  index is out of range, ``IndexError`` is raised (assignment to a\\n  subscripted sequence cannot add new items to a list).\\n\\n  If the primary is a mapping object (such as a dictionary), the\\n  subscript must have a type compatible with the mapping\\'s key type,\\n  and the mapping is then asked to create a key/datum pair which maps\\n  the subscript to the assigned object.  This can either replace an\\n  existing key/value pair with the same key value, or insert a new\\n  key/value pair (if no key with the same value existed).\\n\\n  For user-defined objects, the ``__setitem__()`` method is called\\n  with appropriate arguments.\\n\\n* If the target is a slicing: The primary expression in the reference\\n  is evaluated.  It should yield a mutable sequence object (such as a\\n  list).  The assigned object should be a sequence object of the same\\n  type.  Next, the lower and upper bound expressions are evaluated,\\n  insofar they are present; defaults are zero and the sequence\\'s\\n  length.  The bounds should evaluate to integers. If either bound is\\n  negative, the sequence\\'s length is added to it.  The resulting\\n  bounds are clipped to lie between zero and the sequence\\'s length,\\n  inclusive.  Finally, the sequence object is asked to replace the\\n  slice with the items of the assigned sequence.  The length of the\\n  slice may be different from the length of the assigned sequence,\\n  thus changing the length of the target sequence, if the object\\n  allows it.\\n\\n**CPython implementation detail:** In the current implementation, the\\nsyntax for targets is taken to be the same as for expressions, and\\ninvalid syntax is rejected during the code generation phase, causing\\nless detailed error messages.\\n\\nWARNING: Although the definition of assignment implies that overlaps\\nbetween the left-hand side and the right-hand side are \\'safe\\' (for\\nexample ``a, b = b, a`` swaps two variables), overlaps *within* the\\ncollection of assigned-to variables are not safe!  For instance, the\\nfollowing program prints ``[0, 2]``:\\n\\n   x = [0, 1]\\n   i = 0\\n   i, x[i] = 1, 2\\n   print(x)\\n\\nSee also:\\n\\n   **PEP 3132** - Extended Iterable Unpacking\\n      The specification for the ``*target`` feature.\\n\\n\\nAugmented assignment statements\\n===============================\\n\\nAugmented assignment is the combination, in a single statement, of a\\nbinary operation and an assignment statement:\\n\\n   augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\\n   augtarget                 ::= identifier | attributeref | subscription | slicing\\n   augop                     ::= \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"//=\" | \"%=\" | \"**=\"\\n             | \">>=\" | \"<<=\" | \"&=\" | \"^=\" | \"|=\"\\n\\n(See section *Primaries* for the syntax definitions for the last three\\nsymbols.)\\n\\nAn augmented assignment evaluates the target (which, unlike normal\\nassignment statements, cannot be an unpacking) and the expression\\nlist, performs the binary operation specific to the type of assignment\\non the two operands, and assigns the result to the original target.\\nThe target is only evaluated once.\\n\\nAn augmented assignment expression like ``x += 1`` can be rewritten as\\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\\nthe augmented version, ``x`` is only evaluated once. Also, when\\npossible, the actual operation is performed *in-place*, meaning that\\nrather than creating a new object and assigning that to the target,\\nthe old object is modified instead.\\n\\nWith the exception of assigning to tuples and multiple targets in a\\nsingle statement, the assignment done by augmented assignment\\nstatements is handled the same way as normal assignments. Similarly,\\nwith the exception of the possible *in-place* behavior, the binary\\noperation performed by augmented assignment is the same as the normal\\nbinary operations.\\n\\nFor targets which are attribute references, the same *caveat about\\nclass and instance attributes* applies as for regular assignments.\\n',\n'atom-identifiers':'\\nIdentifiers (Names)\\n*******************\\n\\nAn identifier occurring as an atom is a name.  See section\\n*Identifiers and keywords* for lexical definition and section *Naming\\nand binding* for documentation of naming and binding.\\n\\nWhen the name is bound to an object, evaluation of the atom yields\\nthat object. When a name is not bound, an attempt to evaluate it\\nraises a ``NameError`` exception.\\n\\n**Private name mangling:** When an identifier that textually occurs in\\na class definition begins with two or more underscore characters and\\ndoes not end in two or more underscores, it is considered a *private\\nname* of that class. Private names are transformed to a longer form\\nbefore code is generated for them.  The transformation inserts the\\nclass name in front of the name, with leading underscores removed, and\\na single underscore inserted in front of the class name.  For example,\\nthe identifier ``__spam`` occurring in a class named ``Ham`` will be\\ntransformed to ``_Ham__spam``.  This transformation is independent of\\nthe syntactical context in which the identifier is used.  If the\\ntransformed name is extremely long (longer than 255 characters),\\nimplementation defined truncation may happen.  If the class name\\nconsists only of underscores, no transformation is done.\\n',\n'atom-literals':\"\\nLiterals\\n********\\n\\nPython supports string and bytes literals and various numeric\\nliterals:\\n\\n   literal ::= stringliteral | bytesliteral\\n               | integer | floatnumber | imagnumber\\n\\nEvaluation of a literal yields an object of the given type (string,\\nbytes, integer, floating point number, complex number) with the given\\nvalue.  The value may be approximated in the case of floating point\\nand imaginary (complex) literals.  See section *Literals* for details.\\n\\nAll literals correspond to immutable data types, and hence the\\nobject's identity is less important than its value.  Multiple\\nevaluations of literals with the same value (either the same\\noccurrence in the program text or a different occurrence) may obtain\\nthe same object or a different object with the same value.\\n\",\n'attribute-access':'\\nCustomizing attribute access\\n****************************\\n\\nThe following methods can be defined to customize the meaning of\\nattribute access (use of, assignment to, or deletion of ``x.name``)\\nfor class instances.\\n\\nobject.__getattr__(self, name)\\n\\n   Called when an attribute lookup has not found the attribute in the\\n   usual places (i.e. it is not an instance attribute nor is it found\\n   in the class tree for ``self``).  ``name`` is the attribute name.\\n   This method should return the (computed) attribute value or raise\\n   an ``AttributeError`` exception.\\n\\n   Note that if the attribute is found through the normal mechanism,\\n   ``__getattr__()`` is not called.  (This is an intentional asymmetry\\n   between ``__getattr__()`` and ``__setattr__()``.) This is done both\\n   for efficiency reasons and because otherwise ``__getattr__()``\\n   would have no way to access other attributes of the instance.  Note\\n   that at least for instance variables, you can fake total control by\\n   not inserting any values in the instance attribute dictionary (but\\n   instead inserting them in another object).  See the\\n   ``__getattribute__()`` method below for a way to actually get total\\n   control over attribute access.\\n\\nobject.__getattribute__(self, name)\\n\\n   Called unconditionally to implement attribute accesses for\\n   instances of the class. If the class also defines\\n   ``__getattr__()``, the latter will not be called unless\\n   ``__getattribute__()`` either calls it explicitly or raises an\\n   ``AttributeError``. This method should return the (computed)\\n   attribute value or raise an ``AttributeError`` exception. In order\\n   to avoid infinite recursion in this method, its implementation\\n   should always call the base class method with the same name to\\n   access any attributes it needs, for example,\\n   ``object.__getattribute__(self, name)``.\\n\\n   Note: This method may still be bypassed when looking up special methods\\n     as the result of implicit invocation via language syntax or\\n     built-in functions. See *Special method lookup*.\\n\\nobject.__setattr__(self, name, value)\\n\\n   Called when an attribute assignment is attempted.  This is called\\n   instead of the normal mechanism (i.e. store the value in the\\n   instance dictionary). *name* is the attribute name, *value* is the\\n   value to be assigned to it.\\n\\n   If ``__setattr__()`` wants to assign to an instance attribute, it\\n   should call the base class method with the same name, for example,\\n   ``object.__setattr__(self, name, value)``.\\n\\nobject.__delattr__(self, name)\\n\\n   Like ``__setattr__()`` but for attribute deletion instead of\\n   assignment.  This should only be implemented if ``del obj.name`` is\\n   meaningful for the object.\\n\\nobject.__dir__(self)\\n\\n   Called when ``dir()`` is called on the object. A sequence must be\\n   returned. ``dir()`` converts the returned sequence to a list and\\n   sorts it.\\n\\n\\nImplementing Descriptors\\n========================\\n\\nThe following methods only apply when an instance of the class\\ncontaining the method (a so-called *descriptor* class) appears in an\\n*owner* class (the descriptor must be in either the owner\\'s class\\ndictionary or in the class dictionary for one of its parents).  In the\\nexamples below, \"the attribute\" refers to the attribute whose name is\\nthe key of the property in the owner class\\' ``__dict__``.\\n\\nobject.__get__(self, instance, owner)\\n\\n   Called to get the attribute of the owner class (class attribute\\n   access) or of an instance of that class (instance attribute\\n   access). *owner* is always the owner class, while *instance* is the\\n   instance that the attribute was accessed through, or ``None`` when\\n   the attribute is accessed through the *owner*.  This method should\\n   return the (computed) attribute value or raise an\\n   ``AttributeError`` exception.\\n\\nobject.__set__(self, instance, value)\\n\\n   Called to set the attribute on an instance *instance* of the owner\\n   class to a new value, *value*.\\n\\nobject.__delete__(self, instance)\\n\\n   Called to delete the attribute on an instance *instance* of the\\n   owner class.\\n\\n\\nInvoking Descriptors\\n====================\\n\\nIn general, a descriptor is an object attribute with \"binding\\nbehavior\", one whose attribute access has been overridden by methods\\nin the descriptor protocol:  ``__get__()``, ``__set__()``, and\\n``__delete__()``. If any of those methods are defined for an object,\\nit is said to be a descriptor.\\n\\nThe default behavior for attribute access is to get, set, or delete\\nthe attribute from an object\\'s dictionary. For instance, ``a.x`` has a\\nlookup chain starting with ``a.__dict__[\\'x\\']``, then\\n``type(a).__dict__[\\'x\\']``, and continuing through the base classes of\\n``type(a)`` excluding metaclasses.\\n\\nHowever, if the looked-up value is an object defining one of the\\ndescriptor methods, then Python may override the default behavior and\\ninvoke the descriptor method instead.  Where this occurs in the\\nprecedence chain depends on which descriptor methods were defined and\\nhow they were called.\\n\\nThe starting point for descriptor invocation is a binding, ``a.x``.\\nHow the arguments are assembled depends on ``a``:\\n\\nDirect Call\\n   The simplest and least common call is when user code directly\\n   invokes a descriptor method:    ``x.__get__(a)``.\\n\\nInstance Binding\\n   If binding to an object instance, ``a.x`` is transformed into the\\n   call: ``type(a).__dict__[\\'x\\'].__get__(a, type(a))``.\\n\\nClass Binding\\n   If binding to a class, ``A.x`` is transformed into the call:\\n   ``A.__dict__[\\'x\\'].__get__(None, A)``.\\n\\nSuper Binding\\n   If ``a`` is an instance of ``super``, then the binding ``super(B,\\n   obj).m()`` searches ``obj.__class__.__mro__`` for the base class\\n   ``A`` immediately preceding ``B`` and then invokes the descriptor\\n   with the call: ``A.__dict__[\\'m\\'].__get__(obj, obj.__class__)``.\\n\\nFor instance bindings, the precedence of descriptor invocation depends\\non the which descriptor methods are defined.  A descriptor can define\\nany combination of ``__get__()``, ``__set__()`` and ``__delete__()``.\\nIf it does not define ``__get__()``, then accessing the attribute will\\nreturn the descriptor object itself unless there is a value in the\\nobject\\'s instance dictionary.  If the descriptor defines ``__set__()``\\nand/or ``__delete__()``, it is a data descriptor; if it defines\\nneither, it is a non-data descriptor.  Normally, data descriptors\\ndefine both ``__get__()`` and ``__set__()``, while non-data\\ndescriptors have just the ``__get__()`` method.  Data descriptors with\\n``__set__()`` and ``__get__()`` defined always override a redefinition\\nin an instance dictionary.  In contrast, non-data descriptors can be\\noverridden by instances.\\n\\nPython methods (including ``staticmethod()`` and ``classmethod()``)\\nare implemented as non-data descriptors.  Accordingly, instances can\\nredefine and override methods.  This allows individual instances to\\nacquire behaviors that differ from other instances of the same class.\\n\\nThe ``property()`` function is implemented as a data descriptor.\\nAccordingly, instances cannot override the behavior of a property.\\n\\n\\n__slots__\\n=========\\n\\nBy default, instances of classes have a dictionary for attribute\\nstorage.  This wastes space for objects having very few instance\\nvariables.  The space consumption can become acute when creating large\\nnumbers of instances.\\n\\nThe default can be overridden by defining *__slots__* in a class\\ndefinition. The *__slots__* declaration takes a sequence of instance\\nvariables and reserves just enough space in each instance to hold a\\nvalue for each variable.  Space is saved because *__dict__* is not\\ncreated for each instance.\\n\\nobject.__slots__\\n\\n   This class variable can be assigned a string, iterable, or sequence\\n   of strings with variable names used by instances.  If defined in a\\n   class, *__slots__* reserves space for the declared variables and\\n   prevents the automatic creation of *__dict__* and *__weakref__* for\\n   each instance.\\n\\n\\nNotes on using *__slots__*\\n--------------------------\\n\\n* When inheriting from a class without *__slots__*, the *__dict__*\\n  attribute of that class will always be accessible, so a *__slots__*\\n  definition in the subclass is meaningless.\\n\\n* Without a *__dict__* variable, instances cannot be assigned new\\n  variables not listed in the *__slots__* definition.  Attempts to\\n  assign to an unlisted variable name raises ``AttributeError``. If\\n  dynamic assignment of new variables is desired, then add\\n  ``\\'__dict__\\'`` to the sequence of strings in the *__slots__*\\n  declaration.\\n\\n* Without a *__weakref__* variable for each instance, classes defining\\n  *__slots__* do not support weak references to its instances. If weak\\n  reference support is needed, then add ``\\'__weakref__\\'`` to the\\n  sequence of strings in the *__slots__* declaration.\\n\\n* *__slots__* are implemented at the class level by creating\\n  descriptors (*Implementing Descriptors*) for each variable name.  As\\n  a result, class attributes cannot be used to set default values for\\n  instance variables defined by *__slots__*; otherwise, the class\\n  attribute would overwrite the descriptor assignment.\\n\\n* The action of a *__slots__* declaration is limited to the class\\n  where it is defined.  As a result, subclasses will have a *__dict__*\\n  unless they also define *__slots__* (which must only contain names\\n  of any *additional* slots).\\n\\n* If a class defines a slot also defined in a base class, the instance\\n  variable defined by the base class slot is inaccessible (except by\\n  retrieving its descriptor directly from the base class). This\\n  renders the meaning of the program undefined.  In the future, a\\n  check may be added to prevent this.\\n\\n* Nonempty *__slots__* does not work for classes derived from\\n  \"variable-length\" built-in types such as ``int``, ``str`` and\\n  ``tuple``.\\n\\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\\n  also be used; however, in the future, special meaning may be\\n  assigned to the values corresponding to each key.\\n\\n* *__class__* assignment works only if both classes have the same\\n  *__slots__*.\\n',\n'attribute-references':'\\nAttribute references\\n********************\\n\\nAn attribute reference is a primary followed by a period and a name:\\n\\n   attributeref ::= primary \".\" identifier\\n\\nThe primary must evaluate to an object of a type that supports\\nattribute references, which most objects do.  This object is then\\nasked to produce the attribute whose name is the identifier (which can\\nbe customized by overriding the ``__getattr__()`` method).  If this\\nattribute is not available, the exception ``AttributeError`` is\\nraised.  Otherwise, the type and value of the object produced is\\ndetermined by the object.  Multiple evaluations of the same attribute\\nreference may yield different objects.\\n',\n'augassign':'\\nAugmented assignment statements\\n*******************************\\n\\nAugmented assignment is the combination, in a single statement, of a\\nbinary operation and an assignment statement:\\n\\n   augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\\n   augtarget                 ::= identifier | attributeref | subscription | slicing\\n   augop                     ::= \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"//=\" | \"%=\" | \"**=\"\\n             | \">>=\" | \"<<=\" | \"&=\" | \"^=\" | \"|=\"\\n\\n(See section *Primaries* for the syntax definitions for the last three\\nsymbols.)\\n\\nAn augmented assignment evaluates the target (which, unlike normal\\nassignment statements, cannot be an unpacking) and the expression\\nlist, performs the binary operation specific to the type of assignment\\non the two operands, and assigns the result to the original target.\\nThe target is only evaluated once.\\n\\nAn augmented assignment expression like ``x += 1`` can be rewritten as\\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\\nthe augmented version, ``x`` is only evaluated once. Also, when\\npossible, the actual operation is performed *in-place*, meaning that\\nrather than creating a new object and assigning that to the target,\\nthe old object is modified instead.\\n\\nWith the exception of assigning to tuples and multiple targets in a\\nsingle statement, the assignment done by augmented assignment\\nstatements is handled the same way as normal assignments. Similarly,\\nwith the exception of the possible *in-place* behavior, the binary\\noperation performed by augmented assignment is the same as the normal\\nbinary operations.\\n\\nFor targets which are attribute references, the same *caveat about\\nclass and instance attributes* applies as for regular assignments.\\n',\n'binary':'\\nBinary arithmetic operations\\n****************************\\n\\nThe binary arithmetic operations have the conventional priority\\nlevels.  Note that some of these operations also apply to certain non-\\nnumeric types.  Apart from the power operator, there are only two\\nlevels, one for multiplicative operators and one for additive\\noperators:\\n\\n   m_expr ::= u_expr | m_expr \"*\" u_expr | m_expr \"//\" u_expr | m_expr \"/\" u_expr\\n              | m_expr \"%\" u_expr\\n   a_expr ::= m_expr | a_expr \"+\" m_expr | a_expr \"-\" m_expr\\n\\nThe ``*`` (multiplication) operator yields the product of its\\narguments.  The arguments must either both be numbers, or one argument\\nmust be an integer and the other must be a sequence. In the former\\ncase, the numbers are converted to a common type and then multiplied\\ntogether.  In the latter case, sequence repetition is performed; a\\nnegative repetition factor yields an empty sequence.\\n\\nThe ``/`` (division) and ``//`` (floor division) operators yield the\\nquotient of their arguments.  The numeric arguments are first\\nconverted to a common type. Integer division yields a float, while\\nfloor division of integers results in an integer; the result is that\\nof mathematical division with the \\'floor\\' function applied to the\\nresult.  Division by zero raises the ``ZeroDivisionError`` exception.\\n\\nThe ``%`` (modulo) operator yields the remainder from the division of\\nthe first argument by the second.  The numeric arguments are first\\nconverted to a common type.  A zero right argument raises the\\n``ZeroDivisionError`` exception.  The arguments may be floating point\\nnumbers, e.g., ``3.14%0.7`` equals ``0.34`` (since ``3.14`` equals\\n``4*0.7 + 0.34``.)  The modulo operator always yields a result with\\nthe same sign as its second operand (or zero); the absolute value of\\nthe result is strictly smaller than the absolute value of the second\\noperand [1].\\n\\nThe floor division and modulo operators are connected by the following\\nidentity: ``x == (x//y)*y + (x%y)``.  Floor division and modulo are\\nalso connected with the built-in function ``divmod()``: ``divmod(x, y)\\n== (x//y, x%y)``. [2].\\n\\nIn addition to performing the modulo operation on numbers, the ``%``\\noperator is also overloaded by string objects to perform old-style\\nstring formatting (also known as interpolation).  The syntax for\\nstring formatting is described in the Python Library Reference,\\nsection *printf-style String Formatting*.\\n\\nThe floor division operator, the modulo operator, and the ``divmod()``\\nfunction are not defined for complex numbers.  Instead, convert to a\\nfloating point number using the ``abs()`` function if appropriate.\\n\\nThe ``+`` (addition) operator yields the sum of its arguments.  The\\narguments must either both be numbers or both sequences of the same\\ntype.  In the former case, the numbers are converted to a common type\\nand then added together.  In the latter case, the sequences are\\nconcatenated.\\n\\nThe ``-`` (subtraction) operator yields the difference of its\\narguments.  The numeric arguments are first converted to a common\\ntype.\\n',\n'bitwise':'\\nBinary bitwise operations\\n*************************\\n\\nEach of the three bitwise operations has a different priority level:\\n\\n   and_expr ::= shift_expr | and_expr \"&\" shift_expr\\n   xor_expr ::= and_expr | xor_expr \"^\" and_expr\\n   or_expr  ::= xor_expr | or_expr \"|\" xor_expr\\n\\nThe ``&`` operator yields the bitwise AND of its arguments, which must\\nbe integers.\\n\\nThe ``^`` operator yields the bitwise XOR (exclusive OR) of its\\narguments, which must be integers.\\n\\nThe ``|`` operator yields the bitwise (inclusive) OR of its arguments,\\nwhich must be integers.\\n',\n'bltin-code-objects':'\\nCode Objects\\n************\\n\\nCode objects are used by the implementation to represent \"pseudo-\\ncompiled\" executable Python code such as a function body. They differ\\nfrom function objects because they don\\'t contain a reference to their\\nglobal execution environment.  Code objects are returned by the built-\\nin ``compile()`` function and can be extracted from function objects\\nthrough their ``__code__`` attribute. See also the ``code`` module.\\n\\nA code object can be executed or evaluated by passing it (instead of a\\nsource string) to the ``exec()`` or ``eval()``  built-in functions.\\n\\nSee *The standard type hierarchy* for more information.\\n',\n'bltin-ellipsis-object':'\\nThe Ellipsis Object\\n*******************\\n\\nThis object is commonly used by slicing (see *Slicings*).  It supports\\nno special operations.  There is exactly one ellipsis object, named\\n``Ellipsis`` (a built-in name).  ``type(Ellipsis)()`` produces the\\n``Ellipsis`` singleton.\\n\\nIt is written as ``Ellipsis`` or ``...``.\\n',\n'bltin-null-object':\"\\nThe Null Object\\n***************\\n\\nThis object is returned by functions that don't explicitly return a\\nvalue.  It supports no special operations.  There is exactly one null\\nobject, named ``None`` (a built-in name).  ``type(None)()`` produces\\nthe same singleton.\\n\\nIt is written as ``None``.\\n\",\n'bltin-type-objects':\"\\nType Objects\\n************\\n\\nType objects represent the various object types.  An object's type is\\naccessed by the built-in function ``type()``.  There are no special\\noperations on types.  The standard module ``types`` defines names for\\nall standard built-in types.\\n\\nTypes are written like this: ``<class 'int'>``.\\n\",\n'booleans':'\\nBoolean operations\\n******************\\n\\n   or_test  ::= and_test | or_test \"or\" and_test\\n   and_test ::= not_test | and_test \"and\" not_test\\n   not_test ::= comparison | \"not\" not_test\\n\\nIn the context of Boolean operations, and also when expressions are\\nused by control flow statements, the following values are interpreted\\nas false: ``False``, ``None``, numeric zero of all types, and empty\\nstrings and containers (including strings, tuples, lists,\\ndictionaries, sets and frozensets).  All other values are interpreted\\nas true.  User-defined objects can customize their truth value by\\nproviding a ``__bool__()`` method.\\n\\nThe operator ``not`` yields ``True`` if its argument is false,\\n``False`` otherwise.\\n\\nThe expression ``x and y`` first evaluates *x*; if *x* is false, its\\nvalue is returned; otherwise, *y* is evaluated and the resulting value\\nis returned.\\n\\nThe expression ``x or y`` first evaluates *x*; if *x* is true, its\\nvalue is returned; otherwise, *y* is evaluated and the resulting value\\nis returned.\\n\\n(Note that neither ``and`` nor ``or`` restrict the value and type they\\nreturn to ``False`` and ``True``, but rather return the last evaluated\\nargument.  This is sometimes useful, e.g., if ``s`` is a string that\\nshould be replaced by a default value if it is empty, the expression\\n``s or \\'foo\\'`` yields the desired value.  Because ``not`` has to\\ninvent a value anyway, it does not bother to return a value of the\\nsame type as its argument, so e.g., ``not \\'foo\\'`` yields ``False``,\\nnot ``\\'\\'``.)\\n',\n'break':'\\nThe ``break`` statement\\n***********************\\n\\n   break_stmt ::= \"break\"\\n\\n``break`` may only occur syntactically nested in a ``for`` or\\n``while`` loop, but not nested in a function or class definition\\nwithin that loop.\\n\\nIt terminates the nearest enclosing loop, skipping the optional\\n``else`` clause if the loop has one.\\n\\nIf a ``for`` loop is terminated by ``break``, the loop control target\\nkeeps its current value.\\n\\nWhen ``break`` passes control out of a ``try`` statement with a\\n``finally`` clause, that ``finally`` clause is executed before really\\nleaving the loop.\\n',\n'callable-types':'\\nEmulating callable objects\\n**************************\\n\\nobject.__call__(self[, args...])\\n\\n   Called when the instance is \"called\" as a function; if this method\\n   is defined, ``x(arg1, arg2, ...)`` is a shorthand for\\n   ``x.__call__(arg1, arg2, ...)``.\\n',\n'calls':'\\nCalls\\n*****\\n\\nA call calls a callable object (e.g., a *function*) with a possibly\\nempty series of *arguments*:\\n\\n   call                 ::= primary \"(\" [argument_list [\",\"] | comprehension] \")\"\\n   argument_list        ::= positional_arguments [\",\" keyword_arguments]\\n                       [\",\" \"*\" expression] [\",\" keyword_arguments]\\n                       [\",\" \"**\" expression]\\n                     | keyword_arguments [\",\" \"*\" expression]\\n                       [\",\" keyword_arguments] [\",\" \"**\" expression]\\n                     | \"*\" expression [\",\" keyword_arguments] [\",\" \"**\" expression]\\n                     | \"**\" expression\\n   positional_arguments ::= expression (\",\" expression)*\\n   keyword_arguments    ::= keyword_item (\",\" keyword_item)*\\n   keyword_item         ::= identifier \"=\" expression\\n\\nA trailing comma may be present after the positional and keyword\\narguments but does not affect the semantics.\\n\\nThe primary must evaluate to a callable object (user-defined\\nfunctions, built-in functions, methods of built-in objects, class\\nobjects, methods of class instances, and all objects having a\\n``__call__()`` method are callable).  All argument expressions are\\nevaluated before the call is attempted.  Please refer to section\\n*Function definitions* for the syntax of formal *parameter* lists.\\n\\nIf keyword arguments are present, they are first converted to\\npositional arguments, as follows.  First, a list of unfilled slots is\\ncreated for the formal parameters.  If there are N positional\\narguments, they are placed in the first N slots.  Next, for each\\nkeyword argument, the identifier is used to determine the\\ncorresponding slot (if the identifier is the same as the first formal\\nparameter name, the first slot is used, and so on).  If the slot is\\nalready filled, a ``TypeError`` exception is raised. Otherwise, the\\nvalue of the argument is placed in the slot, filling it (even if the\\nexpression is ``None``, it fills the slot).  When all arguments have\\nbeen processed, the slots that are still unfilled are filled with the\\ncorresponding default value from the function definition.  (Default\\nvalues are calculated, once, when the function is defined; thus, a\\nmutable object such as a list or dictionary used as default value will\\nbe shared by all calls that don\\'t specify an argument value for the\\ncorresponding slot; this should usually be avoided.)  If there are any\\nunfilled slots for which no default value is specified, a\\n``TypeError`` exception is raised.  Otherwise, the list of filled\\nslots is used as the argument list for the call.\\n\\n**CPython implementation detail:** An implementation may provide\\nbuilt-in functions whose positional parameters do not have names, even\\nif they are \\'named\\' for the purpose of documentation, and which\\ntherefore cannot be supplied by keyword.  In CPython, this is the case\\nfor functions implemented in C that use ``PyArg_ParseTuple()`` to\\nparse their arguments.\\n\\nIf there are more positional arguments than there are formal parameter\\nslots, a ``TypeError`` exception is raised, unless a formal parameter\\nusing the syntax ``*identifier`` is present; in this case, that formal\\nparameter receives a tuple containing the excess positional arguments\\n(or an empty tuple if there were no excess positional arguments).\\n\\nIf any keyword argument does not correspond to a formal parameter\\nname, a ``TypeError`` exception is raised, unless a formal parameter\\nusing the syntax ``**identifier`` is present; in this case, that\\nformal parameter receives a dictionary containing the excess keyword\\narguments (using the keywords as keys and the argument values as\\ncorresponding values), or a (new) empty dictionary if there were no\\nexcess keyword arguments.\\n\\nIf the syntax ``*expression`` appears in the function call,\\n``expression`` must evaluate to an iterable.  Elements from this\\niterable are treated as if they were additional positional arguments;\\nif there are positional arguments *x1*, ..., *xN*, and ``expression``\\nevaluates to a sequence *y1*, ..., *yM*, this is equivalent to a call\\nwith M+N positional arguments *x1*, ..., *xN*, *y1*, ..., *yM*.\\n\\nA consequence of this is that although the ``*expression`` syntax may\\nappear *after* some keyword arguments, it is processed *before* the\\nkeyword arguments (and the ``**expression`` argument, if any -- see\\nbelow).  So:\\n\\n   >>> def f(a, b):\\n   ...  print(a, b)\\n   ...\\n   >>> f(b=1, *(2,))\\n   2 1\\n   >>> f(a=1, *(2,))\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 1, in ?\\n   TypeError: f() got multiple values for keyword argument \\'a\\'\\n   >>> f(1, *(2,))\\n   1 2\\n\\nIt is unusual for both keyword arguments and the ``*expression``\\nsyntax to be used in the same call, so in practice this confusion does\\nnot arise.\\n\\nIf the syntax ``**expression`` appears in the function call,\\n``expression`` must evaluate to a mapping, the contents of which are\\ntreated as additional keyword arguments.  In the case of a keyword\\nappearing in both ``expression`` and as an explicit keyword argument,\\na ``TypeError`` exception is raised.\\n\\nFormal parameters using the syntax ``*identifier`` or ``**identifier``\\ncannot be used as positional argument slots or as keyword argument\\nnames.\\n\\nA call always returns some value, possibly ``None``, unless it raises\\nan exception.  How this value is computed depends on the type of the\\ncallable object.\\n\\nIf it is---\\n\\na user-defined function:\\n   The code block for the function is executed, passing it the\\n   argument list.  The first thing the code block will do is bind the\\n   formal parameters to the arguments; this is described in section\\n   *Function definitions*.  When the code block executes a ``return``\\n   statement, this specifies the return value of the function call.\\n\\na built-in function or method:\\n   The result is up to the interpreter; see *Built-in Functions* for\\n   the descriptions of built-in functions and methods.\\n\\na class object:\\n   A new instance of that class is returned.\\n\\na class instance method:\\n   The corresponding user-defined function is called, with an argument\\n   list that is one longer than the argument list of the call: the\\n   instance becomes the first argument.\\n\\na class instance:\\n   The class must define a ``__call__()`` method; the effect is then\\n   the same as if that method was called.\\n',\n'class':'\\nClass definitions\\n*****************\\n\\nA class definition defines a class object (see section *The standard\\ntype hierarchy*):\\n\\n   classdef    ::= [decorators] \"class\" classname [inheritance] \":\" suite\\n   inheritance ::= \"(\" [parameter_list] \")\"\\n   classname   ::= identifier\\n\\nA class definition is an executable statement.  The inheritance list\\nusually gives a list of base classes (see *Customizing class creation*\\nfor more advanced uses), so each item in the list should evaluate to a\\nclass object which allows subclassing.  Classes without an inheritance\\nlist inherit, by default, from the base class ``object``; hence,\\n\\n   class Foo:\\n       pass\\n\\nis equivalent to\\n\\n   class Foo(object):\\n       pass\\n\\nThe class\\'s suite is then executed in a new execution frame (see\\n*Naming and binding*), using a newly created local namespace and the\\noriginal global namespace. (Usually, the suite contains mostly\\nfunction definitions.)  When the class\\'s suite finishes execution, its\\nexecution frame is discarded but its local namespace is saved. [4] A\\nclass object is then created using the inheritance list for the base\\nclasses and the saved local namespace for the attribute dictionary.\\nThe class name is bound to this class object in the original local\\nnamespace.\\n\\nClass creation can be customized heavily using *metaclasses*.\\n\\nClasses can also be decorated: just like when decorating functions,\\n\\n   @f1(arg)\\n   @f2\\n   class Foo: pass\\n\\nis equivalent to\\n\\n   class Foo: pass\\n   Foo = f1(arg)(f2(Foo))\\n\\nThe evaluation rules for the decorator expressions are the same as for\\nfunction decorators.  The result must be a class object, which is then\\nbound to the class name.\\n\\n**Programmer\\'s note:** Variables defined in the class definition are\\nclass attributes; they are shared by instances.  Instance attributes\\ncan be set in a method with ``self.name = value``.  Both class and\\ninstance attributes are accessible through the notation\\n\"``self.name``\", and an instance attribute hides a class attribute\\nwith the same name when accessed in this way.  Class attributes can be\\nused as defaults for instance attributes, but using mutable values\\nthere can lead to unexpected results.  *Descriptors* can be used to\\ncreate instance variables with different implementation details.\\n\\nSee also:\\n\\n   **PEP 3115** - Metaclasses in Python 3 **PEP 3129** - Class\\n   Decorators\\n\\n-[ Footnotes ]-\\n\\n[1] The exception is propagated to the invocation stack unless there\\n    is a ``finally`` clause which happens to raise another exception.\\n    That new exception causes the old one to be lost.\\n\\n[2] Currently, control \"flows off the end\" except in the case of an\\n    exception or the execution of a ``return``, ``continue``, or\\n    ``break`` statement.\\n\\n[3] A string literal appearing as the first statement in the function\\n    body is transformed into the function\\'s ``__doc__`` attribute and\\n    therefore the function\\'s *docstring*.\\n\\n[4] A string literal appearing as the first statement in the class\\n    body is transformed into the namespace\\'s ``__doc__`` item and\\n    therefore the class\\'s *docstring*.\\n',\n'comparisons':'\\nComparisons\\n***********\\n\\nUnlike C, all comparison operations in Python have the same priority,\\nwhich is lower than that of any arithmetic, shifting or bitwise\\noperation.  Also unlike C, expressions like ``a < b < c`` have the\\ninterpretation that is conventional in mathematics:\\n\\n   comparison    ::= or_expr ( comp_operator or_expr )*\\n   comp_operator ::= \"<\" | \">\" | \"==\" | \">=\" | \"<=\" | \"!=\"\\n                     | \"is\" [\"not\"] | [\"not\"] \"in\"\\n\\nComparisons yield boolean values: ``True`` or ``False``.\\n\\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\\ny`` is found to be false).\\n\\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\\nexcept that each expression is evaluated at most once.\\n\\nNote that ``a op1 b op2 c`` doesn\\'t imply any kind of comparison\\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\\n(though perhaps not pretty).\\n\\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\\nthe values of two objects.  The objects need not have the same type.\\nIf both are numbers, they are converted to a common type.  Otherwise,\\nthe ``==`` and ``!=`` operators *always* consider objects of different\\ntypes to be unequal, while the ``<``, ``>``, ``>=`` and ``<=``\\noperators raise a ``TypeError`` when comparing objects of different\\ntypes that do not implement these operators for the given pair of\\ntypes.  You can control comparison behavior of objects of non-built-in\\ntypes by defining rich comparison methods like ``__gt__()``, described\\nin section *Basic customization*.\\n\\nComparison of objects of the same type depends on the type:\\n\\n* Numbers are compared arithmetically.\\n\\n* The values ``float(\\'NaN\\')`` and ``Decimal(\\'NaN\\')`` are special. The\\n  are identical to themselves, ``x is x`` but are not equal to\\n  themselves, ``x != x``.  Additionally, comparing any value to a\\n  not-a-number value will return ``False``.  For example, both ``3 <\\n  float(\\'NaN\\')`` and ``float(\\'NaN\\') < 3`` will return ``False``.\\n\\n* Bytes objects are compared lexicographically using the numeric\\n  values of their elements.\\n\\n* Strings are compared lexicographically using the numeric equivalents\\n  (the result of the built-in function ``ord()``) of their characters.\\n  [3] String and bytes object can\\'t be compared!\\n\\n* Tuples and lists are compared lexicographically using comparison of\\n  corresponding elements.  This means that to compare equal, each\\n  element must compare equal and the two sequences must be of the same\\n  type and have the same length.\\n\\n  If not equal, the sequences are ordered the same as their first\\n  differing elements.  For example, ``[1,2,x] <= [1,2,y]`` has the\\n  same value as ``x <= y``.  If the corresponding element does not\\n  exist, the shorter sequence is ordered first (for example, ``[1,2] <\\n  [1,2,3]``).\\n\\n* Mappings (dictionaries) compare equal if and only if they have the\\n  same ``(key, value)`` pairs. Order comparisons ``(\\'<\\', \\'<=\\', \\'>=\\',\\n  \\'>\\')`` raise ``TypeError``.\\n\\n* Sets and frozensets define comparison operators to mean subset and\\n  superset tests.  Those relations do not define total orderings (the\\n  two sets ``{1,2}`` and {2,3} are not equal, nor subsets of one\\n  another, nor supersets of one another).  Accordingly, sets are not\\n  appropriate arguments for functions which depend on total ordering.\\n  For example, ``min()``, ``max()``, and ``sorted()`` produce\\n  undefined results given a list of sets as inputs.\\n\\n* Most other objects of built-in types compare unequal unless they are\\n  the same object; the choice whether one object is considered smaller\\n  or larger than another one is made arbitrarily but consistently\\n  within one execution of a program.\\n\\nComparison of objects of the differing types depends on whether either\\nof the types provide explicit support for the comparison.  Most\\nnumeric types can be compared with one another.  When cross-type\\ncomparison is not supported, the comparison method returns\\n``NotImplemented``.\\n\\nThe operators ``in`` and ``not in`` test for membership.  ``x in s``\\nevaluates to true if *x* is a member of *s*, and false otherwise.  ``x\\nnot in s`` returns the negation of ``x in s``.  All built-in sequences\\nand set types support this as well as dictionary, for which ``in``\\ntests whether a the dictionary has a given key. For container types\\nsuch as list, tuple, set, frozenset, dict, or collections.deque, the\\nexpression ``x in y`` is equivalent to ``any(x is e or x == e for e in\\ny)``.\\n\\nFor the string and bytes types, ``x in y`` is true if and only if *x*\\nis a substring of *y*.  An equivalent test is ``y.find(x) != -1``.\\nEmpty strings are always considered to be a substring of any other\\nstring, so ``\"\" in \"abc\"`` will return ``True``.\\n\\nFor user-defined classes which define the ``__contains__()`` method,\\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\\n\\nFor user-defined classes which do not define ``__contains__()`` but do\\ndefine ``__iter__()``, ``x in y`` is true if some value ``z`` with ``x\\n== z`` is produced while iterating over ``y``.  If an exception is\\nraised during the iteration, it is as if ``in`` raised that exception.\\n\\nLastly, the old-style iteration protocol is tried: if a class defines\\n``__getitem__()``, ``x in y`` is true if and only if there is a non-\\nnegative integer index *i* such that ``x == y[i]``, and all lower\\ninteger indices do not raise ``IndexError`` exception.  (If any other\\nexception is raised, it is as if ``in`` raised that exception).\\n\\nThe operator ``not in`` is defined to have the inverse true value of\\n``in``.\\n\\nThe operators ``is`` and ``is not`` test for object identity: ``x is\\ny`` is true if and only if *x* and *y* are the same object.  ``x is\\nnot y`` yields the inverse truth value. [4]\\n',\n'compound':'\\nCompound statements\\n*******************\\n\\nCompound statements contain (groups of) other statements; they affect\\nor control the execution of those other statements in some way.  In\\ngeneral, compound statements span multiple lines, although in simple\\nincarnations a whole compound statement may be contained in one line.\\n\\nThe ``if``, ``while`` and ``for`` statements implement traditional\\ncontrol flow constructs.  ``try`` specifies exception handlers and/or\\ncleanup code for a group of statements, while the ``with`` statement\\nallows the execution of initialization and finalization code around a\\nblock of code.  Function and class definitions are also syntactically\\ncompound statements.\\n\\nCompound statements consist of one or more \\'clauses.\\'  A clause\\nconsists of a header and a \\'suite.\\'  The clause headers of a\\nparticular compound statement are all at the same indentation level.\\nEach clause header begins with a uniquely identifying keyword and ends\\nwith a colon.  A suite is a group of statements controlled by a\\nclause.  A suite can be one or more semicolon-separated simple\\nstatements on the same line as the header, following the header\\'s\\ncolon, or it can be one or more indented statements on subsequent\\nlines.  Only the latter form of suite can contain nested compound\\nstatements; the following is illegal, mostly because it wouldn\\'t be\\nclear to which ``if`` clause a following ``else`` clause would belong:\\n\\n   if test1: if test2: print(x)\\n\\nAlso note that the semicolon binds tighter than the colon in this\\ncontext, so that in the following example, either all or none of the\\n``print()`` calls are executed:\\n\\n   if x < y < z: print(x); print(y); print(z)\\n\\nSummarizing:\\n\\n   compound_stmt ::= if_stmt\\n                     | while_stmt\\n                     | for_stmt\\n                     | try_stmt\\n                     | with_stmt\\n                     | funcdef\\n                     | classdef\\n   suite         ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\\n   statement     ::= stmt_list NEWLINE | compound_stmt\\n   stmt_list     ::= simple_stmt (\";\" simple_stmt)* [\";\"]\\n\\nNote that statements always end in a ``NEWLINE`` possibly followed by\\na ``DEDENT``.  Also note that optional continuation clauses always\\nbegin with a keyword that cannot start a statement, thus there are no\\nambiguities (the \\'dangling ``else``\\' problem is solved in Python by\\nrequiring nested ``if`` statements to be indented).\\n\\nThe formatting of the grammar rules in the following sections places\\neach clause on a separate line for clarity.\\n\\n\\nThe ``if`` statement\\n====================\\n\\nThe ``if`` statement is used for conditional execution:\\n\\n   if_stmt ::= \"if\" expression \":\" suite\\n               ( \"elif\" expression \":\" suite )*\\n               [\"else\" \":\" suite]\\n\\nIt selects exactly one of the suites by evaluating the expressions one\\nby one until one is found to be true (see section *Boolean operations*\\nfor the definition of true and false); then that suite is executed\\n(and no other part of the ``if`` statement is executed or evaluated).\\nIf all expressions are false, the suite of the ``else`` clause, if\\npresent, is executed.\\n\\n\\nThe ``while`` statement\\n=======================\\n\\nThe ``while`` statement is used for repeated execution as long as an\\nexpression is true:\\n\\n   while_stmt ::= \"while\" expression \":\" suite\\n                  [\"else\" \":\" suite]\\n\\nThis repeatedly tests the expression and, if it is true, executes the\\nfirst suite; if the expression is false (which may be the first time\\nit is tested) the suite of the ``else`` clause, if present, is\\nexecuted and the loop terminates.\\n\\nA ``break`` statement executed in the first suite terminates the loop\\nwithout executing the ``else`` clause\\'s suite.  A ``continue``\\nstatement executed in the first suite skips the rest of the suite and\\ngoes back to testing the expression.\\n\\n\\nThe ``for`` statement\\n=====================\\n\\nThe ``for`` statement is used to iterate over the elements of a\\nsequence (such as a string, tuple or list) or other iterable object:\\n\\n   for_stmt ::= \"for\" target_list \"in\" expression_list \":\" suite\\n                [\"else\" \":\" suite]\\n\\nThe expression list is evaluated once; it should yield an iterable\\nobject.  An iterator is created for the result of the\\n``expression_list``.  The suite is then executed once for each item\\nprovided by the iterator, in the order of ascending indices.  Each\\nitem in turn is assigned to the target list using the standard rules\\nfor assignments (see *Assignment statements*), and then the suite is\\nexecuted.  When the items are exhausted (which is immediately when the\\nsequence is empty or an iterator raises a ``StopIteration``\\nexception), the suite in the ``else`` clause, if present, is executed,\\nand the loop terminates.\\n\\nA ``break`` statement executed in the first suite terminates the loop\\nwithout executing the ``else`` clause\\'s suite.  A ``continue``\\nstatement executed in the first suite skips the rest of the suite and\\ncontinues with the next item, or with the ``else`` clause if there was\\nno next item.\\n\\nThe suite may assign to the variable(s) in the target list; this does\\nnot affect the next item assigned to it.\\n\\nNames in the target list are not deleted when the loop is finished,\\nbut if the sequence is empty, it will not have been assigned to at all\\nby the loop.  Hint: the built-in function ``range()`` returns an\\niterator of integers suitable to emulate the effect of Pascal\\'s ``for\\ni := a to b do``; e.g., ``list(range(3))`` returns the list ``[0, 1,\\n2]``.\\n\\nNote: There is a subtlety when the sequence is being modified by the loop\\n  (this can only occur for mutable sequences, i.e. lists).  An\\n  internal counter is used to keep track of which item is used next,\\n  and this is incremented on each iteration.  When this counter has\\n  reached the length of the sequence the loop terminates.  This means\\n  that if the suite deletes the current (or a previous) item from the\\n  sequence, the next item will be skipped (since it gets the index of\\n  the current item which has already been treated).  Likewise, if the\\n  suite inserts an item in the sequence before the current item, the\\n  current item will be treated again the next time through the loop.\\n  This can lead to nasty bugs that can be avoided by making a\\n  temporary copy using a slice of the whole sequence, e.g.,\\n\\n     for x in a[:]:\\n         if x < 0: a.remove(x)\\n\\n\\nThe ``try`` statement\\n=====================\\n\\nThe ``try`` statement specifies exception handlers and/or cleanup code\\nfor a group of statements:\\n\\n   try_stmt  ::= try1_stmt | try2_stmt\\n   try1_stmt ::= \"try\" \":\" suite\\n                 (\"except\" [expression [\"as\" target]] \":\" suite)+\\n                 [\"else\" \":\" suite]\\n                 [\"finally\" \":\" suite]\\n   try2_stmt ::= \"try\" \":\" suite\\n                 \"finally\" \":\" suite\\n\\nThe ``except`` clause(s) specify one or more exception handlers. When\\nno exception occurs in the ``try`` clause, no exception handler is\\nexecuted. When an exception occurs in the ``try`` suite, a search for\\nan exception handler is started.  This search inspects the except\\nclauses in turn until one is found that matches the exception.  An\\nexpression-less except clause, if present, must be last; it matches\\nany exception.  For an except clause with an expression, that\\nexpression is evaluated, and the clause matches the exception if the\\nresulting object is \"compatible\" with the exception.  An object is\\ncompatible with an exception if it is the class or a base class of the\\nexception object or a tuple containing an item compatible with the\\nexception.\\n\\nIf no except clause matches the exception, the search for an exception\\nhandler continues in the surrounding code and on the invocation stack.\\n[1]\\n\\nIf the evaluation of an expression in the header of an except clause\\nraises an exception, the original search for a handler is canceled and\\na search starts for the new exception in the surrounding code and on\\nthe call stack (it is treated as if the entire ``try`` statement\\nraised the exception).\\n\\nWhen a matching except clause is found, the exception is assigned to\\nthe target specified after the ``as`` keyword in that except clause,\\nif present, and the except clause\\'s suite is executed.  All except\\nclauses must have an executable block.  When the end of this block is\\nreached, execution continues normally after the entire try statement.\\n(This means that if two nested handlers exist for the same exception,\\nand the exception occurs in the try clause of the inner handler, the\\nouter handler will not handle the exception.)\\n\\nWhen an exception has been assigned using ``as target``, it is cleared\\nat the end of the except clause.  This is as if\\n\\n   except E as N:\\n       foo\\n\\nwas translated to\\n\\n   except E as N:\\n       try:\\n           foo\\n       finally:\\n           del N\\n\\nThis means the exception must be assigned to a different name to be\\nable to refer to it after the except clause.  Exceptions are cleared\\nbecause with the traceback attached to them, they form a reference\\ncycle with the stack frame, keeping all locals in that frame alive\\nuntil the next garbage collection occurs.\\n\\nBefore an except clause\\'s suite is executed, details about the\\nexception are stored in the ``sys`` module and can be access via\\n``sys.exc_info()``. ``sys.exc_info()`` returns a 3-tuple consisting of\\nthe exception class, the exception instance and a traceback object\\n(see section *The standard type hierarchy*) identifying the point in\\nthe program where the exception occurred.  ``sys.exc_info()`` values\\nare restored to their previous values (before the call) when returning\\nfrom a function that handled an exception.\\n\\nThe optional ``else`` clause is executed if and when control flows off\\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\\nare not handled by the preceding ``except`` clauses.\\n\\nIf ``finally`` is present, it specifies a \\'cleanup\\' handler.  The\\n``try`` clause is executed, including any ``except`` and ``else``\\nclauses.  If an exception occurs in any of the clauses and is not\\nhandled, the exception is temporarily saved. The ``finally`` clause is\\nexecuted.  If there is a saved exception it is re-raised at the end of\\nthe ``finally`` clause.  If the ``finally`` clause raises another\\nexception, the saved exception is set as the context of the new\\nexception. If the ``finally`` clause executes a ``return`` or\\n``break`` statement, the saved exception is discarded:\\n\\n   def f():\\n       try:\\n           1/0\\n       finally:\\n           return 42\\n\\n   >>> f()\\n   42\\n\\nThe exception information is not available to the program during\\nexecution of the ``finally`` clause.\\n\\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\\nthe ``try`` suite of a ``try``...``finally`` statement, the\\n``finally`` clause is also executed \\'on the way out.\\' A ``continue``\\nstatement is illegal in the ``finally`` clause. (The reason is a\\nproblem with the current implementation --- this restriction may be\\nlifted in the future).\\n\\nAdditional information on exceptions can be found in section\\n*Exceptions*, and information on using the ``raise`` statement to\\ngenerate exceptions may be found in section *The raise statement*.\\n\\n\\nThe ``with`` statement\\n======================\\n\\nThe ``with`` statement is used to wrap the execution of a block with\\nmethods defined by a context manager (see section *With Statement\\nContext Managers*). This allows common\\n``try``...``except``...``finally`` usage patterns to be encapsulated\\nfor convenient reuse.\\n\\n   with_stmt ::= \"with\" with_item (\",\" with_item)* \":\" suite\\n   with_item ::= expression [\"as\" target]\\n\\nThe execution of the ``with`` statement with one \"item\" proceeds as\\nfollows:\\n\\n1. The context expression (the expression given in the ``with_item``)\\n   is evaluated to obtain a context manager.\\n\\n2. The context manager\\'s ``__exit__()`` is loaded for later use.\\n\\n3. The context manager\\'s ``__enter__()`` method is invoked.\\n\\n4. If a target was included in the ``with`` statement, the return\\n   value from ``__enter__()`` is assigned to it.\\n\\n   Note: The ``with`` statement guarantees that if the ``__enter__()``\\n     method returns without an error, then ``__exit__()`` will always\\n     be called. Thus, if an error occurs during the assignment to the\\n     target list, it will be treated the same as an error occurring\\n     within the suite would be. See step 6 below.\\n\\n5. The suite is executed.\\n\\n6. The context manager\\'s ``__exit__()`` method is invoked.  If an\\n   exception caused the suite to be exited, its type, value, and\\n   traceback are passed as arguments to ``__exit__()``. Otherwise,\\n   three ``None`` arguments are supplied.\\n\\n   If the suite was exited due to an exception, and the return value\\n   from the ``__exit__()`` method was false, the exception is\\n   reraised.  If the return value was true, the exception is\\n   suppressed, and execution continues with the statement following\\n   the ``with`` statement.\\n\\n   If the suite was exited for any reason other than an exception, the\\n   return value from ``__exit__()`` is ignored, and execution proceeds\\n   at the normal location for the kind of exit that was taken.\\n\\nWith more than one item, the context managers are processed as if\\nmultiple ``with`` statements were nested:\\n\\n   with A() as a, B() as b:\\n       suite\\n\\nis equivalent to\\n\\n   with A() as a:\\n       with B() as b:\\n           suite\\n\\nChanged in version 3.1: Support for multiple context expressions.\\n\\nSee also:\\n\\n   **PEP 0343** - The \"with\" statement\\n      The specification, background, and examples for the Python\\n      ``with`` statement.\\n\\n\\nFunction definitions\\n====================\\n\\nA function definition defines a user-defined function object (see\\nsection *The standard type hierarchy*):\\n\\n   funcdef        ::= [decorators] \"def\" funcname \"(\" [parameter_list] \")\" [\"->\" expression] \":\" suite\\n   decorators     ::= decorator+\\n   decorator      ::= \"@\" dotted_name [\"(\" [parameter_list [\",\"]] \")\"] NEWLINE\\n   dotted_name    ::= identifier (\".\" identifier)*\\n   parameter_list ::= (defparameter \",\")*\\n                      ( \"*\" [parameter] (\",\" defparameter)* [\",\" \"**\" parameter]\\n                      | \"**\" parameter\\n                      | defparameter [\",\"] )\\n   parameter      ::= identifier [\":\" expression]\\n   defparameter   ::= parameter [\"=\" expression]\\n   funcname       ::= identifier\\n\\nA function definition is an executable statement.  Its execution binds\\nthe function name in the current local namespace to a function object\\n(a wrapper around the executable code for the function).  This\\nfunction object contains a reference to the current global namespace\\nas the global namespace to be used when the function is called.\\n\\nThe function definition does not execute the function body; this gets\\nexecuted only when the function is called. [3]\\n\\nA function definition may be wrapped by one or more *decorator*\\nexpressions. Decorator expressions are evaluated when the function is\\ndefined, in the scope that contains the function definition.  The\\nresult must be a callable, which is invoked with the function object\\nas the only argument. The returned value is bound to the function name\\ninstead of the function object.  Multiple decorators are applied in\\nnested fashion. For example, the following code\\n\\n   @f1(arg)\\n   @f2\\n   def func(): pass\\n\\nis equivalent to\\n\\n   def func(): pass\\n   func = f1(arg)(f2(func))\\n\\nWhen one or more *parameters* have the form *parameter* ``=``\\n*expression*, the function is said to have \"default parameter values.\"\\nFor a parameter with a default value, the corresponding *argument* may\\nbe omitted from a call, in which case the parameter\\'s default value is\\nsubstituted.  If a parameter has a default value, all following\\nparameters up until the \"``*``\" must also have a default value ---\\nthis is a syntactic restriction that is not expressed by the grammar.\\n\\n**Default parameter values are evaluated when the function definition\\nis executed.** This means that the expression is evaluated once, when\\nthe function is defined, and that the same \"pre-computed\" value is\\nused for each call.  This is especially important to understand when a\\ndefault parameter is a mutable object, such as a list or a dictionary:\\nif the function modifies the object (e.g. by appending an item to a\\nlist), the default value is in effect modified. This is generally not\\nwhat was intended.  A way around this is to use ``None`` as the\\ndefault, and explicitly test for it in the body of the function, e.g.:\\n\\n   def whats_on_the_telly(penguin=None):\\n       if penguin is None:\\n           penguin = []\\n       penguin.append(\"property of the zoo\")\\n       return penguin\\n\\nFunction call semantics are described in more detail in section\\n*Calls*. A function call always assigns values to all parameters\\nmentioned in the parameter list, either from position arguments, from\\nkeyword arguments, or from default values.  If the form\\n\"``*identifier``\" is present, it is initialized to a tuple receiving\\nany excess positional parameters, defaulting to the empty tuple.  If\\nthe form \"``**identifier``\" is present, it is initialized to a new\\ndictionary receiving any excess keyword arguments, defaulting to a new\\nempty dictionary. Parameters after \"``*``\" or \"``*identifier``\" are\\nkeyword-only parameters and may only be passed used keyword arguments.\\n\\nParameters may have annotations of the form \"``: expression``\"\\nfollowing the parameter name.  Any parameter may have an annotation\\neven those of the form ``*identifier`` or ``**identifier``.  Functions\\nmay have \"return\" annotation of the form \"``-> expression``\" after the\\nparameter list.  These annotations can be any valid Python expression\\nand are evaluated when the function definition is executed.\\nAnnotations may be evaluated in a different order than they appear in\\nthe source code.  The presence of annotations does not change the\\nsemantics of a function.  The annotation values are available as\\nvalues of a dictionary keyed by the parameters\\' names in the\\n``__annotations__`` attribute of the function object.\\n\\nIt is also possible to create anonymous functions (functions not bound\\nto a name), for immediate use in expressions.  This uses lambda forms,\\ndescribed in section *Lambdas*.  Note that the lambda form is merely a\\nshorthand for a simplified function definition; a function defined in\\na \"``def``\" statement can be passed around or assigned to another name\\njust like a function defined by a lambda form.  The \"``def``\" form is\\nactually more powerful since it allows the execution of multiple\\nstatements and annotations.\\n\\n**Programmer\\'s note:** Functions are first-class objects.  A \"``def``\"\\nform executed inside a function definition defines a local function\\nthat can be returned or passed around.  Free variables used in the\\nnested function can access the local variables of the function\\ncontaining the def.  See section *Naming and binding* for details.\\n\\nSee also:\\n\\n   **PEP 3107** - Function Annotations\\n      The original specification for function annotations.\\n\\n\\nClass definitions\\n=================\\n\\nA class definition defines a class object (see section *The standard\\ntype hierarchy*):\\n\\n   classdef    ::= [decorators] \"class\" classname [inheritance] \":\" suite\\n   inheritance ::= \"(\" [parameter_list] \")\"\\n   classname   ::= identifier\\n\\nA class definition is an executable statement.  The inheritance list\\nusually gives a list of base classes (see *Customizing class creation*\\nfor more advanced uses), so each item in the list should evaluate to a\\nclass object which allows subclassing.  Classes without an inheritance\\nlist inherit, by default, from the base class ``object``; hence,\\n\\n   class Foo:\\n       pass\\n\\nis equivalent to\\n\\n   class Foo(object):\\n       pass\\n\\nThe class\\'s suite is then executed in a new execution frame (see\\n*Naming and binding*), using a newly created local namespace and the\\noriginal global namespace. (Usually, the suite contains mostly\\nfunction definitions.)  When the class\\'s suite finishes execution, its\\nexecution frame is discarded but its local namespace is saved. [4] A\\nclass object is then created using the inheritance list for the base\\nclasses and the saved local namespace for the attribute dictionary.\\nThe class name is bound to this class object in the original local\\nnamespace.\\n\\nClass creation can be customized heavily using *metaclasses*.\\n\\nClasses can also be decorated: just like when decorating functions,\\n\\n   @f1(arg)\\n   @f2\\n   class Foo: pass\\n\\nis equivalent to\\n\\n   class Foo: pass\\n   Foo = f1(arg)(f2(Foo))\\n\\nThe evaluation rules for the decorator expressions are the same as for\\nfunction decorators.  The result must be a class object, which is then\\nbound to the class name.\\n\\n**Programmer\\'s note:** Variables defined in the class definition are\\nclass attributes; they are shared by instances.  Instance attributes\\ncan be set in a method with ``self.name = value``.  Both class and\\ninstance attributes are accessible through the notation\\n\"``self.name``\", and an instance attribute hides a class attribute\\nwith the same name when accessed in this way.  Class attributes can be\\nused as defaults for instance attributes, but using mutable values\\nthere can lead to unexpected results.  *Descriptors* can be used to\\ncreate instance variables with different implementation details.\\n\\nSee also:\\n\\n   **PEP 3115** - Metaclasses in Python 3 **PEP 3129** - Class\\n   Decorators\\n\\n-[ Footnotes ]-\\n\\n[1] The exception is propagated to the invocation stack unless there\\n    is a ``finally`` clause which happens to raise another exception.\\n    That new exception causes the old one to be lost.\\n\\n[2] Currently, control \"flows off the end\" except in the case of an\\n    exception or the execution of a ``return``, ``continue``, or\\n    ``break`` statement.\\n\\n[3] A string literal appearing as the first statement in the function\\n    body is transformed into the function\\'s ``__doc__`` attribute and\\n    therefore the function\\'s *docstring*.\\n\\n[4] A string literal appearing as the first statement in the class\\n    body is transformed into the namespace\\'s ``__doc__`` item and\\n    therefore the class\\'s *docstring*.\\n',\n'context-managers':'\\nWith Statement Context Managers\\n*******************************\\n\\nA *context manager* is an object that defines the runtime context to\\nbe established when executing a ``with`` statement. The context\\nmanager handles the entry into, and the exit from, the desired runtime\\ncontext for the execution of the block of code.  Context managers are\\nnormally invoked using the ``with`` statement (described in section\\n*The with statement*), but can also be used by directly invoking their\\nmethods.\\n\\nTypical uses of context managers include saving and restoring various\\nkinds of global state, locking and unlocking resources, closing opened\\nfiles, etc.\\n\\nFor more information on context managers, see *Context Manager Types*.\\n\\nobject.__enter__(self)\\n\\n   Enter the runtime context related to this object. The ``with``\\n   statement will bind this method\\'s return value to the target(s)\\n   specified in the ``as`` clause of the statement, if any.\\n\\nobject.__exit__(self, exc_type, exc_value, traceback)\\n\\n   Exit the runtime context related to this object. The parameters\\n   describe the exception that caused the context to be exited. If the\\n   context was exited without an exception, all three arguments will\\n   be ``None``.\\n\\n   If an exception is supplied, and the method wishes to suppress the\\n   exception (i.e., prevent it from being propagated), it should\\n   return a true value. Otherwise, the exception will be processed\\n   normally upon exit from this method.\\n\\n   Note that ``__exit__()`` methods should not reraise the passed-in\\n   exception; this is the caller\\'s responsibility.\\n\\nSee also:\\n\\n   **PEP 0343** - The \"with\" statement\\n      The specification, background, and examples for the Python\\n      ``with`` statement.\\n',\n'continue':'\\nThe ``continue`` statement\\n**************************\\n\\n   continue_stmt ::= \"continue\"\\n\\n``continue`` may only occur syntactically nested in a ``for`` or\\n``while`` loop, but not nested in a function or class definition or\\n``finally`` clause within that loop.  It continues with the next cycle\\nof the nearest enclosing loop.\\n\\nWhen ``continue`` passes control out of a ``try`` statement with a\\n``finally`` clause, that ``finally`` clause is executed before really\\nstarting the next loop cycle.\\n',\n'conversions':'\\nArithmetic conversions\\n**********************\\n\\nWhen a description of an arithmetic operator below uses the phrase\\n\"the numeric arguments are converted to a common type,\" this means\\nthat the operator implementation for built-in types works that way:\\n\\n* If either argument is a complex number, the other is converted to\\n  complex;\\n\\n* otherwise, if either argument is a floating point number, the other\\n  is converted to floating point;\\n\\n* otherwise, both must be integers and no conversion is necessary.\\n\\nSome additional rules apply for certain operators (e.g., a string left\\nargument to the \\'%\\' operator).  Extensions must define their own\\nconversion behavior.\\n',\n'customization':'\\nBasic customization\\n*******************\\n\\nobject.__new__(cls[, ...])\\n\\n   Called to create a new instance of class *cls*.  ``__new__()`` is a\\n   static method (special-cased so you need not declare it as such)\\n   that takes the class of which an instance was requested as its\\n   first argument.  The remaining arguments are those passed to the\\n   object constructor expression (the call to the class).  The return\\n   value of ``__new__()`` should be the new object instance (usually\\n   an instance of *cls*).\\n\\n   Typical implementations create a new instance of the class by\\n   invoking the superclass\\'s ``__new__()`` method using\\n   ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\\n   arguments and then modifying the newly-created instance as\\n   necessary before returning it.\\n\\n   If ``__new__()`` returns an instance of *cls*, then the new\\n   instance\\'s ``__init__()`` method will be invoked like\\n   ``__init__(self[, ...])``, where *self* is the new instance and the\\n   remaining arguments are the same as were passed to ``__new__()``.\\n\\n   If ``__new__()`` does not return an instance of *cls*, then the new\\n   instance\\'s ``__init__()`` method will not be invoked.\\n\\n   ``__new__()`` is intended mainly to allow subclasses of immutable\\n   types (like int, str, or tuple) to customize instance creation.  It\\n   is also commonly overridden in custom metaclasses in order to\\n   customize class creation.\\n\\nobject.__init__(self[, ...])\\n\\n   Called when the instance is created.  The arguments are those\\n   passed to the class constructor expression.  If a base class has an\\n   ``__init__()`` method, the derived class\\'s ``__init__()`` method,\\n   if any, must explicitly call it to ensure proper initialization of\\n   the base class part of the instance; for example:\\n   ``BaseClass.__init__(self, [args...])``.  As a special constraint\\n   on constructors, no value may be returned; doing so will cause a\\n   ``TypeError`` to be raised at runtime.\\n\\nobject.__del__(self)\\n\\n   Called when the instance is about to be destroyed.  This is also\\n   called a destructor.  If a base class has a ``__del__()`` method,\\n   the derived class\\'s ``__del__()`` method, if any, must explicitly\\n   call it to ensure proper deletion of the base class part of the\\n   instance.  Note that it is possible (though not recommended!) for\\n   the ``__del__()`` method to postpone destruction of the instance by\\n   creating a new reference to it.  It may then be called at a later\\n   time when this new reference is deleted.  It is not guaranteed that\\n   ``__del__()`` methods are called for objects that still exist when\\n   the interpreter exits.\\n\\n   Note: ``del x`` doesn\\'t directly call ``x.__del__()`` --- the former\\n     decrements the reference count for ``x`` by one, and the latter\\n     is only called when ``x``\\'s reference count reaches zero.  Some\\n     common situations that may prevent the reference count of an\\n     object from going to zero include: circular references between\\n     objects (e.g., a doubly-linked list or a tree data structure with\\n     parent and child pointers); a reference to the object on the\\n     stack frame of a function that caught an exception (the traceback\\n     stored in ``sys.exc_info()[2]`` keeps the stack frame alive); or\\n     a reference to the object on the stack frame that raised an\\n     unhandled exception in interactive mode (the traceback stored in\\n     ``sys.last_traceback`` keeps the stack frame alive).  The first\\n     situation can only be remedied by explicitly breaking the cycles;\\n     the latter two situations can be resolved by storing ``None`` in\\n     ``sys.last_traceback``. Circular references which are garbage are\\n     detected when the option cycle detector is enabled (it\\'s on by\\n     default), but can only be cleaned up if there are no Python-\\n     level ``__del__()`` methods involved. Refer to the documentation\\n     for the ``gc`` module for more information about how\\n     ``__del__()`` methods are handled by the cycle detector,\\n     particularly the description of the ``garbage`` value.\\n\\n   Warning: Due to the precarious circumstances under which ``__del__()``\\n     methods are invoked, exceptions that occur during their execution\\n     are ignored, and a warning is printed to ``sys.stderr`` instead.\\n     Also, when ``__del__()`` is invoked in response to a module being\\n     deleted (e.g., when execution of the program is done), other\\n     globals referenced by the ``__del__()`` method may already have\\n     been deleted or in the process of being torn down (e.g. the\\n     import machinery shutting down).  For this reason, ``__del__()``\\n     methods should do the absolute minimum needed to maintain\\n     external invariants.  Starting with version 1.5, Python\\n     guarantees that globals whose name begins with a single\\n     underscore are deleted from their module before other globals are\\n     deleted; if no other references to such globals exist, this may\\n     help in assuring that imported modules are still available at the\\n     time when the ``__del__()`` method is called.\\n\\nobject.__repr__(self)\\n\\n   Called by the ``repr()`` built-in function to compute the\\n   \"official\" string representation of an object.  If at all possible,\\n   this should look like a valid Python expression that could be used\\n   to recreate an object with the same value (given an appropriate\\n   environment).  If this is not possible, a string of the form\\n   ``<...some useful description...>`` should be returned. The return\\n   value must be a string object. If a class defines ``__repr__()``\\n   but not ``__str__()``, then ``__repr__()`` is also used when an\\n   \"informal\" string representation of instances of that class is\\n   required.\\n\\n   This is typically used for debugging, so it is important that the\\n   representation is information-rich and unambiguous.\\n\\nobject.__str__(self)\\n\\n   Called by ``str(object)`` and the built-in functions ``format()``\\n   and ``print()`` to compute the \"informal\" or nicely printable\\n   string representation of an object.  The return value must be a\\n   *string* object.\\n\\n   This method differs from ``object.__repr__()`` in that there is no\\n   expectation that ``__str__()`` return a valid Python expression: a\\n   more convenient or concise representation can be used.\\n\\n   The default implementation defined by the built-in type ``object``\\n   calls ``object.__repr__()``.\\n\\nobject.__bytes__(self)\\n\\n   Called by ``bytes()`` to compute a byte-string representation of an\\n   object. This should return a ``bytes`` object.\\n\\nobject.__format__(self, format_spec)\\n\\n   Called by the ``format()`` built-in function (and by extension, the\\n   ``str.format()`` method of class ``str``) to produce a \"formatted\"\\n   string representation of an object. The ``format_spec`` argument is\\n   a string that contains a description of the formatting options\\n   desired. The interpretation of the ``format_spec`` argument is up\\n   to the type implementing ``__format__()``, however most classes\\n   will either delegate formatting to one of the built-in types, or\\n   use a similar formatting option syntax.\\n\\n   See *Format Specification Mini-Language* for a description of the\\n   standard formatting syntax.\\n\\n   The return value must be a string object.\\n\\nobject.__lt__(self, other)\\nobject.__le__(self, other)\\nobject.__eq__(self, other)\\nobject.__ne__(self, other)\\nobject.__gt__(self, other)\\nobject.__ge__(self, other)\\n\\n   These are the so-called \"rich comparison\" methods. The\\n   correspondence between operator symbols and method names is as\\n   follows: ``x<y`` calls ``x.__lt__(y)``, ``x<=y`` calls\\n   ``x.__le__(y)``, ``x==y`` calls ``x.__eq__(y)``, ``x!=y`` calls\\n   ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and ``x>=y`` calls\\n   ``x.__ge__(y)``.\\n\\n   A rich comparison method may return the singleton\\n   ``NotImplemented`` if it does not implement the operation for a\\n   given pair of arguments. By convention, ``False`` and ``True`` are\\n   returned for a successful comparison. However, these methods can\\n   return any value, so if the comparison operator is used in a\\n   Boolean context (e.g., in the condition of an ``if`` statement),\\n   Python will call ``bool()`` on the value to determine if the result\\n   is true or false.\\n\\n   There are no implied relationships among the comparison operators.\\n   The truth of ``x==y`` does not imply that ``x!=y`` is false.\\n   Accordingly, when defining ``__eq__()``, one should also define\\n   ``__ne__()`` so that the operators will behave as expected.  See\\n   the paragraph on ``__hash__()`` for some important notes on\\n   creating *hashable* objects which support custom comparison\\n   operations and are usable as dictionary keys.\\n\\n   There are no swapped-argument versions of these methods (to be used\\n   when the left argument does not support the operation but the right\\n   argument does); rather, ``__lt__()`` and ``__gt__()`` are each\\n   other\\'s reflection, ``__le__()`` and ``__ge__()`` are each other\\'s\\n   reflection, and ``__eq__()`` and ``__ne__()`` are their own\\n   reflection.\\n\\n   Arguments to rich comparison methods are never coerced.\\n\\n   To automatically generate ordering operations from a single root\\n   operation, see ``functools.total_ordering()``.\\n\\nobject.__hash__(self)\\n\\n   Called by built-in function ``hash()`` and for operations on\\n   members of hashed collections including ``set``, ``frozenset``, and\\n   ``dict``.  ``__hash__()`` should return an integer.  The only\\n   required property is that objects which compare equal have the same\\n   hash value; it is advised to somehow mix together (e.g. using\\n   exclusive or) the hash values for the components of the object that\\n   also play a part in comparison of objects.\\n\\n   If a class does not define an ``__eq__()`` method it should not\\n   define a ``__hash__()`` operation either; if it defines\\n   ``__eq__()`` but not ``__hash__()``, its instances will not be\\n   usable as items in hashable collections.  If a class defines\\n   mutable objects and implements an ``__eq__()`` method, it should\\n   not implement ``__hash__()``, since the implementation of hashable\\n   collections requires that a key\\'s hash value is immutable (if the\\n   object\\'s hash value changes, it will be in the wrong hash bucket).\\n\\n   User-defined classes have ``__eq__()`` and ``__hash__()`` methods\\n   by default; with them, all objects compare unequal (except with\\n   themselves) and ``x.__hash__()`` returns an appropriate value such\\n   that ``x == y`` implies both that ``x is y`` and ``hash(x) ==\\n   hash(y)``.\\n\\n   A class that overrides ``__eq__()`` and does not define\\n   ``__hash__()`` will have its ``__hash__()`` implicitly set to\\n   ``None``.  When the ``__hash__()`` method of a class is ``None``,\\n   instances of the class will raise an appropriate ``TypeError`` when\\n   a program attempts to retrieve their hash value, and will also be\\n   correctly identified as unhashable when checking ``isinstance(obj,\\n   collections.Hashable``).\\n\\n   If a class that overrides ``__eq__()`` needs to retain the\\n   implementation of ``__hash__()`` from a parent class, the\\n   interpreter must be told this explicitly by setting ``__hash__ =\\n   <ParentClass>.__hash__``.\\n\\n   If a class that does not override ``__eq__()`` wishes to suppress\\n   hash support, it should include ``__hash__ = None`` in the class\\n   definition. A class which defines its own ``__hash__()`` that\\n   explicitly raises a ``TypeError`` would be incorrectly identified\\n   as hashable by an ``isinstance(obj, collections.Hashable)`` call.\\n\\n   Note: By default, the ``__hash__()`` values of str, bytes and datetime\\n     objects are \"salted\" with an unpredictable random value.\\n     Although they remain constant within an individual Python\\n     process, they are not predictable between repeated invocations of\\n     Python.This is intended to provide protection against a denial-\\n     of-service caused by carefully-chosen inputs that exploit the\\n     worst case performance of a dict insertion, O(n^2) complexity.\\n     See http://www.ocert.org/advisories/ocert-2011-003.html for\\n     details.Changing hash values affects the iteration order of\\n     dicts, sets and other mappings.  Python has never made guarantees\\n     about this ordering (and it typically varies between 32-bit and\\n     64-bit builds).See also ``PYTHONHASHSEED``.\\n\\n   Changed in version 3.3: Hash randomization is enabled by default.\\n\\nobject.__bool__(self)\\n\\n   Called to implement truth value testing and the built-in operation\\n   ``bool()``; should return ``False`` or ``True``.  When this method\\n   is not defined, ``__len__()`` is called, if it is defined, and the\\n   object is considered true if its result is nonzero.  If a class\\n   defines neither ``__len__()`` nor ``__bool__()``, all its instances\\n   are considered true.\\n',\n'debugger':'\\n``pdb`` --- The Python Debugger\\n*******************************\\n\\nThe module ``pdb`` defines an interactive source code debugger for\\nPython programs.  It supports setting (conditional) breakpoints and\\nsingle stepping at the source line level, inspection of stack frames,\\nsource code listing, and evaluation of arbitrary Python code in the\\ncontext of any stack frame.  It also supports post-mortem debugging\\nand can be called under program control.\\n\\nThe debugger is extensible -- it is actually defined as the class\\n``Pdb``. This is currently undocumented but easily understood by\\nreading the source.  The extension interface uses the modules ``bdb``\\nand ``cmd``.\\n\\nThe debugger\\'s prompt is ``(Pdb)``. Typical usage to run a program\\nunder control of the debugger is:\\n\\n   >>> import pdb\\n   >>> import mymodule\\n   >>> pdb.run(\\'mymodule.test()\\')\\n   > <string>(0)?()\\n   (Pdb) continue\\n   > <string>(1)?()\\n   (Pdb) continue\\n   NameError: \\'spam\\'\\n   > <string>(1)?()\\n   (Pdb)\\n\\nChanged in version 3.3: Tab-completion via the ``readline`` module is\\navailable for commands and command arguments, e.g. the current global\\nand local names are offered as arguments of the ``print`` command.\\n\\n``pdb.py`` can also be invoked as a script to debug other scripts.\\nFor example:\\n\\n   python3 -m pdb myscript.py\\n\\nWhen invoked as a script, pdb will automatically enter post-mortem\\ndebugging if the program being debugged exits abnormally.  After post-\\nmortem debugging (or after normal exit of the program), pdb will\\nrestart the program.  Automatic restarting preserves pdb\\'s state (such\\nas breakpoints) and in most cases is more useful than quitting the\\ndebugger upon program\\'s exit.\\n\\nNew in version 3.2: ``pdb.py`` now accepts a ``-c`` option that\\nexecutes commands as if given in a ``.pdbrc`` file, see *Debugger\\nCommands*.\\n\\nThe typical usage to break into the debugger from a running program is\\nto insert\\n\\n   import pdb; pdb.set_trace()\\n\\nat the location you want to break into the debugger.  You can then\\nstep through the code following this statement, and continue running\\nwithout the debugger using the ``continue`` command.\\n\\nThe typical usage to inspect a crashed program is:\\n\\n   >>> import pdb\\n   >>> import mymodule\\n   >>> mymodule.test()\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 1, in ?\\n     File \"./mymodule.py\", line 4, in test\\n       test2()\\n     File \"./mymodule.py\", line 3, in test2\\n       print(spam)\\n   NameError: spam\\n   >>> pdb.pm()\\n   > ./mymodule.py(3)test2()\\n   -> print(spam)\\n   (Pdb)\\n\\nThe module defines the following functions; each enters the debugger\\nin a slightly different way:\\n\\npdb.run(statement, globals=None, locals=None)\\n\\n   Execute the *statement* (given as a string or a code object) under\\n   debugger control.  The debugger prompt appears before any code is\\n   executed; you can set breakpoints and type ``continue``, or you can\\n   step through the statement using ``step`` or ``next`` (all these\\n   commands are explained below).  The optional *globals* and *locals*\\n   arguments specify the environment in which the code is executed; by\\n   default the dictionary of the module ``__main__`` is used.  (See\\n   the explanation of the built-in ``exec()`` or ``eval()``\\n   functions.)\\n\\npdb.runeval(expression, globals=None, locals=None)\\n\\n   Evaluate the *expression* (given as a string or a code object)\\n   under debugger control.  When ``runeval()`` returns, it returns the\\n   value of the expression.  Otherwise this function is similar to\\n   ``run()``.\\n\\npdb.runcall(function, *args, **kwds)\\n\\n   Call the *function* (a function or method object, not a string)\\n   with the given arguments.  When ``runcall()`` returns, it returns\\n   whatever the function call returned.  The debugger prompt appears\\n   as soon as the function is entered.\\n\\npdb.set_trace()\\n\\n   Enter the debugger at the calling stack frame.  This is useful to\\n   hard-code a breakpoint at a given point in a program, even if the\\n   code is not otherwise being debugged (e.g. when an assertion\\n   fails).\\n\\npdb.post_mortem(traceback=None)\\n\\n   Enter post-mortem debugging of the given *traceback* object.  If no\\n   *traceback* is given, it uses the one of the exception that is\\n   currently being handled (an exception must be being handled if the\\n   default is to be used).\\n\\npdb.pm()\\n\\n   Enter post-mortem debugging of the traceback found in\\n   ``sys.last_traceback``.\\n\\nThe ``run*`` functions and ``set_trace()`` are aliases for\\ninstantiating the ``Pdb`` class and calling the method of the same\\nname.  If you want to access further features, you have to do this\\nyourself:\\n\\nclass class pdb.Pdb(completekey=\\'tab\\', stdin=None, stdout=None, skip=None, nosigint=False)\\n\\n   ``Pdb`` is the debugger class.\\n\\n   The *completekey*, *stdin* and *stdout* arguments are passed to the\\n   underlying ``cmd.Cmd`` class; see the description there.\\n\\n   The *skip* argument, if given, must be an iterable of glob-style\\n   module name patterns.  The debugger will not step into frames that\\n   originate in a module that matches one of these patterns. [1]\\n\\n   By default, Pdb sets a handler for the SIGINT signal (which is sent\\n   when the user presses Ctrl-C on the console) when you give a\\n   ``continue`` command. This allows you to break into the debugger\\n   again by pressing Ctrl-C.  If you want Pdb not to touch the SIGINT\\n   handler, set *nosigint* tot true.\\n\\n   Example call to enable tracing with *skip*:\\n\\n      import pdb; pdb.Pdb(skip=[\\'django.*\\']).set_trace()\\n\\n   New in version 3.1: The *skip* argument.\\n\\n   New in version 3.2: The *nosigint* argument.  Previously, a SIGINT\\n   handler was never set by Pdb.\\n\\n   run(statement, globals=None, locals=None)\\n   runeval(expression, globals=None, locals=None)\\n   runcall(function, *args, **kwds)\\n   set_trace()\\n\\n      See the documentation for the functions explained above.\\n\\n\\nDebugger Commands\\n=================\\n\\nThe commands recognized by the debugger are listed below.  Most\\ncommands can be abbreviated to one or two letters as indicated; e.g.\\n``h(elp)`` means that either ``h`` or ``help`` can be used to enter\\nthe help command (but not ``he`` or ``hel``, nor ``H`` or ``Help`` or\\n``HELP``).  Arguments to commands must be separated by whitespace\\n(spaces or tabs).  Optional arguments are enclosed in square brackets\\n(``[]``) in the command syntax; the square brackets must not be typed.\\nAlternatives in the command syntax are separated by a vertical bar\\n(``|``).\\n\\nEntering a blank line repeats the last command entered.  Exception: if\\nthe last command was a ``list`` command, the next 11 lines are listed.\\n\\nCommands that the debugger doesn\\'t recognize are assumed to be Python\\nstatements and are executed in the context of the program being\\ndebugged.  Python statements can also be prefixed with an exclamation\\npoint (``!``).  This is a powerful way to inspect the program being\\ndebugged; it is even possible to change a variable or call a function.\\nWhen an exception occurs in such a statement, the exception name is\\nprinted but the debugger\\'s state is not changed.\\n\\nThe debugger supports *aliases*.  Aliases can have parameters which\\nallows one a certain level of adaptability to the context under\\nexamination.\\n\\nMultiple commands may be entered on a single line, separated by\\n``;;``.  (A single ``;`` is not used as it is the separator for\\nmultiple commands in a line that is passed to the Python parser.)  No\\nintelligence is applied to separating the commands; the input is split\\nat the first ``;;`` pair, even if it is in the middle of a quoted\\nstring.\\n\\nIf a file ``.pdbrc`` exists in the user\\'s home directory or in the\\ncurrent directory, it is read in and executed as if it had been typed\\nat the debugger prompt.  This is particularly useful for aliases.  If\\nboth files exist, the one in the home directory is read first and\\naliases defined there can be overridden by the local file.\\n\\nChanged in version 3.2: ``.pdbrc`` can now contain commands that\\ncontinue debugging, such as ``continue`` or ``next``.  Previously,\\nthese commands had no effect.\\n\\nh(elp) [command]\\n\\n   Without argument, print the list of available commands.  With a\\n   *command* as argument, print help about that command.  ``help pdb``\\n   displays the full documentation (the docstring of the ``pdb``\\n   module).  Since the *command* argument must be an identifier,\\n   ``help exec`` must be entered to get help on the ``!`` command.\\n\\nw(here)\\n\\n   Print a stack trace, with the most recent frame at the bottom.  An\\n   arrow indicates the current frame, which determines the context of\\n   most commands.\\n\\nd(own) [count]\\n\\n   Move the current frame *count* (default one) levels down in the\\n   stack trace (to a newer frame).\\n\\nu(p) [count]\\n\\n   Move the current frame *count* (default one) levels up in the stack\\n   trace (to an older frame).\\n\\nb(reak) [([filename:]lineno | function) [, condition]]\\n\\n   With a *lineno* argument, set a break there in the current file.\\n   With a *function* argument, set a break at the first executable\\n   statement within that function.  The line number may be prefixed\\n   with a filename and a colon, to specify a breakpoint in another\\n   file (probably one that hasn\\'t been loaded yet).  The file is\\n   searched on ``sys.path``.  Note that each breakpoint is assigned a\\n   number to which all the other breakpoint commands refer.\\n\\n   If a second argument is present, it is an expression which must\\n   evaluate to true before the breakpoint is honored.\\n\\n   Without argument, list all breaks, including for each breakpoint,\\n   the number of times that breakpoint has been hit, the current\\n   ignore count, and the associated condition if any.\\n\\ntbreak [([filename:]lineno | function) [, condition]]\\n\\n   Temporary breakpoint, which is removed automatically when it is\\n   first hit. The arguments are the same as for ``break``.\\n\\ncl(ear) [filename:lineno | bpnumber [bpnumber ...]]\\n\\n   With a *filename:lineno* argument, clear all the breakpoints at\\n   this line. With a space separated list of breakpoint numbers, clear\\n   those breakpoints. Without argument, clear all breaks (but first\\n   ask confirmation).\\n\\ndisable [bpnumber [bpnumber ...]]\\n\\n   Disable the breakpoints given as a space separated list of\\n   breakpoint numbers.  Disabling a breakpoint means it cannot cause\\n   the program to stop execution, but unlike clearing a breakpoint, it\\n   remains in the list of breakpoints and can be (re-)enabled.\\n\\nenable [bpnumber [bpnumber ...]]\\n\\n   Enable the breakpoints specified.\\n\\nignore bpnumber [count]\\n\\n   Set the ignore count for the given breakpoint number.  If count is\\n   omitted, the ignore count is set to 0.  A breakpoint becomes active\\n   when the ignore count is zero.  When non-zero, the count is\\n   decremented each time the breakpoint is reached and the breakpoint\\n   is not disabled and any associated condition evaluates to true.\\n\\ncondition bpnumber [condition]\\n\\n   Set a new *condition* for the breakpoint, an expression which must\\n   evaluate to true before the breakpoint is honored.  If *condition*\\n   is absent, any existing condition is removed; i.e., the breakpoint\\n   is made unconditional.\\n\\ncommands [bpnumber]\\n\\n   Specify a list of commands for breakpoint number *bpnumber*.  The\\n   commands themselves appear on the following lines.  Type a line\\n   containing just ``end`` to terminate the commands. An example:\\n\\n      (Pdb) commands 1\\n      (com) print some_variable\\n      (com) end\\n      (Pdb)\\n\\n   To remove all commands from a breakpoint, type commands and follow\\n   it immediately with ``end``; that is, give no commands.\\n\\n   With no *bpnumber* argument, commands refers to the last breakpoint\\n   set.\\n\\n   You can use breakpoint commands to start your program up again.\\n   Simply use the continue command, or step, or any other command that\\n   resumes execution.\\n\\n   Specifying any command resuming execution (currently continue,\\n   step, next, return, jump, quit and their abbreviations) terminates\\n   the command list (as if that command was immediately followed by\\n   end). This is because any time you resume execution (even with a\\n   simple next or step), you may encounter another breakpoint--which\\n   could have its own command list, leading to ambiguities about which\\n   list to execute.\\n\\n   If you use the \\'silent\\' command in the command list, the usual\\n   message about stopping at a breakpoint is not printed.  This may be\\n   desirable for breakpoints that are to print a specific message and\\n   then continue.  If none of the other commands print anything, you\\n   see no sign that the breakpoint was reached.\\n\\ns(tep)\\n\\n   Execute the current line, stop at the first possible occasion\\n   (either in a function that is called or on the next line in the\\n   current function).\\n\\nn(ext)\\n\\n   Continue execution until the next line in the current function is\\n   reached or it returns.  (The difference between ``next`` and\\n   ``step`` is that ``step`` stops inside a called function, while\\n   ``next`` executes called functions at (nearly) full speed, only\\n   stopping at the next line in the current function.)\\n\\nunt(il) [lineno]\\n\\n   Without argument, continue execution until the line with a number\\n   greater than the current one is reached.\\n\\n   With a line number, continue execution until a line with a number\\n   greater or equal to that is reached.  In both cases, also stop when\\n   the current frame returns.\\n\\n   Changed in version 3.2: Allow giving an explicit line number.\\n\\nr(eturn)\\n\\n   Continue execution until the current function returns.\\n\\nc(ont(inue))\\n\\n   Continue execution, only stop when a breakpoint is encountered.\\n\\nj(ump) lineno\\n\\n   Set the next line that will be executed.  Only available in the\\n   bottom-most frame.  This lets you jump back and execute code again,\\n   or jump forward to skip code that you don\\'t want to run.\\n\\n   It should be noted that not all jumps are allowed -- for instance\\n   it is not possible to jump into the middle of a ``for`` loop or out\\n   of a ``finally`` clause.\\n\\nl(ist) [first[, last]]\\n\\n   List source code for the current file.  Without arguments, list 11\\n   lines around the current line or continue the previous listing.\\n   With ``.`` as argument, list 11 lines around the current line.\\n   With one argument, list 11 lines around at that line.  With two\\n   arguments, list the given range; if the second argument is less\\n   than the first, it is interpreted as a count.\\n\\n   The current line in the current frame is indicated by ``->``.  If\\n   an exception is being debugged, the line where the exception was\\n   originally raised or propagated is indicated by ``>>``, if it\\n   differs from the current line.\\n\\n   New in version 3.2: The ``>>`` marker.\\n\\nll | longlist\\n\\n   List all source code for the current function or frame.\\n   Interesting lines are marked as for ``list``.\\n\\n   New in version 3.2.\\n\\na(rgs)\\n\\n   Print the argument list of the current function.\\n\\np(rint) expression\\n\\n   Evaluate the *expression* in the current context and print its\\n   value.\\n\\npp expression\\n\\n   Like the ``print`` command, except the value of the expression is\\n   pretty-printed using the ``pprint`` module.\\n\\nwhatis expression\\n\\n   Print the type of the *expression*.\\n\\nsource expression\\n\\n   Try to get source code for the given object and display it.\\n\\n   New in version 3.2.\\n\\ndisplay [expression]\\n\\n   Display the value of the expression if it changed, each time\\n   execution stops in the current frame.\\n\\n   Without expression, list all display expressions for the current\\n   frame.\\n\\n   New in version 3.2.\\n\\nundisplay [expression]\\n\\n   Do not display the expression any more in the current frame.\\n   Without expression, clear all display expressions for the current\\n   frame.\\n\\n   New in version 3.2.\\n\\ninteract\\n\\n   Start an interative interpreter (using the ``code`` module) whose\\n   global namespace contains all the (global and local) names found in\\n   the current scope.\\n\\n   New in version 3.2.\\n\\nalias [name [command]]\\n\\n   Create an alias called *name* that executes *command*.  The command\\n   must *not* be enclosed in quotes.  Replaceable parameters can be\\n   indicated by ``%1``, ``%2``, and so on, while ``%*`` is replaced by\\n   all the parameters. If no command is given, the current alias for\\n   *name* is shown. If no arguments are given, all aliases are listed.\\n\\n   Aliases may be nested and can contain anything that can be legally\\n   typed at the pdb prompt.  Note that internal pdb commands *can* be\\n   overridden by aliases.  Such a command is then hidden until the\\n   alias is removed.  Aliasing is recursively applied to the first\\n   word of the command line; all other words in the line are left\\n   alone.\\n\\n   As an example, here are two useful aliases (especially when placed\\n   in the ``.pdbrc`` file):\\n\\n      # Print instance variables (usage \"pi classInst\")\\n      alias pi for k in %1.__dict__.keys(): print(\"%1.\",k,\"=\",%1.__dict__[k])\\n      # Print instance variables in self\\n      alias ps pi self\\n\\nunalias name\\n\\n   Delete the specified alias.\\n\\n! statement\\n\\n   Execute the (one-line) *statement* in the context of the current\\n   stack frame. The exclamation point can be omitted unless the first\\n   word of the statement resembles a debugger command.  To set a\\n   global variable, you can prefix the assignment command with a\\n   ``global`` statement on the same line, e.g.:\\n\\n      (Pdb) global list_options; list_options = [\\'-l\\']\\n      (Pdb)\\n\\nrun [args ...]\\nrestart [args ...]\\n\\n   Restart the debugged Python program.  If an argument is supplied,\\n   it is split with ``shlex`` and the result is used as the new\\n   ``sys.argv``. History, breakpoints, actions and debugger options\\n   are preserved. ``restart`` is an alias for ``run``.\\n\\nq(uit)\\n\\n   Quit from the debugger.  The program being executed is aborted.\\n\\n-[ Footnotes ]-\\n\\n[1] Whether a frame is considered to originate in a certain module is\\n    determined by the ``__name__`` in the frame globals.\\n',\n'del':'\\nThe ``del`` statement\\n*********************\\n\\n   del_stmt ::= \"del\" target_list\\n\\nDeletion is recursively defined very similar to the way assignment is\\ndefined. Rather than spelling it out in full details, here are some\\nhints.\\n\\nDeletion of a target list recursively deletes each target, from left\\nto right.\\n\\nDeletion of a name removes the binding of that name from the local or\\nglobal namespace, depending on whether the name occurs in a ``global``\\nstatement in the same code block.  If the name is unbound, a\\n``NameError`` exception will be raised.\\n\\nDeletion of attribute references, subscriptions and slicings is passed\\nto the primary object involved; deletion of a slicing is in general\\nequivalent to assignment of an empty slice of the right type (but even\\nthis is determined by the sliced object).\\n\\nChanged in version 3.2: Previously it was illegal to delete a name\\nfrom the local namespace if it occurs as a free variable in a nested\\nblock.\\n',\n'dict':'\\nDictionary displays\\n*******************\\n\\nA dictionary display is a possibly empty series of key/datum pairs\\nenclosed in curly braces:\\n\\n   dict_display       ::= \"{\" [key_datum_list | dict_comprehension] \"}\"\\n   key_datum_list     ::= key_datum (\",\" key_datum)* [\",\"]\\n   key_datum          ::= expression \":\" expression\\n   dict_comprehension ::= expression \":\" expression comp_for\\n\\nA dictionary display yields a new dictionary object.\\n\\nIf a comma-separated sequence of key/datum pairs is given, they are\\nevaluated from left to right to define the entries of the dictionary:\\neach key object is used as a key into the dictionary to store the\\ncorresponding datum.  This means that you can specify the same key\\nmultiple times in the key/datum list, and the final dictionary\\'s value\\nfor that key will be the last one given.\\n\\nA dict comprehension, in contrast to list and set comprehensions,\\nneeds two expressions separated with a colon followed by the usual\\n\"for\" and \"if\" clauses. When the comprehension is run, the resulting\\nkey and value elements are inserted in the new dictionary in the order\\nthey are produced.\\n\\nRestrictions on the types of the key values are listed earlier in\\nsection *The standard type hierarchy*.  (To summarize, the key type\\nshould be *hashable*, which excludes all mutable objects.)  Clashes\\nbetween duplicate keys are not detected; the last datum (textually\\nrightmost in the display) stored for a given key value prevails.\\n',\n'dynamic-features':'\\nInteraction with dynamic features\\n*********************************\\n\\nThere are several cases where Python statements are illegal when used\\nin conjunction with nested scopes that contain free variables.\\n\\nIf a variable is referenced in an enclosing scope, it is illegal to\\ndelete the name.  An error will be reported at compile time.\\n\\nIf the wild card form of import --- ``import *`` --- is used in a\\nfunction and the function contains or is a nested block with free\\nvariables, the compiler will raise a ``SyntaxError``.\\n\\nThe ``eval()`` and ``exec()`` functions do not have access to the full\\nenvironment for resolving names.  Names may be resolved in the local\\nand global namespaces of the caller.  Free variables are not resolved\\nin the nearest enclosing namespace, but in the global namespace.  [1]\\nThe ``exec()`` and ``eval()`` functions have optional arguments to\\noverride the global and local namespace.  If only one namespace is\\nspecified, it is used for both.\\n',\n'else':'\\nThe ``if`` statement\\n********************\\n\\nThe ``if`` statement is used for conditional execution:\\n\\n   if_stmt ::= \"if\" expression \":\" suite\\n               ( \"elif\" expression \":\" suite )*\\n               [\"else\" \":\" suite]\\n\\nIt selects exactly one of the suites by evaluating the expressions one\\nby one until one is found to be true (see section *Boolean operations*\\nfor the definition of true and false); then that suite is executed\\n(and no other part of the ``if`` statement is executed or evaluated).\\nIf all expressions are false, the suite of the ``else`` clause, if\\npresent, is executed.\\n',\n'exceptions':'\\nExceptions\\n**********\\n\\nExceptions are a means of breaking out of the normal flow of control\\nof a code block in order to handle errors or other exceptional\\nconditions.  An exception is *raised* at the point where the error is\\ndetected; it may be *handled* by the surrounding code block or by any\\ncode block that directly or indirectly invoked the code block where\\nthe error occurred.\\n\\nThe Python interpreter raises an exception when it detects a run-time\\nerror (such as division by zero).  A Python program can also\\nexplicitly raise an exception with the ``raise`` statement. Exception\\nhandlers are specified with the ``try`` ... ``except`` statement.  The\\n``finally`` clause of such a statement can be used to specify cleanup\\ncode which does not handle the exception, but is executed whether an\\nexception occurred or not in the preceding code.\\n\\nPython uses the \"termination\" model of error handling: an exception\\nhandler can find out what happened and continue execution at an outer\\nlevel, but it cannot repair the cause of the error and retry the\\nfailing operation (except by re-entering the offending piece of code\\nfrom the top).\\n\\nWhen an exception is not handled at all, the interpreter terminates\\nexecution of the program, or returns to its interactive main loop.  In\\neither case, it prints a stack backtrace, except when the exception is\\n``SystemExit``.\\n\\nExceptions are identified by class instances.  The ``except`` clause\\nis selected depending on the class of the instance: it must reference\\nthe class of the instance or a base class thereof.  The instance can\\nbe received by the handler and can carry additional information about\\nthe exceptional condition.\\n\\nNote: Exception messages are not part of the Python API.  Their contents\\n  may change from one version of Python to the next without warning\\n  and should not be relied on by code which will run under multiple\\n  versions of the interpreter.\\n\\nSee also the description of the ``try`` statement in section *The try\\nstatement* and ``raise`` statement in section *The raise statement*.\\n\\n-[ Footnotes ]-\\n\\n[1] This limitation occurs because the code that is executed by these\\n    operations is not available at the time the module is compiled.\\n',\n'execmodel':'\\nExecution model\\n***************\\n\\n\\nNaming and binding\\n==================\\n\\n*Names* refer to objects.  Names are introduced by name binding\\noperations. Each occurrence of a name in the program text refers to\\nthe *binding* of that name established in the innermost function block\\ncontaining the use.\\n\\nA *block* is a piece of Python program text that is executed as a\\nunit. The following are blocks: a module, a function body, and a class\\ndefinition. Each command typed interactively is a block.  A script\\nfile (a file given as standard input to the interpreter or specified\\non the interpreter command line the first argument) is a code block.\\nA script command (a command specified on the interpreter command line\\nwith the \\'**-c**\\' option) is a code block.  The string argument passed\\nto the built-in functions ``eval()`` and ``exec()`` is a code block.\\n\\nA code block is executed in an *execution frame*.  A frame contains\\nsome administrative information (used for debugging) and determines\\nwhere and how execution continues after the code block\\'s execution has\\ncompleted.\\n\\nA *scope* defines the visibility of a name within a block.  If a local\\nvariable is defined in a block, its scope includes that block.  If the\\ndefinition occurs in a function block, the scope extends to any blocks\\ncontained within the defining one, unless a contained block introduces\\na different binding for the name.  The scope of names defined in a\\nclass block is limited to the class block; it does not extend to the\\ncode blocks of methods -- this includes comprehensions and generator\\nexpressions since they are implemented using a function scope.  This\\nmeans that the following will fail:\\n\\n   class A:\\n       a = 42\\n       b = list(a + i for i in range(10))\\n\\nWhen a name is used in a code block, it is resolved using the nearest\\nenclosing scope.  The set of all such scopes visible to a code block\\nis called the block\\'s *environment*.\\n\\nIf a name is bound in a block, it is a local variable of that block,\\nunless declared as ``nonlocal``.  If a name is bound at the module\\nlevel, it is a global variable.  (The variables of the module code\\nblock are local and global.)  If a variable is used in a code block\\nbut not defined there, it is a *free variable*.\\n\\nWhen a name is not found at all, a ``NameError`` exception is raised.\\nIf the name refers to a local variable that has not been bound, a\\n``UnboundLocalError`` exception is raised.  ``UnboundLocalError`` is a\\nsubclass of ``NameError``.\\n\\nThe following constructs bind names: formal parameters to functions,\\n``import`` statements, class and function definitions (these bind the\\nclass or function name in the defining block), and targets that are\\nidentifiers if occurring in an assignment, ``for`` loop header, or\\nafter ``as`` in a ``with`` statement or ``except`` clause. The\\n``import`` statement of the form ``from ... import *`` binds all names\\ndefined in the imported module, except those beginning with an\\nunderscore.  This form may only be used at the module level.\\n\\nA target occurring in a ``del`` statement is also considered bound for\\nthis purpose (though the actual semantics are to unbind the name).\\n\\nEach assignment or import statement occurs within a block defined by a\\nclass or function definition or at the module level (the top-level\\ncode block).\\n\\nIf a name binding operation occurs anywhere within a code block, all\\nuses of the name within the block are treated as references to the\\ncurrent block.  This can lead to errors when a name is used within a\\nblock before it is bound.  This rule is subtle.  Python lacks\\ndeclarations and allows name binding operations to occur anywhere\\nwithin a code block.  The local variables of a code block can be\\ndetermined by scanning the entire text of the block for name binding\\noperations.\\n\\nIf the ``global`` statement occurs within a block, all uses of the\\nname specified in the statement refer to the binding of that name in\\nthe top-level namespace.  Names are resolved in the top-level\\nnamespace by searching the global namespace, i.e. the namespace of the\\nmodule containing the code block, and the builtins namespace, the\\nnamespace of the module ``builtins``.  The global namespace is\\nsearched first.  If the name is not found there, the builtins\\nnamespace is searched.  The global statement must precede all uses of\\nthe name.\\n\\nThe builtins namespace associated with the execution of a code block\\nis actually found by looking up the name ``__builtins__`` in its\\nglobal namespace; this should be a dictionary or a module (in the\\nlatter case the module\\'s dictionary is used).  By default, when in the\\n``__main__`` module, ``__builtins__`` is the built-in module\\n``builtins``; when in any other module, ``__builtins__`` is an alias\\nfor the dictionary of the ``builtins`` module itself.\\n``__builtins__`` can be set to a user-created dictionary to create a\\nweak form of restricted execution.\\n\\n**CPython implementation detail:** Users should not touch\\n``__builtins__``; it is strictly an implementation detail.  Users\\nwanting to override values in the builtins namespace should ``import``\\nthe ``builtins`` module and modify its attributes appropriately.\\n\\nThe namespace for a module is automatically created the first time a\\nmodule is imported.  The main module for a script is always called\\n``__main__``.\\n\\nThe ``global`` statement has the same scope as a name binding\\noperation in the same block.  If the nearest enclosing scope for a\\nfree variable contains a global statement, the free variable is\\ntreated as a global.\\n\\nA class definition is an executable statement that may use and define\\nnames. These references follow the normal rules for name resolution.\\nThe namespace of the class definition becomes the attribute dictionary\\nof the class.  Names defined at the class scope are not visible in\\nmethods.\\n\\n\\nInteraction with dynamic features\\n---------------------------------\\n\\nThere are several cases where Python statements are illegal when used\\nin conjunction with nested scopes that contain free variables.\\n\\nIf a variable is referenced in an enclosing scope, it is illegal to\\ndelete the name.  An error will be reported at compile time.\\n\\nIf the wild card form of import --- ``import *`` --- is used in a\\nfunction and the function contains or is a nested block with free\\nvariables, the compiler will raise a ``SyntaxError``.\\n\\nThe ``eval()`` and ``exec()`` functions do not have access to the full\\nenvironment for resolving names.  Names may be resolved in the local\\nand global namespaces of the caller.  Free variables are not resolved\\nin the nearest enclosing namespace, but in the global namespace.  [1]\\nThe ``exec()`` and ``eval()`` functions have optional arguments to\\noverride the global and local namespace.  If only one namespace is\\nspecified, it is used for both.\\n\\n\\nExceptions\\n==========\\n\\nExceptions are a means of breaking out of the normal flow of control\\nof a code block in order to handle errors or other exceptional\\nconditions.  An exception is *raised* at the point where the error is\\ndetected; it may be *handled* by the surrounding code block or by any\\ncode block that directly or indirectly invoked the code block where\\nthe error occurred.\\n\\nThe Python interpreter raises an exception when it detects a run-time\\nerror (such as division by zero).  A Python program can also\\nexplicitly raise an exception with the ``raise`` statement. Exception\\nhandlers are specified with the ``try`` ... ``except`` statement.  The\\n``finally`` clause of such a statement can be used to specify cleanup\\ncode which does not handle the exception, but is executed whether an\\nexception occurred or not in the preceding code.\\n\\nPython uses the \"termination\" model of error handling: an exception\\nhandler can find out what happened and continue execution at an outer\\nlevel, but it cannot repair the cause of the error and retry the\\nfailing operation (except by re-entering the offending piece of code\\nfrom the top).\\n\\nWhen an exception is not handled at all, the interpreter terminates\\nexecution of the program, or returns to its interactive main loop.  In\\neither case, it prints a stack backtrace, except when the exception is\\n``SystemExit``.\\n\\nExceptions are identified by class instances.  The ``except`` clause\\nis selected depending on the class of the instance: it must reference\\nthe class of the instance or a base class thereof.  The instance can\\nbe received by the handler and can carry additional information about\\nthe exceptional condition.\\n\\nNote: Exception messages are not part of the Python API.  Their contents\\n  may change from one version of Python to the next without warning\\n  and should not be relied on by code which will run under multiple\\n  versions of the interpreter.\\n\\nSee also the description of the ``try`` statement in section *The try\\nstatement* and ``raise`` statement in section *The raise statement*.\\n\\n-[ Footnotes ]-\\n\\n[1] This limitation occurs because the code that is executed by these\\n    operations is not available at the time the module is compiled.\\n',\n'exprlists':'\\nExpression lists\\n****************\\n\\n   expression_list ::= expression ( \",\" expression )* [\",\"]\\n\\nAn expression list containing at least one comma yields a tuple.  The\\nlength of the tuple is the number of expressions in the list.  The\\nexpressions are evaluated from left to right.\\n\\nThe trailing comma is required only to create a single tuple (a.k.a. a\\n*singleton*); it is optional in all other cases.  A single expression\\nwithout a trailing comma doesn\\'t create a tuple, but rather yields the\\nvalue of that expression. (To create an empty tuple, use an empty pair\\nof parentheses: ``()``.)\\n',\n'floating':'\\nFloating point literals\\n***********************\\n\\nFloating point literals are described by the following lexical\\ndefinitions:\\n\\n   floatnumber   ::= pointfloat | exponentfloat\\n   pointfloat    ::= [intpart] fraction | intpart \".\"\\n   exponentfloat ::= (intpart | pointfloat) exponent\\n   intpart       ::= digit+\\n   fraction      ::= \".\" digit+\\n   exponent      ::= (\"e\" | \"E\") [\"+\" | \"-\"] digit+\\n\\nNote that the integer and exponent parts are always interpreted using\\nradix 10. For example, ``077e010`` is legal, and denotes the same\\nnumber as ``77e10``. The allowed range of floating point literals is\\nimplementation-dependent. Some examples of floating point literals:\\n\\n   3.14    10.    .001    1e100    3.14e-10    0e0\\n\\nNote that numeric literals do not include a sign; a phrase like ``-1``\\nis actually an expression composed of the unary operator ``-`` and the\\nliteral ``1``.\\n',\n'for':'\\nThe ``for`` statement\\n*********************\\n\\nThe ``for`` statement is used to iterate over the elements of a\\nsequence (such as a string, tuple or list) or other iterable object:\\n\\n   for_stmt ::= \"for\" target_list \"in\" expression_list \":\" suite\\n                [\"else\" \":\" suite]\\n\\nThe expression list is evaluated once; it should yield an iterable\\nobject.  An iterator is created for the result of the\\n``expression_list``.  The suite is then executed once for each item\\nprovided by the iterator, in the order of ascending indices.  Each\\nitem in turn is assigned to the target list using the standard rules\\nfor assignments (see *Assignment statements*), and then the suite is\\nexecuted.  When the items are exhausted (which is immediately when the\\nsequence is empty or an iterator raises a ``StopIteration``\\nexception), the suite in the ``else`` clause, if present, is executed,\\nand the loop terminates.\\n\\nA ``break`` statement executed in the first suite terminates the loop\\nwithout executing the ``else`` clause\\'s suite.  A ``continue``\\nstatement executed in the first suite skips the rest of the suite and\\ncontinues with the next item, or with the ``else`` clause if there was\\nno next item.\\n\\nThe suite may assign to the variable(s) in the target list; this does\\nnot affect the next item assigned to it.\\n\\nNames in the target list are not deleted when the loop is finished,\\nbut if the sequence is empty, it will not have been assigned to at all\\nby the loop.  Hint: the built-in function ``range()`` returns an\\niterator of integers suitable to emulate the effect of Pascal\\'s ``for\\ni := a to b do``; e.g., ``list(range(3))`` returns the list ``[0, 1,\\n2]``.\\n\\nNote: There is a subtlety when the sequence is being modified by the loop\\n  (this can only occur for mutable sequences, i.e. lists).  An\\n  internal counter is used to keep track of which item is used next,\\n  and this is incremented on each iteration.  When this counter has\\n  reached the length of the sequence the loop terminates.  This means\\n  that if the suite deletes the current (or a previous) item from the\\n  sequence, the next item will be skipped (since it gets the index of\\n  the current item which has already been treated).  Likewise, if the\\n  suite inserts an item in the sequence before the current item, the\\n  current item will be treated again the next time through the loop.\\n  This can lead to nasty bugs that can be avoided by making a\\n  temporary copy using a slice of the whole sequence, e.g.,\\n\\n     for x in a[:]:\\n         if x < 0: a.remove(x)\\n',\n'formatstrings':'\\nFormat String Syntax\\n********************\\n\\nThe ``str.format()`` method and the ``Formatter`` class share the same\\nsyntax for format strings (although in the case of ``Formatter``,\\nsubclasses can define their own format string syntax).\\n\\nFormat strings contain \"replacement fields\" surrounded by curly braces\\n``{}``. Anything that is not contained in braces is considered literal\\ntext, which is copied unchanged to the output.  If you need to include\\na brace character in the literal text, it can be escaped by doubling:\\n``{{`` and ``}}``.\\n\\nThe grammar for a replacement field is as follows:\\n\\n      replacement_field ::= \"{\" [field_name] [\"!\" conversion] [\":\" format_spec] \"}\"\\n      field_name        ::= arg_name (\".\" attribute_name | \"[\" element_index \"]\")*\\n      arg_name          ::= [identifier | integer]\\n      attribute_name    ::= identifier\\n      element_index     ::= integer | index_string\\n      index_string      ::= <any source character except \"]\"> +\\n      conversion        ::= \"r\" | \"s\" | \"a\"\\n      format_spec       ::= <described in the next section>\\n\\nIn less formal terms, the replacement field can start with a\\n*field_name* that specifies the object whose value is to be formatted\\nand inserted into the output instead of the replacement field. The\\n*field_name* is optionally followed by a  *conversion* field, which is\\npreceded by an exclamation point ``\\'!\\'``, and a *format_spec*, which\\nis preceded by a colon ``\\':\\'``.  These specify a non-default format\\nfor the replacement value.\\n\\nSee also the *Format Specification Mini-Language* section.\\n\\nThe *field_name* itself begins with an *arg_name* that is either a\\nnumber or a keyword.  If it\\'s a number, it refers to a positional\\nargument, and if it\\'s a keyword, it refers to a named keyword\\nargument.  If the numerical arg_names in a format string are 0, 1, 2,\\n... in sequence, they can all be omitted (not just some) and the\\nnumbers 0, 1, 2, ... will be automatically inserted in that order.\\nBecause *arg_name* is not quote-delimited, it is not possible to\\nspecify arbitrary dictionary keys (e.g., the strings ``\\'10\\'`` or\\n``\\':-]\\'``) within a format string. The *arg_name* can be followed by\\nany number of index or attribute expressions. An expression of the\\nform ``\\'.name\\'`` selects the named attribute using ``getattr()``,\\nwhile an expression of the form ``\\'[index]\\'`` does an index lookup\\nusing ``__getitem__()``.\\n\\nChanged in version 3.1: The positional argument specifiers can be\\nomitted, so ``\\'{} {}\\'`` is equivalent to ``\\'{0} {1}\\'``.\\n\\nSome simple format string examples:\\n\\n   \"First, thou shalt count to {0}\" # References first positional argument\\n   \"Bring me a {}\"                  # Implicitly references the first positional argument\\n   \"From {} to {}\"                  # Same as \"From {0} to {1}\"\\n   \"My quest is {name}\"             # References keyword argument \\'name\\'\\n   \"Weight in tons {0.weight}\"      # \\'weight\\' attribute of first positional arg\\n   \"Units destroyed: {players[0]}\"  # First element of keyword argument \\'players\\'.\\n\\nThe *conversion* field causes a type coercion before formatting.\\nNormally, the job of formatting a value is done by the\\n``__format__()`` method of the value itself.  However, in some cases\\nit is desirable to force a type to be formatted as a string,\\noverriding its own definition of formatting.  By converting the value\\nto a string before calling ``__format__()``, the normal formatting\\nlogic is bypassed.\\n\\nThree conversion flags are currently supported: ``\\'!s\\'`` which calls\\n``str()`` on the value, ``\\'!r\\'`` which calls ``repr()`` and ``\\'!a\\'``\\nwhich calls ``ascii()``.\\n\\nSome examples:\\n\\n   \"Harold\\'s a clever {0!s}\"        # Calls str() on the argument first\\n   \"Bring out the holy {name!r}\"    # Calls repr() on the argument first\\n   \"More {!a}\"                      # Calls ascii() on the argument first\\n\\nThe *format_spec* field contains a specification of how the value\\nshould be presented, including such details as field width, alignment,\\npadding, decimal precision and so on.  Each value type can define its\\nown \"formatting mini-language\" or interpretation of the *format_spec*.\\n\\nMost built-in types support a common formatting mini-language, which\\nis described in the next section.\\n\\nA *format_spec* field can also include nested replacement fields\\nwithin it. These nested replacement fields can contain only a field\\nname; conversion flags and format specifications are not allowed.  The\\nreplacement fields within the format_spec are substituted before the\\n*format_spec* string is interpreted. This allows the formatting of a\\nvalue to be dynamically specified.\\n\\nSee the *Format examples* section for some examples.\\n\\n\\nFormat Specification Mini-Language\\n==================================\\n\\n\"Format specifications\" are used within replacement fields contained\\nwithin a format string to define how individual values are presented\\n(see *Format String Syntax*).  They can also be passed directly to the\\nbuilt-in ``format()`` function.  Each formattable type may define how\\nthe format specification is to be interpreted.\\n\\nMost built-in types implement the following options for format\\nspecifications, although some of the formatting options are only\\nsupported by the numeric types.\\n\\nA general convention is that an empty format string (``\"\"``) produces\\nthe same result as if you had called ``str()`` on the value. A non-\\nempty format string typically modifies the result.\\n\\nThe general form of a *standard format specifier* is:\\n\\n   format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]\\n   fill        ::= <a character other than \\'{\\' or \\'}\\'>\\n   align       ::= \"<\" | \">\" | \"=\" | \"^\"\\n   sign        ::= \"+\" | \"-\" | \" \"\\n   width       ::= integer\\n   precision   ::= integer\\n   type        ::= \"b\" | \"c\" | \"d\" | \"e\" | \"E\" | \"f\" | \"F\" | \"g\" | \"G\" | \"n\" | \"o\" | \"s\" | \"x\" | \"X\" | \"%\"\\n\\nThe *fill* character can be any character other than \\'{\\' or \\'}\\'.  The\\npresence of a fill character is signaled by the character following\\nit, which must be one of the alignment options.  If the second\\ncharacter of *format_spec* is not a valid alignment option, then it is\\nassumed that both the fill character and the alignment option are\\nabsent.\\n\\nThe meaning of the various alignment options is as follows:\\n\\n   +-----------+------------------------------------------------------------+\\n   | Option    | Meaning                                                    |\\n   +===========+============================================================+\\n   | ``\\'<\\'``   | Forces the field to be left-aligned within the available   |\\n   |           | space (this is the default for most objects).              |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'>\\'``   | Forces the field to be right-aligned within the available  |\\n   |           | space (this is the default for numbers).                   |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'=\\'``   | Forces the padding to be placed after the sign (if any)    |\\n   |           | but before the digits.  This is used for printing fields   |\\n   |           | in the form \\'+000000120\\'. This alignment option is only    |\\n   |           | valid for numeric types.                                   |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'^\\'``   | Forces the field to be centered within the available       |\\n   |           | space.                                                     |\\n   +-----------+------------------------------------------------------------+\\n\\nNote that unless a minimum field width is defined, the field width\\nwill always be the same size as the data to fill it, so that the\\nalignment option has no meaning in this case.\\n\\nThe *sign* option is only valid for number types, and can be one of\\nthe following:\\n\\n   +-----------+------------------------------------------------------------+\\n   | Option    | Meaning                                                    |\\n   +===========+============================================================+\\n   | ``\\'+\\'``   | indicates that a sign should be used for both positive as  |\\n   |           | well as negative numbers.                                  |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'-\\'``   | indicates that a sign should be used only for negative     |\\n   |           | numbers (this is the default behavior).                    |\\n   +-----------+------------------------------------------------------------+\\n   | space     | indicates that a leading space should be used on positive  |\\n   |           | numbers, and a minus sign on negative numbers.             |\\n   +-----------+------------------------------------------------------------+\\n\\nThe ``\\'#\\'`` option causes the \"alternate form\" to be used for the\\nconversion.  The alternate form is defined differently for different\\ntypes.  This option is only valid for integer, float, complex and\\nDecimal types. For integers, when binary, octal, or hexadecimal output\\nis used, this option adds the prefix respective ``\\'0b\\'``, ``\\'0o\\'``, or\\n``\\'0x\\'`` to the output value. For floats, complex and Decimal the\\nalternate form causes the result of the conversion to always contain a\\ndecimal-point character, even if no digits follow it. Normally, a\\ndecimal-point character appears in the result of these conversions\\nonly if a digit follows it. In addition, for ``\\'g\\'`` and ``\\'G\\'``\\nconversions, trailing zeros are not removed from the result.\\n\\nThe ``\\',\\'`` option signals the use of a comma for a thousands\\nseparator. For a locale aware separator, use the ``\\'n\\'`` integer\\npresentation type instead.\\n\\nChanged in version 3.1: Added the ``\\',\\'`` option (see also **PEP\\n378**).\\n\\n*width* is a decimal integer defining the minimum field width.  If not\\nspecified, then the field width will be determined by the content.\\n\\nPreceding the *width* field by a zero (``\\'0\\'``) character enables\\nsign-aware zero-padding for numeric types.  This is equivalent to a\\n*fill* character of ``\\'0\\'`` with an *alignment* type of ``\\'=\\'``.\\n\\nThe *precision* is a decimal number indicating how many digits should\\nbe displayed after the decimal point for a floating point value\\nformatted with ``\\'f\\'`` and ``\\'F\\'``, or before and after the decimal\\npoint for a floating point value formatted with ``\\'g\\'`` or ``\\'G\\'``.\\nFor non-number types the field indicates the maximum field size - in\\nother words, how many characters will be used from the field content.\\nThe *precision* is not allowed for integer values.\\n\\nFinally, the *type* determines how the data should be presented.\\n\\nThe available string presentation types are:\\n\\n   +-----------+------------------------------------------------------------+\\n   | Type      | Meaning                                                    |\\n   +===========+============================================================+\\n   | ``\\'s\\'``   | String format. This is the default type for strings and    |\\n   |           | may be omitted.                                            |\\n   +-----------+------------------------------------------------------------+\\n   | None      | The same as ``\\'s\\'``.                                       |\\n   +-----------+------------------------------------------------------------+\\n\\nThe available integer presentation types are:\\n\\n   +-----------+------------------------------------------------------------+\\n   | Type      | Meaning                                                    |\\n   +===========+============================================================+\\n   | ``\\'b\\'``   | Binary format. Outputs the number in base 2.               |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'c\\'``   | Character. Converts the integer to the corresponding       |\\n   |           | unicode character before printing.                         |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'d\\'``   | Decimal Integer. Outputs the number in base 10.            |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'o\\'``   | Octal format. Outputs the number in base 8.                |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'x\\'``   | Hex format. Outputs the number in base 16, using lower-    |\\n   |           | case letters for the digits above 9.                       |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'X\\'``   | Hex format. Outputs the number in base 16, using upper-    |\\n   |           | case letters for the digits above 9.                       |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'n\\'``   | Number. This is the same as ``\\'d\\'``, except that it uses   |\\n   |           | the current locale setting to insert the appropriate       |\\n   |           | number separator characters.                               |\\n   +-----------+------------------------------------------------------------+\\n   | None      | The same as ``\\'d\\'``.                                       |\\n   +-----------+------------------------------------------------------------+\\n\\nIn addition to the above presentation types, integers can be formatted\\nwith the floating point presentation types listed below (except\\n``\\'n\\'`` and None). When doing so, ``float()`` is used to convert the\\ninteger to a floating point number before formatting.\\n\\nThe available presentation types for floating point and decimal values\\nare:\\n\\n   +-----------+------------------------------------------------------------+\\n   | Type      | Meaning                                                    |\\n   +===========+============================================================+\\n   | ``\\'e\\'``   | Exponent notation. Prints the number in scientific         |\\n   |           | notation using the letter \\'e\\' to indicate the exponent.    |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'E\\'``   | Exponent notation. Same as ``\\'e\\'`` except it uses an upper |\\n   |           | case \\'E\\' as the separator character.                       |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'f\\'``   | Fixed point. Displays the number as a fixed-point number.  |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'F\\'``   | Fixed point. Same as ``\\'f\\'``, but converts ``nan`` to      |\\n   |           | ``NAN`` and ``inf`` to ``INF``.                            |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'g\\'``   | General format.  For a given precision ``p >= 1``, this    |\\n   |           | rounds the number to ``p`` significant digits and then     |\\n   |           | formats the result in either fixed-point format or in      |\\n   |           | scientific notation, depending on its magnitude.  The      |\\n   |           | precise rules are as follows: suppose that the result      |\\n   |           | formatted with presentation type ``\\'e\\'`` and precision     |\\n   |           | ``p-1`` would have exponent ``exp``.  Then if ``-4 <= exp  |\\n   |           | < p``, the number is formatted with presentation type      |\\n   |           | ``\\'f\\'`` and precision ``p-1-exp``. Otherwise, the number   |\\n   |           | is formatted with presentation type ``\\'e\\'`` and precision  |\\n   |           | ``p-1``. In both cases insignificant trailing zeros are    |\\n   |           | removed from the significand, and the decimal point is     |\\n   |           | also removed if there are no remaining digits following    |\\n   |           | it.  Positive and negative infinity, positive and negative |\\n   |           | zero, and nans, are formatted as ``inf``, ``-inf``, ``0``, |\\n   |           | ``-0`` and ``nan`` respectively, regardless of the         |\\n   |           | precision.  A precision of ``0`` is treated as equivalent  |\\n   |           | to a precision of ``1``.                                   |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'G\\'``   | General format. Same as ``\\'g\\'`` except switches to ``\\'E\\'`` |\\n   |           | if the number gets too large. The representations of       |\\n   |           | infinity and NaN are uppercased, too.                      |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'n\\'``   | Number. This is the same as ``\\'g\\'``, except that it uses   |\\n   |           | the current locale setting to insert the appropriate       |\\n   |           | number separator characters.                               |\\n   +-----------+------------------------------------------------------------+\\n   | ``\\'%\\'``   | Percentage. Multiplies the number by 100 and displays in   |\\n   |           | fixed (``\\'f\\'``) format, followed by a percent sign.        |\\n   +-----------+------------------------------------------------------------+\\n   | None      | Similar to ``\\'g\\'``, except with at least one digit past    |\\n   |           | the decimal point and a default precision of 12. This is   |\\n   |           | intended to match ``str()``, except you can add the other  |\\n   |           | format modifiers.                                          |\\n   +-----------+------------------------------------------------------------+\\n\\n\\nFormat examples\\n===============\\n\\nThis section contains examples of the new format syntax and comparison\\nwith the old ``%``-formatting.\\n\\nIn most of the cases the syntax is similar to the old\\n``%``-formatting, with the addition of the ``{}`` and with ``:`` used\\ninstead of ``%``. For example, ``\\'%03.2f\\'`` can be translated to\\n``\\'{:03.2f}\\'``.\\n\\nThe new format syntax also supports new and different options, shown\\nin the follow examples.\\n\\nAccessing arguments by position:\\n\\n   >>> \\'{0}, {1}, {2}\\'.format(\\'a\\', \\'b\\', \\'c\\')\\n   \\'a, b, c\\'\\n   >>> \\'{}, {}, {}\\'.format(\\'a\\', \\'b\\', \\'c\\')  # 3.1+ only\\n   \\'a, b, c\\'\\n   >>> \\'{2}, {1}, {0}\\'.format(\\'a\\', \\'b\\', \\'c\\')\\n   \\'c, b, a\\'\\n   >>> \\'{2}, {1}, {0}\\'.format(*\\'abc\\')      # unpacking argument sequence\\n   \\'c, b, a\\'\\n   >>> \\'{0}{1}{0}\\'.format(\\'abra\\', \\'cad\\')   # arguments\\' indices can be repeated\\n   \\'abracadabra\\'\\n\\nAccessing arguments by name:\\n\\n   >>> \\'Coordinates: {latitude}, {longitude}\\'.format(latitude=\\'37.24N\\', longitude=\\'-115.81W\\')\\n   \\'Coordinates: 37.24N, -115.81W\\'\\n   >>> coord = {\\'latitude\\': \\'37.24N\\', \\'longitude\\': \\'-115.81W\\'}\\n   >>> \\'Coordinates: {latitude}, {longitude}\\'.format(**coord)\\n   \\'Coordinates: 37.24N, -115.81W\\'\\n\\nAccessing arguments\\' attributes:\\n\\n   >>> c = 3-5j\\n   >>> (\\'The complex number {0} is formed from the real part {0.real} \\'\\n   ...  \\'and the imaginary part {0.imag}.\\').format(c)\\n   \\'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.\\'\\n   >>> class Point:\\n   ...     def __init__(self, x, y):\\n   ...         self.x, self.y = x, y\\n   ...     def __str__(self):\\n   ...         return \\'Point({self.x}, {self.y})\\'.format(self=self)\\n   ...\\n   >>> str(Point(4, 2))\\n   \\'Point(4, 2)\\'\\n\\nAccessing arguments\\' items:\\n\\n   >>> coord = (3, 5)\\n   >>> \\'X: {0[0]};  Y: {0[1]}\\'.format(coord)\\n   \\'X: 3;  Y: 5\\'\\n\\nReplacing ``%s`` and ``%r``:\\n\\n   >>> \"repr() shows quotes: {!r}; str() doesn\\'t: {!s}\".format(\\'test1\\', \\'test2\\')\\n   \"repr() shows quotes: \\'test1\\'; str() doesn\\'t: test2\"\\n\\nAligning the text and specifying a width:\\n\\n   >>> \\'{:<30}\\'.format(\\'left aligned\\')\\n   \\'left aligned                  \\'\\n   >>> \\'{:>30}\\'.format(\\'right aligned\\')\\n   \\'                 right aligned\\'\\n   >>> \\'{:^30}\\'.format(\\'centered\\')\\n   \\'           centered           \\'\\n   >>> \\'{:*^30}\\'.format(\\'centered\\')  # use \\'*\\' as a fill char\\n   \\'***********centered***********\\'\\n\\nReplacing ``%+f``, ``%-f``, and ``% f`` and specifying a sign:\\n\\n   >>> \\'{:+f}; {:+f}\\'.format(3.14, -3.14)  # show it always\\n   \\'+3.140000; -3.140000\\'\\n   >>> \\'{: f}; {: f}\\'.format(3.14, -3.14)  # show a space for positive numbers\\n   \\' 3.140000; -3.140000\\'\\n   >>> \\'{:-f}; {:-f}\\'.format(3.14, -3.14)  # show only the minus -- same as \\'{:f}; {:f}\\'\\n   \\'3.140000; -3.140000\\'\\n\\nReplacing ``%x`` and ``%o`` and converting the value to different\\nbases:\\n\\n   >>> # format also supports binary numbers\\n   >>> \"int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}\".format(42)\\n   \\'int: 42;  hex: 2a;  oct: 52;  bin: 101010\\'\\n   >>> # with 0x, 0o, or 0b as prefix:\\n   >>> \"int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}\".format(42)\\n   \\'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010\\'\\n\\nUsing the comma as a thousands separator:\\n\\n   >>> \\'{:,}\\'.format(1234567890)\\n   \\'1,234,567,890\\'\\n\\nExpressing a percentage:\\n\\n   >>> points = 19\\n   >>> total = 22\\n   >>> \\'Correct answers: {:.2%}\\'.format(points/total)\\n   \\'Correct answers: 86.36%\\'\\n\\nUsing type-specific formatting:\\n\\n   >>> import datetime\\n   >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\\n   >>> \\'{:%Y-%m-%d %H:%M:%S}\\'.format(d)\\n   \\'2010-07-04 12:15:58\\'\\n\\nNesting arguments and more complex examples:\\n\\n   >>> for align, text in zip(\\'<^>\\', [\\'left\\', \\'center\\', \\'right\\']):\\n   ...     \\'{0:{fill}{align}16}\\'.format(text, fill=align, align=align)\\n   ...\\n   \\'left<<<<<<<<<<<<\\'\\n   \\'^^^^^center^^^^^\\'\\n   \\'>>>>>>>>>>>right\\'\\n   >>>\\n   >>> octets = [192, 168, 0, 1]\\n   >>> \\'{:02X}{:02X}{:02X}{:02X}\\'.format(*octets)\\n   \\'C0A80001\\'\\n   >>> int(_, 16)\\n   3232235521\\n   >>>\\n   >>> width = 5\\n   >>> for num in range(5,12): #doctest: +NORMALIZE_WHITESPACE\\n   ...     for base in \\'dXob\\':\\n   ...         print(\\'{0:{width}{base}}\\'.format(num, base=base, width=width), end=\\' \\')\\n   ...     print()\\n   ...\\n       5     5     5   101\\n       6     6     6   110\\n       7     7     7   111\\n       8     8    10  1000\\n       9     9    11  1001\\n      10     A    12  1010\\n      11     B    13  1011\\n',\n'function':'\\nFunction definitions\\n********************\\n\\nA function definition defines a user-defined function object (see\\nsection *The standard type hierarchy*):\\n\\n   funcdef        ::= [decorators] \"def\" funcname \"(\" [parameter_list] \")\" [\"->\" expression] \":\" suite\\n   decorators     ::= decorator+\\n   decorator      ::= \"@\" dotted_name [\"(\" [parameter_list [\",\"]] \")\"] NEWLINE\\n   dotted_name    ::= identifier (\".\" identifier)*\\n   parameter_list ::= (defparameter \",\")*\\n                      ( \"*\" [parameter] (\",\" defparameter)* [\",\" \"**\" parameter]\\n                      | \"**\" parameter\\n                      | defparameter [\",\"] )\\n   parameter      ::= identifier [\":\" expression]\\n   defparameter   ::= parameter [\"=\" expression]\\n   funcname       ::= identifier\\n\\nA function definition is an executable statement.  Its execution binds\\nthe function name in the current local namespace to a function object\\n(a wrapper around the executable code for the function).  This\\nfunction object contains a reference to the current global namespace\\nas the global namespace to be used when the function is called.\\n\\nThe function definition does not execute the function body; this gets\\nexecuted only when the function is called. [3]\\n\\nA function definition may be wrapped by one or more *decorator*\\nexpressions. Decorator expressions are evaluated when the function is\\ndefined, in the scope that contains the function definition.  The\\nresult must be a callable, which is invoked with the function object\\nas the only argument. The returned value is bound to the function name\\ninstead of the function object.  Multiple decorators are applied in\\nnested fashion. For example, the following code\\n\\n   @f1(arg)\\n   @f2\\n   def func(): pass\\n\\nis equivalent to\\n\\n   def func(): pass\\n   func = f1(arg)(f2(func))\\n\\nWhen one or more *parameters* have the form *parameter* ``=``\\n*expression*, the function is said to have \"default parameter values.\"\\nFor a parameter with a default value, the corresponding *argument* may\\nbe omitted from a call, in which case the parameter\\'s default value is\\nsubstituted.  If a parameter has a default value, all following\\nparameters up until the \"``*``\" must also have a default value ---\\nthis is a syntactic restriction that is not expressed by the grammar.\\n\\n**Default parameter values are evaluated when the function definition\\nis executed.** This means that the expression is evaluated once, when\\nthe function is defined, and that the same \"pre-computed\" value is\\nused for each call.  This is especially important to understand when a\\ndefault parameter is a mutable object, such as a list or a dictionary:\\nif the function modifies the object (e.g. by appending an item to a\\nlist), the default value is in effect modified. This is generally not\\nwhat was intended.  A way around this is to use ``None`` as the\\ndefault, and explicitly test for it in the body of the function, e.g.:\\n\\n   def whats_on_the_telly(penguin=None):\\n       if penguin is None:\\n           penguin = []\\n       penguin.append(\"property of the zoo\")\\n       return penguin\\n\\nFunction call semantics are described in more detail in section\\n*Calls*. A function call always assigns values to all parameters\\nmentioned in the parameter list, either from position arguments, from\\nkeyword arguments, or from default values.  If the form\\n\"``*identifier``\" is present, it is initialized to a tuple receiving\\nany excess positional parameters, defaulting to the empty tuple.  If\\nthe form \"``**identifier``\" is present, it is initialized to a new\\ndictionary receiving any excess keyword arguments, defaulting to a new\\nempty dictionary. Parameters after \"``*``\" or \"``*identifier``\" are\\nkeyword-only parameters and may only be passed used keyword arguments.\\n\\nParameters may have annotations of the form \"``: expression``\"\\nfollowing the parameter name.  Any parameter may have an annotation\\neven those of the form ``*identifier`` or ``**identifier``.  Functions\\nmay have \"return\" annotation of the form \"``-> expression``\" after the\\nparameter list.  These annotations can be any valid Python expression\\nand are evaluated when the function definition is executed.\\nAnnotations may be evaluated in a different order than they appear in\\nthe source code.  The presence of annotations does not change the\\nsemantics of a function.  The annotation values are available as\\nvalues of a dictionary keyed by the parameters\\' names in the\\n``__annotations__`` attribute of the function object.\\n\\nIt is also possible to create anonymous functions (functions not bound\\nto a name), for immediate use in expressions.  This uses lambda forms,\\ndescribed in section *Lambdas*.  Note that the lambda form is merely a\\nshorthand for a simplified function definition; a function defined in\\na \"``def``\" statement can be passed around or assigned to another name\\njust like a function defined by a lambda form.  The \"``def``\" form is\\nactually more powerful since it allows the execution of multiple\\nstatements and annotations.\\n\\n**Programmer\\'s note:** Functions are first-class objects.  A \"``def``\"\\nform executed inside a function definition defines a local function\\nthat can be returned or passed around.  Free variables used in the\\nnested function can access the local variables of the function\\ncontaining the def.  See section *Naming and binding* for details.\\n\\nSee also:\\n\\n   **PEP 3107** - Function Annotations\\n      The original specification for function annotations.\\n',\n'global':'\\nThe ``global`` statement\\n************************\\n\\n   global_stmt ::= \"global\" identifier (\",\" identifier)*\\n\\nThe ``global`` statement is a declaration which holds for the entire\\ncurrent code block.  It means that the listed identifiers are to be\\ninterpreted as globals.  It would be impossible to assign to a global\\nvariable without ``global``, although free variables may refer to\\nglobals without being declared global.\\n\\nNames listed in a ``global`` statement must not be used in the same\\ncode block textually preceding that ``global`` statement.\\n\\nNames listed in a ``global`` statement must not be defined as formal\\nparameters or in a ``for`` loop control target, ``class`` definition,\\nfunction definition, or ``import`` statement.\\n\\n**CPython implementation detail:** The current implementation does not\\nenforce the latter two restrictions, but programs should not abuse\\nthis freedom, as future implementations may enforce them or silently\\nchange the meaning of the program.\\n\\n**Programmer\\'s note:** the ``global`` is a directive to the parser.\\nIt applies only to code parsed at the same time as the ``global``\\nstatement. In particular, a ``global`` statement contained in a string\\nor code object supplied to the built-in ``exec()`` function does not\\naffect the code block *containing* the function call, and code\\ncontained in such a string is unaffected by ``global`` statements in\\nthe code containing the function call.  The same applies to the\\n``eval()`` and ``compile()`` functions.\\n',\n'id-classes':'\\nReserved classes of identifiers\\n*******************************\\n\\nCertain classes of identifiers (besides keywords) have special\\nmeanings.  These classes are identified by the patterns of leading and\\ntrailing underscore characters:\\n\\n``_*``\\n   Not imported by ``from module import *``.  The special identifier\\n   ``_`` is used in the interactive interpreter to store the result of\\n   the last evaluation; it is stored in the ``builtins`` module.  When\\n   not in interactive mode, ``_`` has no special meaning and is not\\n   defined. See section *The import statement*.\\n\\n   Note: The name ``_`` is often used in conjunction with\\n     internationalization; refer to the documentation for the\\n     ``gettext`` module for more information on this convention.\\n\\n``__*__``\\n   System-defined names. These names are defined by the interpreter\\n   and its implementation (including the standard library).  Current\\n   system names are discussed in the *Special method names* section\\n   and elsewhere.  More will likely be defined in future versions of\\n   Python.  *Any* use of ``__*__`` names, in any context, that does\\n   not follow explicitly documented use, is subject to breakage\\n   without warning.\\n\\n``__*``\\n   Class-private names.  Names in this category, when used within the\\n   context of a class definition, are re-written to use a mangled form\\n   to help avoid name clashes between \"private\" attributes of base and\\n   derived classes. See section *Identifiers (Names)*.\\n',\n'identifiers':'\\nIdentifiers and keywords\\n************************\\n\\nIdentifiers (also referred to as *names*) are described by the\\nfollowing lexical definitions.\\n\\nThe syntax of identifiers in Python is based on the Unicode standard\\nannex UAX-31, with elaboration and changes as defined below; see also\\n**PEP 3131** for further details.\\n\\nWithin the ASCII range (U+0001..U+007F), the valid characters for\\nidentifiers are the same as in Python 2.x: the uppercase and lowercase\\nletters ``A`` through ``Z``, the underscore ``_`` and, except for the\\nfirst character, the digits ``0`` through ``9``.\\n\\nPython 3.0 introduces additional characters from outside the ASCII\\nrange (see **PEP 3131**).  For these characters, the classification\\nuses the version of the Unicode Character Database as included in the\\n``unicodedata`` module.\\n\\nIdentifiers are unlimited in length.  Case is significant.\\n\\n   identifier   ::= xid_start xid_continue*\\n   id_start     ::= <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>\\n   id_continue  ::= <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>\\n   xid_start    ::= <all characters in id_start whose NFKC normalization is in \"id_start xid_continue*\">\\n   xid_continue ::= <all characters in id_continue whose NFKC normalization is in \"id_continue*\">\\n\\nThe Unicode category codes mentioned above stand for:\\n\\n* *Lu* - uppercase letters\\n\\n* *Ll* - lowercase letters\\n\\n* *Lt* - titlecase letters\\n\\n* *Lm* - modifier letters\\n\\n* *Lo* - other letters\\n\\n* *Nl* - letter numbers\\n\\n* *Mn* - nonspacing marks\\n\\n* *Mc* - spacing combining marks\\n\\n* *Nd* - decimal numbers\\n\\n* *Pc* - connector punctuations\\n\\n* *Other_ID_Start* - explicit list of characters in PropList.txt to\\n  support backwards compatibility\\n\\n* *Other_ID_Continue* - likewise\\n\\nAll identifiers are converted into the normal form NFKC while parsing;\\ncomparison of identifiers is based on NFKC.\\n\\nA non-normative HTML file listing all valid identifier characters for\\nUnicode 4.1 can be found at http://www.dcl.hpi.uni-\\npotsdam.de/home/loewis/table-3131.html.\\n\\n\\nKeywords\\n========\\n\\nThe following identifiers are used as reserved words, or *keywords* of\\nthe language, and cannot be used as ordinary identifiers.  They must\\nbe spelled exactly as written here:\\n\\n   False      class      finally    is         return\\n   None       continue   for        lambda     try\\n   True       def        from       nonlocal   while\\n   and        del        global     not        with\\n   as         elif       if         or         yield\\n   assert     else       import     pass\\n   break      except     in         raise\\n\\n\\nReserved classes of identifiers\\n===============================\\n\\nCertain classes of identifiers (besides keywords) have special\\nmeanings.  These classes are identified by the patterns of leading and\\ntrailing underscore characters:\\n\\n``_*``\\n   Not imported by ``from module import *``.  The special identifier\\n   ``_`` is used in the interactive interpreter to store the result of\\n   the last evaluation; it is stored in the ``builtins`` module.  When\\n   not in interactive mode, ``_`` has no special meaning and is not\\n   defined. See section *The import statement*.\\n\\n   Note: The name ``_`` is often used in conjunction with\\n     internationalization; refer to the documentation for the\\n     ``gettext`` module for more information on this convention.\\n\\n``__*__``\\n   System-defined names. These names are defined by the interpreter\\n   and its implementation (including the standard library).  Current\\n   system names are discussed in the *Special method names* section\\n   and elsewhere.  More will likely be defined in future versions of\\n   Python.  *Any* use of ``__*__`` names, in any context, that does\\n   not follow explicitly documented use, is subject to breakage\\n   without warning.\\n\\n``__*``\\n   Class-private names.  Names in this category, when used within the\\n   context of a class definition, are re-written to use a mangled form\\n   to help avoid name clashes between \"private\" attributes of base and\\n   derived classes. See section *Identifiers (Names)*.\\n',\n'if':'\\nThe ``if`` statement\\n********************\\n\\nThe ``if`` statement is used for conditional execution:\\n\\n   if_stmt ::= \"if\" expression \":\" suite\\n               ( \"elif\" expression \":\" suite )*\\n               [\"else\" \":\" suite]\\n\\nIt selects exactly one of the suites by evaluating the expressions one\\nby one until one is found to be true (see section *Boolean operations*\\nfor the definition of true and false); then that suite is executed\\n(and no other part of the ``if`` statement is executed or evaluated).\\nIf all expressions are false, the suite of the ``else`` clause, if\\npresent, is executed.\\n',\n'imaginary':'\\nImaginary literals\\n******************\\n\\nImaginary literals are described by the following lexical definitions:\\n\\n   imagnumber ::= (floatnumber | intpart) (\"j\" | \"J\")\\n\\nAn imaginary literal yields a complex number with a real part of 0.0.\\nComplex numbers are represented as a pair of floating point numbers\\nand have the same restrictions on their range.  To create a complex\\nnumber with a nonzero real part, add a floating point number to it,\\ne.g., ``(3+4j)``.  Some examples of imaginary literals:\\n\\n   3.14j   10.j    10j     .001j   1e100j  3.14e-10j\\n',\n'import':'\\nThe ``import`` statement\\n************************\\n\\n   import_stmt     ::= \"import\" module [\"as\" name] ( \",\" module [\"as\" name] )*\\n                   | \"from\" relative_module \"import\" identifier [\"as\" name]\\n                   ( \",\" identifier [\"as\" name] )*\\n                   | \"from\" relative_module \"import\" \"(\" identifier [\"as\" name]\\n                   ( \",\" identifier [\"as\" name] )* [\",\"] \")\"\\n                   | \"from\" module \"import\" \"*\"\\n   module          ::= (identifier \".\")* identifier\\n   relative_module ::= \".\"* module | \".\"+\\n   name            ::= identifier\\n\\nThe basic import statement (no ``from`` clause) is executed in two\\nsteps:\\n\\n1. find a module, loading and initializing it if necessary\\n\\n2. define a name or names in the local namespace for the scope where\\n   the ``import`` statement occurs.\\n\\nWhen the statement contains multiple clauses (separated by commas) the\\ntwo steps are carried out separately for each clause, just as though\\nthe clauses had been separated out into individiual import statements.\\n\\nThe details of the first step, finding and loading modules is\\ndescribed in greater detail in the section on the *import system*,\\nwhich also describes the various types of packages and modules that\\ncan be imported, as well as all the hooks that can be used to\\ncustomize the import system. Note that failures in this step may\\nindicate either that the module could not be located, *or* that an\\nerror occurred while initializing the module, which includes execution\\nof the module\\'s code.\\n\\nIf the requested module is retrieved successfully, it will be made\\navailable in the local namespace in one of three ways:\\n\\n* If the module name is followed by ``as``, then the name following\\n  ``as`` is bound directly to the imported module.\\n\\n* If no other name is specified, and the module being imported is a\\n  top level module, the module\\'s name is bound in the local namespace\\n  as a reference to the imported module\\n\\n* If the module being imported is *not* a top level module, then the\\n  name of the top level package that contains the module is bound in\\n  the local namespace as a reference to the top level package. The\\n  imported module must be accessed using its full qualified name\\n  rather than directly\\n\\nThe ``from`` form uses a slightly more complex process:\\n\\n1. find the module specified in the ``from`` clause loading and\\n   initializing it if necessary;\\n\\n2. for each of the identifiers specified in the ``import`` clauses:\\n\\n   1. check if the imported module has an attribute by that name\\n\\n   2. if not, attempt to import a submodule with that name and then\\n      check the imported module again for that attribute\\n\\n   3. if the attribute is not found, ``ImportError`` is raised.\\n\\n   4. otherwise, a reference to that value is bound in the local\\n      namespace, using the name in the ``as`` clause if it is present,\\n      otherwise using the attribute name\\n\\nExamples:\\n\\n   import foo                 # foo imported and bound locally\\n   import foo.bar.baz         # foo.bar.baz imported, foo bound locally\\n   import foo.bar.baz as fbb  # foo.bar.baz imported and bound as fbb\\n   from foo.bar import baz    # foo.bar.baz imported and bound as baz\\n   from foo import attr       # foo imported and foo.attr bound as attr\\n\\nIf the list of identifiers is replaced by a star (``\\'*\\'``), all public\\nnames defined in the module are bound in the local namespace for the\\nscope where the ``import`` statement occurs.\\n\\nThe *public names* defined by a module are determined by checking the\\nmodule\\'s namespace for a variable named ``__all__``; if defined, it\\nmust be a sequence of strings which are names defined or imported by\\nthat module.  The names given in ``__all__`` are all considered public\\nand are required to exist.  If ``__all__`` is not defined, the set of\\npublic names includes all names found in the module\\'s namespace which\\ndo not begin with an underscore character (``\\'_\\'``).  ``__all__``\\nshould contain the entire public API. It is intended to avoid\\naccidentally exporting items that are not part of the API (such as\\nlibrary modules which were imported and used within the module).\\n\\nThe ``from`` form with ``*`` may only occur in a module scope.\\nAttempting to use it in class or function definitions will raise a\\n``SyntaxError``.\\n\\nThe *public names* defined by a module are determined by checking the\\nmodule\\'s namespace for a variable named ``__all__``; if defined, it\\nmust be a sequence of strings which are names defined or imported by\\nthat module.  The names given in ``__all__`` are all considered public\\nand are required to exist.  If ``__all__`` is not defined, the set of\\npublic names includes all names found in the module\\'s namespace which\\ndo not begin with an underscore character (``\\'_\\'``).  ``__all__``\\nshould contain the entire public API. It is intended to avoid\\naccidentally exporting items that are not part of the API (such as\\nlibrary modules which were imported and used within the module).\\n\\nThe ``from`` form with ``*`` may only occur in a module scope.  The\\nwild card form of import --- ``import *`` --- is only allowed at the\\nmodule level. Attempting to use it in class or function definitions\\nwill raise a ``SyntaxError``.\\n\\nWhen specifying what module to import you do not have to specify the\\nabsolute name of the module. When a module or package is contained\\nwithin another package it is possible to make a relative import within\\nthe same top package without having to mention the package name. By\\nusing leading dots in the specified module or package after ``from``\\nyou can specify how high to traverse up the current package hierarchy\\nwithout specifying exact names. One leading dot means the current\\npackage where the module making the import exists. Two dots means up\\none package level. Three dots is up two levels, etc. So if you execute\\n``from . import mod`` from a module in the ``pkg`` package then you\\nwill end up importing ``pkg.mod``. If you execute ``from ..subpkg2\\nimport mod`` from within ``pkg.subpkg1`` you will import\\n``pkg.subpkg2.mod``. The specification for relative imports is\\ncontained within **PEP 328**.\\n\\n``importlib.import_module()`` is provided to support applications that\\ndetermine which modules need to be loaded dynamically.\\n\\n\\nFuture statements\\n=================\\n\\nA *future statement* is a directive to the compiler that a particular\\nmodule should be compiled using syntax or semantics that will be\\navailable in a specified future release of Python.  The future\\nstatement is intended to ease migration to future versions of Python\\nthat introduce incompatible changes to the language.  It allows use of\\nthe new features on a per-module basis before the release in which the\\nfeature becomes standard.\\n\\n   future_statement ::= \"from\" \"__future__\" \"import\" feature [\"as\" name]\\n                        (\",\" feature [\"as\" name])*\\n                        | \"from\" \"__future__\" \"import\" \"(\" feature [\"as\" name]\\n                        (\",\" feature [\"as\" name])* [\",\"] \")\"\\n   feature          ::= identifier\\n   name             ::= identifier\\n\\nA future statement must appear near the top of the module.  The only\\nlines that can appear before a future statement are:\\n\\n* the module docstring (if any),\\n\\n* comments,\\n\\n* blank lines, and\\n\\n* other future statements.\\n\\nThe features recognized by Python 3.0 are ``absolute_import``,\\n``division``, ``generators``, ``unicode_literals``,\\n``print_function``, ``nested_scopes`` and ``with_statement``.  They\\nare all redundant because they are always enabled, and only kept for\\nbackwards compatibility.\\n\\nA future statement is recognized and treated specially at compile\\ntime: Changes to the semantics of core constructs are often\\nimplemented by generating different code.  It may even be the case\\nthat a new feature introduces new incompatible syntax (such as a new\\nreserved word), in which case the compiler may need to parse the\\nmodule differently.  Such decisions cannot be pushed off until\\nruntime.\\n\\nFor any given release, the compiler knows which feature names have\\nbeen defined, and raises a compile-time error if a future statement\\ncontains a feature not known to it.\\n\\nThe direct runtime semantics are the same as for any import statement:\\nthere is a standard module ``__future__``, described later, and it\\nwill be imported in the usual way at the time the future statement is\\nexecuted.\\n\\nThe interesting runtime semantics depend on the specific feature\\nenabled by the future statement.\\n\\nNote that there is nothing special about the statement:\\n\\n   import __future__ [as name]\\n\\nThat is not a future statement; it\\'s an ordinary import statement with\\nno special semantics or syntax restrictions.\\n\\nCode compiled by calls to the built-in functions ``exec()`` and\\n``compile()`` that occur in a module ``M`` containing a future\\nstatement will, by default, use the new syntax or semantics associated\\nwith the future statement.  This can be controlled by optional\\narguments to ``compile()`` --- see the documentation of that function\\nfor details.\\n\\nA future statement typed at an interactive interpreter prompt will\\ntake effect for the rest of the interpreter session.  If an\\ninterpreter is started with the *-i* option, is passed a script name\\nto execute, and the script includes a future statement, it will be in\\neffect in the interactive session started after the script is\\nexecuted.\\n\\nSee also:\\n\\n   **PEP 236** - Back to the __future__\\n      The original proposal for the __future__ mechanism.\\n',\n'in':'\\nComparisons\\n***********\\n\\nUnlike C, all comparison operations in Python have the same priority,\\nwhich is lower than that of any arithmetic, shifting or bitwise\\noperation.  Also unlike C, expressions like ``a < b < c`` have the\\ninterpretation that is conventional in mathematics:\\n\\n   comparison    ::= or_expr ( comp_operator or_expr )*\\n   comp_operator ::= \"<\" | \">\" | \"==\" | \">=\" | \"<=\" | \"!=\"\\n                     | \"is\" [\"not\"] | [\"not\"] \"in\"\\n\\nComparisons yield boolean values: ``True`` or ``False``.\\n\\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\\ny`` is found to be false).\\n\\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\\nexcept that each expression is evaluated at most once.\\n\\nNote that ``a op1 b op2 c`` doesn\\'t imply any kind of comparison\\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\\n(though perhaps not pretty).\\n\\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\\nthe values of two objects.  The objects need not have the same type.\\nIf both are numbers, they are converted to a common type.  Otherwise,\\nthe ``==`` and ``!=`` operators *always* consider objects of different\\ntypes to be unequal, while the ``<``, ``>``, ``>=`` and ``<=``\\noperators raise a ``TypeError`` when comparing objects of different\\ntypes that do not implement these operators for the given pair of\\ntypes.  You can control comparison behavior of objects of non-built-in\\ntypes by defining rich comparison methods like ``__gt__()``, described\\nin section *Basic customization*.\\n\\nComparison of objects of the same type depends on the type:\\n\\n* Numbers are compared arithmetically.\\n\\n* The values ``float(\\'NaN\\')`` and ``Decimal(\\'NaN\\')`` are special. The\\n  are identical to themselves, ``x is x`` but are not equal to\\n  themselves, ``x != x``.  Additionally, comparing any value to a\\n  not-a-number value will return ``False``.  For example, both ``3 <\\n  float(\\'NaN\\')`` and ``float(\\'NaN\\') < 3`` will return ``False``.\\n\\n* Bytes objects are compared lexicographically using the numeric\\n  values of their elements.\\n\\n* Strings are compared lexicographically using the numeric equivalents\\n  (the result of the built-in function ``ord()``) of their characters.\\n  [3] String and bytes object can\\'t be compared!\\n\\n* Tuples and lists are compared lexicographically using comparison of\\n  corresponding elements.  This means that to compare equal, each\\n  element must compare equal and the two sequences must be of the same\\n  type and have the same length.\\n\\n  If not equal, the sequences are ordered the same as their first\\n  differing elements.  For example, ``[1,2,x] <= [1,2,y]`` has the\\n  same value as ``x <= y``.  If the corresponding element does not\\n  exist, the shorter sequence is ordered first (for example, ``[1,2] <\\n  [1,2,3]``).\\n\\n* Mappings (dictionaries) compare equal if and only if they have the\\n  same ``(key, value)`` pairs. Order comparisons ``(\\'<\\', \\'<=\\', \\'>=\\',\\n  \\'>\\')`` raise ``TypeError``.\\n\\n* Sets and frozensets define comparison operators to mean subset and\\n  superset tests.  Those relations do not define total orderings (the\\n  two sets ``{1,2}`` and {2,3} are not equal, nor subsets of one\\n  another, nor supersets of one another).  Accordingly, sets are not\\n  appropriate arguments for functions which depend on total ordering.\\n  For example, ``min()``, ``max()``, and ``sorted()`` produce\\n  undefined results given a list of sets as inputs.\\n\\n* Most other objects of built-in types compare unequal unless they are\\n  the same object; the choice whether one object is considered smaller\\n  or larger than another one is made arbitrarily but consistently\\n  within one execution of a program.\\n\\nComparison of objects of the differing types depends on whether either\\nof the types provide explicit support for the comparison.  Most\\nnumeric types can be compared with one another.  When cross-type\\ncomparison is not supported, the comparison method returns\\n``NotImplemented``.\\n\\nThe operators ``in`` and ``not in`` test for membership.  ``x in s``\\nevaluates to true if *x* is a member of *s*, and false otherwise.  ``x\\nnot in s`` returns the negation of ``x in s``.  All built-in sequences\\nand set types support this as well as dictionary, for which ``in``\\ntests whether a the dictionary has a given key. For container types\\nsuch as list, tuple, set, frozenset, dict, or collections.deque, the\\nexpression ``x in y`` is equivalent to ``any(x is e or x == e for e in\\ny)``.\\n\\nFor the string and bytes types, ``x in y`` is true if and only if *x*\\nis a substring of *y*.  An equivalent test is ``y.find(x) != -1``.\\nEmpty strings are always considered to be a substring of any other\\nstring, so ``\"\" in \"abc\"`` will return ``True``.\\n\\nFor user-defined classes which define the ``__contains__()`` method,\\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\\n\\nFor user-defined classes which do not define ``__contains__()`` but do\\ndefine ``__iter__()``, ``x in y`` is true if some value ``z`` with ``x\\n== z`` is produced while iterating over ``y``.  If an exception is\\nraised during the iteration, it is as if ``in`` raised that exception.\\n\\nLastly, the old-style iteration protocol is tried: if a class defines\\n``__getitem__()``, ``x in y`` is true if and only if there is a non-\\nnegative integer index *i* such that ``x == y[i]``, and all lower\\ninteger indices do not raise ``IndexError`` exception.  (If any other\\nexception is raised, it is as if ``in`` raised that exception).\\n\\nThe operator ``not in`` is defined to have the inverse true value of\\n``in``.\\n\\nThe operators ``is`` and ``is not`` test for object identity: ``x is\\ny`` is true if and only if *x* and *y* are the same object.  ``x is\\nnot y`` yields the inverse truth value. [4]\\n',\n'integers':'\\nInteger literals\\n****************\\n\\nInteger literals are described by the following lexical definitions:\\n\\n   integer        ::= decimalinteger | octinteger | hexinteger | bininteger\\n   decimalinteger ::= nonzerodigit digit* | \"0\"+\\n   nonzerodigit   ::= \"1\"...\"9\"\\n   digit          ::= \"0\"...\"9\"\\n   octinteger     ::= \"0\" (\"o\" | \"O\") octdigit+\\n   hexinteger     ::= \"0\" (\"x\" | \"X\") hexdigit+\\n   bininteger     ::= \"0\" (\"b\" | \"B\") bindigit+\\n   octdigit       ::= \"0\"...\"7\"\\n   hexdigit       ::= digit | \"a\"...\"f\" | \"A\"...\"F\"\\n   bindigit       ::= \"0\" | \"1\"\\n\\nThere is no limit for the length of integer literals apart from what\\ncan be stored in available memory.\\n\\nNote that leading zeros in a non-zero decimal number are not allowed.\\nThis is for disambiguation with C-style octal literals, which Python\\nused before version 3.0.\\n\\nSome examples of integer literals:\\n\\n   7     2147483647                        0o177    0b100110111\\n   3     79228162514264337593543950336     0o377    0x100000000\\n         79228162514264337593543950336              0xdeadbeef\\n',\n'lambda':'\\nLambdas\\n*******\\n\\n   lambda_form        ::= \"lambda\" [parameter_list]: expression\\n   lambda_form_nocond ::= \"lambda\" [parameter_list]: expression_nocond\\n\\nLambda forms (lambda expressions) have the same syntactic position as\\nexpressions.  They are a shorthand to create anonymous functions; the\\nexpression ``lambda arguments: expression`` yields a function object.\\nThe unnamed object behaves like a function object defined with\\n\\n   def <lambda>(arguments):\\n       return expression\\n\\nSee section *Function definitions* for the syntax of parameter lists.\\nNote that functions created with lambda forms cannot contain\\nstatements or annotations.\\n',\n'lists':'\\nList displays\\n*************\\n\\nA list display is a possibly empty series of expressions enclosed in\\nsquare brackets:\\n\\n   list_display ::= \"[\" [expression_list | comprehension] \"]\"\\n\\nA list display yields a new list object, the contents being specified\\nby either a list of expressions or a comprehension.  When a comma-\\nseparated list of expressions is supplied, its elements are evaluated\\nfrom left to right and placed into the list object in that order.\\nWhen a comprehension is supplied, the list is constructed from the\\nelements resulting from the comprehension.\\n',\n'naming':\"\\nNaming and binding\\n******************\\n\\n*Names* refer to objects.  Names are introduced by name binding\\noperations. Each occurrence of a name in the program text refers to\\nthe *binding* of that name established in the innermost function block\\ncontaining the use.\\n\\nA *block* is a piece of Python program text that is executed as a\\nunit. The following are blocks: a module, a function body, and a class\\ndefinition. Each command typed interactively is a block.  A script\\nfile (a file given as standard input to the interpreter or specified\\non the interpreter command line the first argument) is a code block.\\nA script command (a command specified on the interpreter command line\\nwith the '**-c**' option) is a code block.  The string argument passed\\nto the built-in functions ``eval()`` and ``exec()`` is a code block.\\n\\nA code block is executed in an *execution frame*.  A frame contains\\nsome administrative information (used for debugging) and determines\\nwhere and how execution continues after the code block's execution has\\ncompleted.\\n\\nA *scope* defines the visibility of a name within a block.  If a local\\nvariable is defined in a block, its scope includes that block.  If the\\ndefinition occurs in a function block, the scope extends to any blocks\\ncontained within the defining one, unless a contained block introduces\\na different binding for the name.  The scope of names defined in a\\nclass block is limited to the class block; it does not extend to the\\ncode blocks of methods -- this includes comprehensions and generator\\nexpressions since they are implemented using a function scope.  This\\nmeans that the following will fail:\\n\\n   class A:\\n       a = 42\\n       b = list(a + i for i in range(10))\\n\\nWhen a name is used in a code block, it is resolved using the nearest\\nenclosing scope.  The set of all such scopes visible to a code block\\nis called the block's *environment*.\\n\\nIf a name is bound in a block, it is a local variable of that block,\\nunless declared as ``nonlocal``.  If a name is bound at the module\\nlevel, it is a global variable.  (The variables of the module code\\nblock are local and global.)  If a variable is used in a code block\\nbut not defined there, it is a *free variable*.\\n\\nWhen a name is not found at all, a ``NameError`` exception is raised.\\nIf the name refers to a local variable that has not been bound, a\\n``UnboundLocalError`` exception is raised.  ``UnboundLocalError`` is a\\nsubclass of ``NameError``.\\n\\nThe following constructs bind names: formal parameters to functions,\\n``import`` statements, class and function definitions (these bind the\\nclass or function name in the defining block), and targets that are\\nidentifiers if occurring in an assignment, ``for`` loop header, or\\nafter ``as`` in a ``with`` statement or ``except`` clause. The\\n``import`` statement of the form ``from ... import *`` binds all names\\ndefined in the imported module, except those beginning with an\\nunderscore.  This form may only be used at the module level.\\n\\nA target occurring in a ``del`` statement is also considered bound for\\nthis purpose (though the actual semantics are to unbind the name).\\n\\nEach assignment or import statement occurs within a block defined by a\\nclass or function definition or at the module level (the top-level\\ncode block).\\n\\nIf a name binding operation occurs anywhere within a code block, all\\nuses of the name within the block are treated as references to the\\ncurrent block.  This can lead to errors when a name is used within a\\nblock before it is bound.  This rule is subtle.  Python lacks\\ndeclarations and allows name binding operations to occur anywhere\\nwithin a code block.  The local variables of a code block can be\\ndetermined by scanning the entire text of the block for name binding\\noperations.\\n\\nIf the ``global`` statement occurs within a block, all uses of the\\nname specified in the statement refer to the binding of that name in\\nthe top-level namespace.  Names are resolved in the top-level\\nnamespace by searching the global namespace, i.e. the namespace of the\\nmodule containing the code block, and the builtins namespace, the\\nnamespace of the module ``builtins``.  The global namespace is\\nsearched first.  If the name is not found there, the builtins\\nnamespace is searched.  The global statement must precede all uses of\\nthe name.\\n\\nThe builtins namespace associated with the execution of a code block\\nis actually found by looking up the name ``__builtins__`` in its\\nglobal namespace; this should be a dictionary or a module (in the\\nlatter case the module's dictionary is used).  By default, when in the\\n``__main__`` module, ``__builtins__`` is the built-in module\\n``builtins``; when in any other module, ``__builtins__`` is an alias\\nfor the dictionary of the ``builtins`` module itself.\\n``__builtins__`` can be set to a user-created dictionary to create a\\nweak form of restricted execution.\\n\\n**CPython implementation detail:** Users should not touch\\n``__builtins__``; it is strictly an implementation detail.  Users\\nwanting to override values in the builtins namespace should ``import``\\nthe ``builtins`` module and modify its attributes appropriately.\\n\\nThe namespace for a module is automatically created the first time a\\nmodule is imported.  The main module for a script is always called\\n``__main__``.\\n\\nThe ``global`` statement has the same scope as a name binding\\noperation in the same block.  If the nearest enclosing scope for a\\nfree variable contains a global statement, the free variable is\\ntreated as a global.\\n\\nA class definition is an executable statement that may use and define\\nnames. These references follow the normal rules for name resolution.\\nThe namespace of the class definition becomes the attribute dictionary\\nof the class.  Names defined at the class scope are not visible in\\nmethods.\\n\\n\\nInteraction with dynamic features\\n=================================\\n\\nThere are several cases where Python statements are illegal when used\\nin conjunction with nested scopes that contain free variables.\\n\\nIf a variable is referenced in an enclosing scope, it is illegal to\\ndelete the name.  An error will be reported at compile time.\\n\\nIf the wild card form of import --- ``import *`` --- is used in a\\nfunction and the function contains or is a nested block with free\\nvariables, the compiler will raise a ``SyntaxError``.\\n\\nThe ``eval()`` and ``exec()`` functions do not have access to the full\\nenvironment for resolving names.  Names may be resolved in the local\\nand global namespaces of the caller.  Free variables are not resolved\\nin the nearest enclosing namespace, but in the global namespace.  [1]\\nThe ``exec()`` and ``eval()`` functions have optional arguments to\\noverride the global and local namespace.  If only one namespace is\\nspecified, it is used for both.\\n\",\n'nonlocal':'\\nThe ``nonlocal`` statement\\n**************************\\n\\n   nonlocal_stmt ::= \"nonlocal\" identifier (\",\" identifier)*\\n\\nThe ``nonlocal`` statement causes the listed identifiers to refer to\\npreviously bound variables in the nearest enclosing scope.  This is\\nimportant because the default behavior for binding is to search the\\nlocal namespace first.  The statement allows encapsulated code to\\nrebind variables outside of the local scope besides the global\\n(module) scope.\\n\\nNames listed in a ``nonlocal`` statement, unlike to those listed in a\\n``global`` statement, must refer to pre-existing bindings in an\\nenclosing scope (the scope in which a new binding should be created\\ncannot be determined unambiguously).\\n\\nNames listed in a ``nonlocal`` statement must not collide with pre-\\nexisting bindings in the local scope.\\n\\nSee also:\\n\\n   **PEP 3104** - Access to Names in Outer Scopes\\n      The specification for the ``nonlocal`` statement.\\n',\n'numbers':\"\\nNumeric literals\\n****************\\n\\nThere are three types of numeric literals: integers, floating point\\nnumbers, and imaginary numbers.  There are no complex literals\\n(complex numbers can be formed by adding a real number and an\\nimaginary number).\\n\\nNote that numeric literals do not include a sign; a phrase like ``-1``\\nis actually an expression composed of the unary operator '``-``' and\\nthe literal ``1``.\\n\",\n'numeric-types':\"\\nEmulating numeric types\\n***********************\\n\\nThe following methods can be defined to emulate numeric objects.\\nMethods corresponding to operations that are not supported by the\\nparticular kind of number implemented (e.g., bitwise operations for\\nnon-integral numbers) should be left undefined.\\n\\nobject.__add__(self, other)\\nobject.__sub__(self, other)\\nobject.__mul__(self, other)\\nobject.__truediv__(self, other)\\nobject.__floordiv__(self, other)\\nobject.__mod__(self, other)\\nobject.__divmod__(self, other)\\nobject.__pow__(self, other[, modulo])\\nobject.__lshift__(self, other)\\nobject.__rshift__(self, other)\\nobject.__and__(self, other)\\nobject.__xor__(self, other)\\nobject.__or__(self, other)\\n\\n   These methods are called to implement the binary arithmetic\\n   operations (``+``, ``-``, ``*``, ``/``, ``//``, ``%``,\\n   ``divmod()``, ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``,\\n   ``|``).  For instance, to evaluate the expression ``x + y``, where\\n   *x* is an instance of a class that has an ``__add__()`` method,\\n   ``x.__add__(y)`` is called.  The ``__divmod__()`` method should be\\n   the equivalent to using ``__floordiv__()`` and ``__mod__()``; it\\n   should not be related to ``__truediv__()``.  Note that\\n   ``__pow__()`` should be defined to accept an optional third\\n   argument if the ternary version of the built-in ``pow()`` function\\n   is to be supported.\\n\\n   If one of those methods does not support the operation with the\\n   supplied arguments, it should return ``NotImplemented``.\\n\\nobject.__radd__(self, other)\\nobject.__rsub__(self, other)\\nobject.__rmul__(self, other)\\nobject.__rtruediv__(self, other)\\nobject.__rfloordiv__(self, other)\\nobject.__rmod__(self, other)\\nobject.__rdivmod__(self, other)\\nobject.__rpow__(self, other)\\nobject.__rlshift__(self, other)\\nobject.__rrshift__(self, other)\\nobject.__rand__(self, other)\\nobject.__rxor__(self, other)\\nobject.__ror__(self, other)\\n\\n   These methods are called to implement the binary arithmetic\\n   operations (``+``, ``-``, ``*``, ``/``, ``//``, ``%``,\\n   ``divmod()``, ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``,\\n   ``|``) with reflected (swapped) operands. These functions are only\\n   called if the left operand does not support the corresponding\\n   operation and the operands are of different types. [2]  For\\n   instance, to evaluate the expression ``x - y``, where *y* is an\\n   instance of a class that has an ``__rsub__()`` method,\\n   ``y.__rsub__(x)`` is called if ``x.__sub__(y)`` returns\\n   *NotImplemented*.\\n\\n   Note that ternary ``pow()`` will not try calling ``__rpow__()``\\n   (the coercion rules would become too complicated).\\n\\n   Note: If the right operand's type is a subclass of the left operand's\\n     type and that subclass provides the reflected method for the\\n     operation, this method will be called before the left operand's\\n     non-reflected method.  This behavior allows subclasses to\\n     override their ancestors' operations.\\n\\nobject.__iadd__(self, other)\\nobject.__isub__(self, other)\\nobject.__imul__(self, other)\\nobject.__itruediv__(self, other)\\nobject.__ifloordiv__(self, other)\\nobject.__imod__(self, other)\\nobject.__ipow__(self, other[, modulo])\\nobject.__ilshift__(self, other)\\nobject.__irshift__(self, other)\\nobject.__iand__(self, other)\\nobject.__ixor__(self, other)\\nobject.__ior__(self, other)\\n\\n   These methods are called to implement the augmented arithmetic\\n   assignments (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``,\\n   ``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``).  These methods\\n   should attempt to do the operation in-place (modifying *self*) and\\n   return the result (which could be, but does not have to be,\\n   *self*).  If a specific method is not defined, the augmented\\n   assignment falls back to the normal methods.  For instance, to\\n   execute the statement ``x += y``, where *x* is an instance of a\\n   class that has an ``__iadd__()`` method, ``x.__iadd__(y)`` is\\n   called.  If *x* is an instance of a class that does not define a\\n   ``__iadd__()`` method, ``x.__add__(y)`` and ``y.__radd__(x)`` are\\n   considered, as with the evaluation of ``x + y``.\\n\\nobject.__neg__(self)\\nobject.__pos__(self)\\nobject.__abs__(self)\\nobject.__invert__(self)\\n\\n   Called to implement the unary arithmetic operations (``-``, ``+``,\\n   ``abs()`` and ``~``).\\n\\nobject.__complex__(self)\\nobject.__int__(self)\\nobject.__float__(self)\\nobject.__round__(self[, n])\\n\\n   Called to implement the built-in functions ``complex()``,\\n   ``int()``, ``float()`` and ``round()``.  Should return a value of\\n   the appropriate type.\\n\\nobject.__index__(self)\\n\\n   Called to implement ``operator.index()``.  Also called whenever\\n   Python needs an integer object (such as in slicing, or in the\\n   built-in ``bin()``, ``hex()`` and ``oct()`` functions). Must return\\n   an integer.\\n\",\n'objects':'\\nObjects, values and types\\n*************************\\n\\n*Objects* are Python\\'s abstraction for data.  All data in a Python\\nprogram is represented by objects or by relations between objects. (In\\na sense, and in conformance to Von Neumann\\'s model of a \"stored\\nprogram computer,\" code is also represented by objects.)\\n\\nEvery object has an identity, a type and a value.  An object\\'s\\n*identity* never changes once it has been created; you may think of it\\nas the object\\'s address in memory.  The \\'``is``\\' operator compares the\\nidentity of two objects; the ``id()`` function returns an integer\\nrepresenting its identity.\\n\\n**CPython implementation detail:** For CPython, ``id(x)`` is the\\nmemory address where ``x`` is stored.\\n\\nAn object\\'s type determines the operations that the object supports\\n(e.g., \"does it have a length?\") and also defines the possible values\\nfor objects of that type.  The ``type()`` function returns an object\\'s\\ntype (which is an object itself).  Like its identity, an object\\'s\\n*type* is also unchangeable. [1]\\n\\nThe *value* of some objects can change.  Objects whose value can\\nchange are said to be *mutable*; objects whose value is unchangeable\\nonce they are created are called *immutable*. (The value of an\\nimmutable container object that contains a reference to a mutable\\nobject can change when the latter\\'s value is changed; however the\\ncontainer is still considered immutable, because the collection of\\nobjects it contains cannot be changed.  So, immutability is not\\nstrictly the same as having an unchangeable value, it is more subtle.)\\nAn object\\'s mutability is determined by its type; for instance,\\nnumbers, strings and tuples are immutable, while dictionaries and\\nlists are mutable.\\n\\nObjects are never explicitly destroyed; however, when they become\\nunreachable they may be garbage-collected.  An implementation is\\nallowed to postpone garbage collection or omit it altogether --- it is\\na matter of implementation quality how garbage collection is\\nimplemented, as long as no objects are collected that are still\\nreachable.\\n\\n**CPython implementation detail:** CPython currently uses a reference-\\ncounting scheme with (optional) delayed detection of cyclically linked\\ngarbage, which collects most objects as soon as they become\\nunreachable, but is not guaranteed to collect garbage containing\\ncircular references.  See the documentation of the ``gc`` module for\\ninformation on controlling the collection of cyclic garbage. Other\\nimplementations act differently and CPython may change. Do not depend\\non immediate finalization of objects when they become unreachable (ex:\\nalways close files).\\n\\nNote that the use of the implementation\\'s tracing or debugging\\nfacilities may keep objects alive that would normally be collectable.\\nAlso note that catching an exception with a \\'``try``...``except``\\'\\nstatement may keep objects alive.\\n\\nSome objects contain references to \"external\" resources such as open\\nfiles or windows.  It is understood that these resources are freed\\nwhen the object is garbage-collected, but since garbage collection is\\nnot guaranteed to happen, such objects also provide an explicit way to\\nrelease the external resource, usually a ``close()`` method. Programs\\nare strongly recommended to explicitly close such objects.  The\\n\\'``try``...``finally``\\' statement and the \\'``with``\\' statement provide\\nconvenient ways to do this.\\n\\nSome objects contain references to other objects; these are called\\n*containers*. Examples of containers are tuples, lists and\\ndictionaries.  The references are part of a container\\'s value.  In\\nmost cases, when we talk about the value of a container, we imply the\\nvalues, not the identities of the contained objects; however, when we\\ntalk about the mutability of a container, only the identities of the\\nimmediately contained objects are implied.  So, if an immutable\\ncontainer (like a tuple) contains a reference to a mutable object, its\\nvalue changes if that mutable object is changed.\\n\\nTypes affect almost all aspects of object behavior.  Even the\\nimportance of object identity is affected in some sense: for immutable\\ntypes, operations that compute new values may actually return a\\nreference to any existing object with the same type and value, while\\nfor mutable objects this is not allowed.  E.g., after ``a = 1; b =\\n1``, ``a`` and ``b`` may or may not refer to the same object with the\\nvalue one, depending on the implementation, but after ``c = []; d =\\n[]``, ``c`` and ``d`` are guaranteed to refer to two different,\\nunique, newly created empty lists. (Note that ``c = d = []`` assigns\\nthe same object to both ``c`` and ``d``.)\\n',\n'operator-summary':'\\nOperator precedence\\n*******************\\n\\nThe following table summarizes the operator precedences in Python,\\nfrom lowest precedence (least binding) to highest precedence (most\\nbinding).  Operators in the same box have the same precedence.  Unless\\nthe syntax is explicitly given, operators are binary.  Operators in\\nthe same box group left to right (except for comparisons, including\\ntests, which all have the same precedence and chain from left to right\\n--- see section *Comparisons* --- and exponentiation, which groups\\nfrom right to left).\\n\\n+-------------------------------------------------+---------------------------------------+\\n| Operator                                        | Description                           |\\n+=================================================+=======================================+\\n| ``lambda``                                      | Lambda expression                     |\\n+-------------------------------------------------+---------------------------------------+\\n| ``if`` -- ``else``                              | Conditional expression                |\\n+-------------------------------------------------+---------------------------------------+\\n| ``or``                                          | Boolean OR                            |\\n+-------------------------------------------------+---------------------------------------+\\n| ``and``                                         | Boolean AND                           |\\n+-------------------------------------------------+---------------------------------------+\\n| ``not`` ``x``                                   | Boolean NOT                           |\\n+-------------------------------------------------+---------------------------------------+\\n| ``in``, ``not in``, ``is``, ``is not``, ``<``,  | Comparisons, including membership     |\\n| ``<=``, ``>``, ``>=``, ``!=``, ``==``           | tests and identity tests,             |\\n+-------------------------------------------------+---------------------------------------+\\n| ``|``                                           | Bitwise OR                            |\\n+-------------------------------------------------+---------------------------------------+\\n| ``^``                                           | Bitwise XOR                           |\\n+-------------------------------------------------+---------------------------------------+\\n| ``&``                                           | Bitwise AND                           |\\n+-------------------------------------------------+---------------------------------------+\\n| ``<<``, ``>>``                                  | Shifts                                |\\n+-------------------------------------------------+---------------------------------------+\\n| ``+``, ``-``                                    | Addition and subtraction              |\\n+-------------------------------------------------+---------------------------------------+\\n| ``*``, ``/``, ``//``, ``%``                     | Multiplication, division, remainder   |\\n|                                                 | [5]                                   |\\n+-------------------------------------------------+---------------------------------------+\\n| ``+x``, ``-x``, ``~x``                          | Positive, negative, bitwise NOT       |\\n+-------------------------------------------------+---------------------------------------+\\n| ``**``                                          | Exponentiation [6]                    |\\n+-------------------------------------------------+---------------------------------------+\\n| ``x[index]``, ``x[index:index]``,               | Subscription, slicing, call,          |\\n| ``x(arguments...)``, ``x.attribute``            | attribute reference                   |\\n+-------------------------------------------------+---------------------------------------+\\n| ``(expressions...)``, ``[expressions...]``,     | Binding or tuple display, list        |\\n| ``{key: value...}``, ``{expressions...}``       | display, dictionary display, set      |\\n|                                                 | display                               |\\n+-------------------------------------------------+---------------------------------------+\\n\\n-[ Footnotes ]-\\n\\n[1] While ``abs(x%y) < abs(y)`` is true mathematically, for floats it\\n    may not be true numerically due to roundoff.  For example, and\\n    assuming a platform on which a Python float is an IEEE 754 double-\\n    precision number, in order that ``-1e-100 % 1e100`` have the same\\n    sign as ``1e100``, the computed result is ``-1e-100 + 1e100``,\\n    which is numerically exactly equal to ``1e100``.  The function\\n    ``math.fmod()`` returns a result whose sign matches the sign of\\n    the first argument instead, and so returns ``-1e-100`` in this\\n    case. Which approach is more appropriate depends on the\\n    application.\\n\\n[2] If x is very close to an exact integer multiple of y, it\\'s\\n    possible for ``x//y`` to be one larger than ``(x-x%y)//y`` due to\\n    rounding.  In such cases, Python returns the latter result, in\\n    order to preserve that ``divmod(x,y)[0] * y + x % y`` be very\\n    close to ``x``.\\n\\n[3] While comparisons between strings make sense at the byte level,\\n    they may be counter-intuitive to users.  For example, the strings\\n    ``\"\\\\u00C7\"`` and ``\"\\\\u0327\\\\u0043\"`` compare differently, even\\n    though they both represent the same unicode character (LATIN\\n    CAPITAL LETTER C WITH CEDILLA).  To compare strings in a human\\n    recognizable way, compare using ``unicodedata.normalize()``.\\n\\n[4] Due to automatic garbage-collection, free lists, and the dynamic\\n    nature of descriptors, you may notice seemingly unusual behaviour\\n    in certain uses of the ``is`` operator, like those involving\\n    comparisons between instance methods, or constants.  Check their\\n    documentation for more info.\\n\\n[5] The ``%`` operator is also used for string formatting; the same\\n    precedence applies.\\n\\n[6] The power operator ``**`` binds less tightly than an arithmetic or\\n    bitwise unary operator on its right, that is, ``2**-1`` is\\n    ``0.5``.\\n',\n'pass':'\\nThe ``pass`` statement\\n**********************\\n\\n   pass_stmt ::= \"pass\"\\n\\n``pass`` is a null operation --- when it is executed, nothing happens.\\nIt is useful as a placeholder when a statement is required\\nsyntactically, but no code needs to be executed, for example:\\n\\n   def f(arg): pass    # a function that does nothing (yet)\\n\\n   class C: pass       # a class with no methods (yet)\\n',\n'power':'\\nThe power operator\\n******************\\n\\nThe power operator binds more tightly than unary operators on its\\nleft; it binds less tightly than unary operators on its right.  The\\nsyntax is:\\n\\n   power ::= primary [\"**\" u_expr]\\n\\nThus, in an unparenthesized sequence of power and unary operators, the\\noperators are evaluated from right to left (this does not constrain\\nthe evaluation order for the operands): ``-1**2`` results in ``-1``.\\n\\nThe power operator has the same semantics as the built-in ``pow()``\\nfunction, when called with two arguments: it yields its left argument\\nraised to the power of its right argument.  The numeric arguments are\\nfirst converted to a common type, and the result is of that type.\\n\\nFor int operands, the result has the same type as the operands unless\\nthe second argument is negative; in that case, all arguments are\\nconverted to float and a float result is delivered. For example,\\n``10**2`` returns ``100``, but ``10**-2`` returns ``0.01``.\\n\\nRaising ``0.0`` to a negative power results in a\\n``ZeroDivisionError``. Raising a negative number to a fractional power\\nresults in a ``complex`` number. (In earlier versions it raised a\\n``ValueError``.)\\n',\n'raise':'\\nThe ``raise`` statement\\n***********************\\n\\n   raise_stmt ::= \"raise\" [expression [\"from\" expression]]\\n\\nIf no expressions are present, ``raise`` re-raises the last exception\\nthat was active in the current scope.  If no exception is active in\\nthe current scope, a ``RuntimeError`` exception is raised indicating\\nthat this is an error.\\n\\nOtherwise, ``raise`` evaluates the first expression as the exception\\nobject.  It must be either a subclass or an instance of\\n``BaseException``. If it is a class, the exception instance will be\\nobtained when needed by instantiating the class with no arguments.\\n\\nThe *type* of the exception is the exception instance\\'s class, the\\n*value* is the instance itself.\\n\\nA traceback object is normally created automatically when an exception\\nis raised and attached to it as the ``__traceback__`` attribute, which\\nis writable. You can create an exception and set your own traceback in\\none step using the ``with_traceback()`` exception method (which\\nreturns the same exception instance, with its traceback set to its\\nargument), like so:\\n\\n   raise Exception(\"foo occurred\").with_traceback(tracebackobj)\\n\\nThe ``from`` clause is used for exception chaining: if given, the\\nsecond *expression* must be another exception class or instance, which\\nwill then be attached to the raised exception as the ``__cause__``\\nattribute (which is writable).  If the raised exception is not\\nhandled, both exceptions will be printed:\\n\\n   >>> try:\\n   ...     print(1 / 0)\\n   ... except Exception as exc:\\n   ...     raise RuntimeError(\"Something bad happened\") from exc\\n   ...\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 2, in <module>\\n   ZeroDivisionError: int division or modulo by zero\\n\\n   The above exception was the direct cause of the following exception:\\n\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 4, in <module>\\n   RuntimeError: Something bad happened\\n\\nA similar mechanism works implicitly if an exception is raised inside\\nan exception handler: the previous exception is then attached as the\\nnew exception\\'s ``__context__`` attribute:\\n\\n   >>> try:\\n   ...     print(1 / 0)\\n   ... except:\\n   ...     raise RuntimeError(\"Something bad happened\")\\n   ...\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 2, in <module>\\n   ZeroDivisionError: int division or modulo by zero\\n\\n   During handling of the above exception, another exception occurred:\\n\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 4, in <module>\\n   RuntimeError: Something bad happened\\n\\nAdditional information on exceptions can be found in section\\n*Exceptions*, and information about handling exceptions is in section\\n*The try statement*.\\n',\n'return':'\\nThe ``return`` statement\\n************************\\n\\n   return_stmt ::= \"return\" [expression_list]\\n\\n``return`` may only occur syntactically nested in a function\\ndefinition, not within a nested class definition.\\n\\nIf an expression list is present, it is evaluated, else ``None`` is\\nsubstituted.\\n\\n``return`` leaves the current function call with the expression list\\n(or ``None``) as return value.\\n\\nWhen ``return`` passes control out of a ``try`` statement with a\\n``finally`` clause, that ``finally`` clause is executed before really\\nleaving the function.\\n\\nIn a generator function, the ``return`` statement indicates that the\\ngenerator is done and will cause ``StopIteration`` to be raised. The\\nreturned value (if any) is used as an argument to construct\\n``StopIteration`` and becomes the ``StopIteration.value`` attribute.\\n',\n'sequence-types':\"\\nEmulating container types\\n*************************\\n\\nThe following methods can be defined to implement container objects.\\nContainers usually are sequences (such as lists or tuples) or mappings\\n(like dictionaries), but can represent other containers as well.  The\\nfirst set of methods is used either to emulate a sequence or to\\nemulate a mapping; the difference is that for a sequence, the\\nallowable keys should be the integers *k* for which ``0 <= k < N``\\nwhere *N* is the length of the sequence, or slice objects, which\\ndefine a range of items.  It is also recommended that mappings provide\\nthe methods ``keys()``, ``values()``, ``items()``, ``get()``,\\n``clear()``, ``setdefault()``, ``pop()``, ``popitem()``, ``copy()``,\\nand ``update()`` behaving similar to those for Python's standard\\ndictionary objects.  The ``collections`` module provides a\\n``MutableMapping`` abstract base class to help create those methods\\nfrom a base set of ``__getitem__()``, ``__setitem__()``,\\n``__delitem__()``, and ``keys()``. Mutable sequences should provide\\nmethods ``append()``, ``count()``, ``index()``, ``extend()``,\\n``insert()``, ``pop()``, ``remove()``, ``reverse()`` and ``sort()``,\\nlike Python standard list objects.  Finally, sequence types should\\nimplement addition (meaning concatenation) and multiplication (meaning\\nrepetition) by defining the methods ``__add__()``, ``__radd__()``,\\n``__iadd__()``, ``__mul__()``, ``__rmul__()`` and ``__imul__()``\\ndescribed below; they should not define other numerical operators.  It\\nis recommended that both mappings and sequences implement the\\n``__contains__()`` method to allow efficient use of the ``in``\\noperator; for mappings, ``in`` should search the mapping's keys; for\\nsequences, it should search through the values.  It is further\\nrecommended that both mappings and sequences implement the\\n``__iter__()`` method to allow efficient iteration through the\\ncontainer; for mappings, ``__iter__()`` should be the same as\\n``keys()``; for sequences, it should iterate through the values.\\n\\nobject.__len__(self)\\n\\n   Called to implement the built-in function ``len()``.  Should return\\n   the length of the object, an integer ``>=`` 0.  Also, an object\\n   that doesn't define a ``__bool__()`` method and whose ``__len__()``\\n   method returns zero is considered to be false in a Boolean context.\\n\\nNote: Slicing is done exclusively with the following three methods.  A\\n  call like\\n\\n     a[1:2] = b\\n\\n  is translated to\\n\\n     a[slice(1, 2, None)] = b\\n\\n  and so forth.  Missing slice items are always filled in with\\n  ``None``.\\n\\nobject.__getitem__(self, key)\\n\\n   Called to implement evaluation of ``self[key]``. For sequence\\n   types, the accepted keys should be integers and slice objects.\\n   Note that the special interpretation of negative indexes (if the\\n   class wishes to emulate a sequence type) is up to the\\n   ``__getitem__()`` method. If *key* is of an inappropriate type,\\n   ``TypeError`` may be raised; if of a value outside the set of\\n   indexes for the sequence (after any special interpretation of\\n   negative values), ``IndexError`` should be raised. For mapping\\n   types, if *key* is missing (not in the container), ``KeyError``\\n   should be raised.\\n\\n   Note: ``for`` loops expect that an ``IndexError`` will be raised for\\n     illegal indexes to allow proper detection of the end of the\\n     sequence.\\n\\nobject.__setitem__(self, key, value)\\n\\n   Called to implement assignment to ``self[key]``.  Same note as for\\n   ``__getitem__()``.  This should only be implemented for mappings if\\n   the objects support changes to the values for keys, or if new keys\\n   can be added, or for sequences if elements can be replaced.  The\\n   same exceptions should be raised for improper *key* values as for\\n   the ``__getitem__()`` method.\\n\\nobject.__delitem__(self, key)\\n\\n   Called to implement deletion of ``self[key]``.  Same note as for\\n   ``__getitem__()``.  This should only be implemented for mappings if\\n   the objects support removal of keys, or for sequences if elements\\n   can be removed from the sequence.  The same exceptions should be\\n   raised for improper *key* values as for the ``__getitem__()``\\n   method.\\n\\nobject.__iter__(self)\\n\\n   This method is called when an iterator is required for a container.\\n   This method should return a new iterator object that can iterate\\n   over all the objects in the container.  For mappings, it should\\n   iterate over the keys of the container, and should also be made\\n   available as the method ``keys()``.\\n\\n   Iterator objects also need to implement this method; they are\\n   required to return themselves.  For more information on iterator\\n   objects, see *Iterator Types*.\\n\\nobject.__reversed__(self)\\n\\n   Called (if present) by the ``reversed()`` built-in to implement\\n   reverse iteration.  It should return a new iterator object that\\n   iterates over all the objects in the container in reverse order.\\n\\n   If the ``__reversed__()`` method is not provided, the\\n   ``reversed()`` built-in will fall back to using the sequence\\n   protocol (``__len__()`` and ``__getitem__()``).  Objects that\\n   support the sequence protocol should only provide\\n   ``__reversed__()`` if they can provide an implementation that is\\n   more efficient than the one provided by ``reversed()``.\\n\\nThe membership test operators (``in`` and ``not in``) are normally\\nimplemented as an iteration through a sequence.  However, container\\nobjects can supply the following special method with a more efficient\\nimplementation, which also does not require the object be a sequence.\\n\\nobject.__contains__(self, item)\\n\\n   Called to implement membership test operators.  Should return true\\n   if *item* is in *self*, false otherwise.  For mapping objects, this\\n   should consider the keys of the mapping rather than the values or\\n   the key-item pairs.\\n\\n   For objects that don't define ``__contains__()``, the membership\\n   test first tries iteration via ``__iter__()``, then the old\\n   sequence iteration protocol via ``__getitem__()``, see *this\\n   section in the language reference*.\\n\",\n'shifting':'\\nShifting operations\\n*******************\\n\\nThe shifting operations have lower priority than the arithmetic\\noperations:\\n\\n   shift_expr ::= a_expr | shift_expr ( \"<<\" | \">>\" ) a_expr\\n\\nThese operators accept integers as arguments.  They shift the first\\nargument to the left or right by the number of bits given by the\\nsecond argument.\\n\\nA right shift by *n* bits is defined as division by ``pow(2,n)``.  A\\nleft shift by *n* bits is defined as multiplication with ``pow(2,n)``.\\n\\nNote: In the current implementation, the right-hand operand is required to\\n  be at most ``sys.maxsize``.  If the right-hand operand is larger\\n  than ``sys.maxsize`` an ``OverflowError`` exception is raised.\\n',\n'slicings':'\\nSlicings\\n********\\n\\nA slicing selects a range of items in a sequence object (e.g., a\\nstring, tuple or list).  Slicings may be used as expressions or as\\ntargets in assignment or ``del`` statements.  The syntax for a\\nslicing:\\n\\n   slicing      ::= primary \"[\" slice_list \"]\"\\n   slice_list   ::= slice_item (\",\" slice_item)* [\",\"]\\n   slice_item   ::= expression | proper_slice\\n   proper_slice ::= [lower_bound] \":\" [upper_bound] [ \":\" [stride] ]\\n   lower_bound  ::= expression\\n   upper_bound  ::= expression\\n   stride       ::= expression\\n\\nThere is ambiguity in the formal syntax here: anything that looks like\\nan expression list also looks like a slice list, so any subscription\\ncan be interpreted as a slicing.  Rather than further complicating the\\nsyntax, this is disambiguated by defining that in this case the\\ninterpretation as a subscription takes priority over the\\ninterpretation as a slicing (this is the case if the slice list\\ncontains no proper slice).\\n\\nThe semantics for a slicing are as follows.  The primary must evaluate\\nto a mapping object, and it is indexed (using the same\\n``__getitem__()`` method as normal subscription) with a key that is\\nconstructed from the slice list, as follows.  If the slice list\\ncontains at least one comma, the key is a tuple containing the\\nconversion of the slice items; otherwise, the conversion of the lone\\nslice item is the key.  The conversion of a slice item that is an\\nexpression is that expression.  The conversion of a proper slice is a\\nslice object (see section *The standard type hierarchy*) whose\\n``start``, ``stop`` and ``step`` attributes are the values of the\\nexpressions given as lower bound, upper bound and stride,\\nrespectively, substituting ``None`` for missing expressions.\\n',\n'specialattrs':'\\nSpecial Attributes\\n******************\\n\\nThe implementation adds a few special read-only attributes to several\\nobject types, where they are relevant.  Some of these are not reported\\nby the ``dir()`` built-in function.\\n\\nobject.__dict__\\n\\n   A dictionary or other mapping object used to store an object\\'s\\n   (writable) attributes.\\n\\ninstance.__class__\\n\\n   The class to which a class instance belongs.\\n\\nclass.__bases__\\n\\n   The tuple of base classes of a class object.\\n\\nclass.__name__\\n\\n   The name of the class or type.\\n\\nclass.__qualname__\\n\\n   The *qualified name* of the class or type.\\n\\n   New in version 3.3.\\n\\nclass.__mro__\\n\\n   This attribute is a tuple of classes that are considered when\\n   looking for base classes during method resolution.\\n\\nclass.mro()\\n\\n   This method can be overridden by a metaclass to customize the\\n   method resolution order for its instances.  It is called at class\\n   instantiation, and its result is stored in ``__mro__``.\\n\\nclass.__subclasses__()\\n\\n   Each class keeps a list of weak references to its immediate\\n   subclasses.  This method returns a list of all those references\\n   still alive. Example:\\n\\n      >>> int.__subclasses__()\\n      [<class \\'bool\\'>]\\n\\n-[ Footnotes ]-\\n\\n[1] Additional information on these special methods may be found in\\n    the Python Reference Manual (*Basic customization*).\\n\\n[2] As a consequence, the list ``[1, 2]`` is considered equal to\\n    ``[1.0, 2.0]``, and similarly for tuples.\\n\\n[3] They must have since the parser can\\'t tell the type of the\\n    operands.\\n\\n[4] Cased characters are those with general category property being\\n    one of \"Lu\" (Letter, uppercase), \"Ll\" (Letter, lowercase), or \"Lt\"\\n    (Letter, titlecase).\\n\\n[5] To format only a tuple you should therefore provide a singleton\\n    tuple whose only element is the tuple to be formatted.\\n',\n'specialnames':'\\nSpecial method names\\n********************\\n\\nA class can implement certain operations that are invoked by special\\nsyntax (such as arithmetic operations or subscripting and slicing) by\\ndefining methods with special names. This is Python\\'s approach to\\n*operator overloading*, allowing classes to define their own behavior\\nwith respect to language operators.  For instance, if a class defines\\na method named ``__getitem__()``, and ``x`` is an instance of this\\nclass, then ``x[i]`` is roughly equivalent to ``type(x).__getitem__(x,\\ni)``.  Except where mentioned, attempts to execute an operation raise\\nan exception when no appropriate method is defined (typically\\n``AttributeError`` or ``TypeError``).\\n\\nWhen implementing a class that emulates any built-in type, it is\\nimportant that the emulation only be implemented to the degree that it\\nmakes sense for the object being modelled.  For example, some\\nsequences may work well with retrieval of individual elements, but\\nextracting a slice may not make sense.  (One example of this is the\\n``NodeList`` interface in the W3C\\'s Document Object Model.)\\n\\n\\nBasic customization\\n===================\\n\\nobject.__new__(cls[, ...])\\n\\n   Called to create a new instance of class *cls*.  ``__new__()`` is a\\n   static method (special-cased so you need not declare it as such)\\n   that takes the class of which an instance was requested as its\\n   first argument.  The remaining arguments are those passed to the\\n   object constructor expression (the call to the class).  The return\\n   value of ``__new__()`` should be the new object instance (usually\\n   an instance of *cls*).\\n\\n   Typical implementations create a new instance of the class by\\n   invoking the superclass\\'s ``__new__()`` method using\\n   ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\\n   arguments and then modifying the newly-created instance as\\n   necessary before returning it.\\n\\n   If ``__new__()`` returns an instance of *cls*, then the new\\n   instance\\'s ``__init__()`` method will be invoked like\\n   ``__init__(self[, ...])``, where *self* is the new instance and the\\n   remaining arguments are the same as were passed to ``__new__()``.\\n\\n   If ``__new__()`` does not return an instance of *cls*, then the new\\n   instance\\'s ``__init__()`` method will not be invoked.\\n\\n   ``__new__()`` is intended mainly to allow subclasses of immutable\\n   types (like int, str, or tuple) to customize instance creation.  It\\n   is also commonly overridden in custom metaclasses in order to\\n   customize class creation.\\n\\nobject.__init__(self[, ...])\\n\\n   Called when the instance is created.  The arguments are those\\n   passed to the class constructor expression.  If a base class has an\\n   ``__init__()`` method, the derived class\\'s ``__init__()`` method,\\n   if any, must explicitly call it to ensure proper initialization of\\n   the base class part of the instance; for example:\\n   ``BaseClass.__init__(self, [args...])``.  As a special constraint\\n   on constructors, no value may be returned; doing so will cause a\\n   ``TypeError`` to be raised at runtime.\\n\\nobject.__del__(self)\\n\\n   Called when the instance is about to be destroyed.  This is also\\n   called a destructor.  If a base class has a ``__del__()`` method,\\n   the derived class\\'s ``__del__()`` method, if any, must explicitly\\n   call it to ensure proper deletion of the base class part of the\\n   instance.  Note that it is possible (though not recommended!) for\\n   the ``__del__()`` method to postpone destruction of the instance by\\n   creating a new reference to it.  It may then be called at a later\\n   time when this new reference is deleted.  It is not guaranteed that\\n   ``__del__()`` methods are called for objects that still exist when\\n   the interpreter exits.\\n\\n   Note: ``del x`` doesn\\'t directly call ``x.__del__()`` --- the former\\n     decrements the reference count for ``x`` by one, and the latter\\n     is only called when ``x``\\'s reference count reaches zero.  Some\\n     common situations that may prevent the reference count of an\\n     object from going to zero include: circular references between\\n     objects (e.g., a doubly-linked list or a tree data structure with\\n     parent and child pointers); a reference to the object on the\\n     stack frame of a function that caught an exception (the traceback\\n     stored in ``sys.exc_info()[2]`` keeps the stack frame alive); or\\n     a reference to the object on the stack frame that raised an\\n     unhandled exception in interactive mode (the traceback stored in\\n     ``sys.last_traceback`` keeps the stack frame alive).  The first\\n     situation can only be remedied by explicitly breaking the cycles;\\n     the latter two situations can be resolved by storing ``None`` in\\n     ``sys.last_traceback``. Circular references which are garbage are\\n     detected when the option cycle detector is enabled (it\\'s on by\\n     default), but can only be cleaned up if there are no Python-\\n     level ``__del__()`` methods involved. Refer to the documentation\\n     for the ``gc`` module for more information about how\\n     ``__del__()`` methods are handled by the cycle detector,\\n     particularly the description of the ``garbage`` value.\\n\\n   Warning: Due to the precarious circumstances under which ``__del__()``\\n     methods are invoked, exceptions that occur during their execution\\n     are ignored, and a warning is printed to ``sys.stderr`` instead.\\n     Also, when ``__del__()`` is invoked in response to a module being\\n     deleted (e.g., when execution of the program is done), other\\n     globals referenced by the ``__del__()`` method may already have\\n     been deleted or in the process of being torn down (e.g. the\\n     import machinery shutting down).  For this reason, ``__del__()``\\n     methods should do the absolute minimum needed to maintain\\n     external invariants.  Starting with version 1.5, Python\\n     guarantees that globals whose name begins with a single\\n     underscore are deleted from their module before other globals are\\n     deleted; if no other references to such globals exist, this may\\n     help in assuring that imported modules are still available at the\\n     time when the ``__del__()`` method is called.\\n\\nobject.__repr__(self)\\n\\n   Called by the ``repr()`` built-in function to compute the\\n   \"official\" string representation of an object.  If at all possible,\\n   this should look like a valid Python expression that could be used\\n   to recreate an object with the same value (given an appropriate\\n   environment).  If this is not possible, a string of the form\\n   ``<...some useful description...>`` should be returned. The return\\n   value must be a string object. If a class defines ``__repr__()``\\n   but not ``__str__()``, then ``__repr__()`` is also used when an\\n   \"informal\" string representation of instances of that class is\\n   required.\\n\\n   This is typically used for debugging, so it is important that the\\n   representation is information-rich and unambiguous.\\n\\nobject.__str__(self)\\n\\n   Called by ``str(object)`` and the built-in functions ``format()``\\n   and ``print()`` to compute the \"informal\" or nicely printable\\n   string representation of an object.  The return value must be a\\n   *string* object.\\n\\n   This method differs from ``object.__repr__()`` in that there is no\\n   expectation that ``__str__()`` return a valid Python expression: a\\n   more convenient or concise representation can be used.\\n\\n   The default implementation defined by the built-in type ``object``\\n   calls ``object.__repr__()``.\\n\\nobject.__bytes__(self)\\n\\n   Called by ``bytes()`` to compute a byte-string representation of an\\n   object. This should return a ``bytes`` object.\\n\\nobject.__format__(self, format_spec)\\n\\n   Called by the ``format()`` built-in function (and by extension, the\\n   ``str.format()`` method of class ``str``) to produce a \"formatted\"\\n   string representation of an object. The ``format_spec`` argument is\\n   a string that contains a description of the formatting options\\n   desired. The interpretation of the ``format_spec`` argument is up\\n   to the type implementing ``__format__()``, however most classes\\n   will either delegate formatting to one of the built-in types, or\\n   use a similar formatting option syntax.\\n\\n   See *Format Specification Mini-Language* for a description of the\\n   standard formatting syntax.\\n\\n   The return value must be a string object.\\n\\nobject.__lt__(self, other)\\nobject.__le__(self, other)\\nobject.__eq__(self, other)\\nobject.__ne__(self, other)\\nobject.__gt__(self, other)\\nobject.__ge__(self, other)\\n\\n   These are the so-called \"rich comparison\" methods. The\\n   correspondence between operator symbols and method names is as\\n   follows: ``x<y`` calls ``x.__lt__(y)``, ``x<=y`` calls\\n   ``x.__le__(y)``, ``x==y`` calls ``x.__eq__(y)``, ``x!=y`` calls\\n   ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and ``x>=y`` calls\\n   ``x.__ge__(y)``.\\n\\n   A rich comparison method may return the singleton\\n   ``NotImplemented`` if it does not implement the operation for a\\n   given pair of arguments. By convention, ``False`` and ``True`` are\\n   returned for a successful comparison. However, these methods can\\n   return any value, so if the comparison operator is used in a\\n   Boolean context (e.g., in the condition of an ``if`` statement),\\n   Python will call ``bool()`` on the value to determine if the result\\n   is true or false.\\n\\n   There are no implied relationships among the comparison operators.\\n   The truth of ``x==y`` does not imply that ``x!=y`` is false.\\n   Accordingly, when defining ``__eq__()``, one should also define\\n   ``__ne__()`` so that the operators will behave as expected.  See\\n   the paragraph on ``__hash__()`` for some important notes on\\n   creating *hashable* objects which support custom comparison\\n   operations and are usable as dictionary keys.\\n\\n   There are no swapped-argument versions of these methods (to be used\\n   when the left argument does not support the operation but the right\\n   argument does); rather, ``__lt__()`` and ``__gt__()`` are each\\n   other\\'s reflection, ``__le__()`` and ``__ge__()`` are each other\\'s\\n   reflection, and ``__eq__()`` and ``__ne__()`` are their own\\n   reflection.\\n\\n   Arguments to rich comparison methods are never coerced.\\n\\n   To automatically generate ordering operations from a single root\\n   operation, see ``functools.total_ordering()``.\\n\\nobject.__hash__(self)\\n\\n   Called by built-in function ``hash()`` and for operations on\\n   members of hashed collections including ``set``, ``frozenset``, and\\n   ``dict``.  ``__hash__()`` should return an integer.  The only\\n   required property is that objects which compare equal have the same\\n   hash value; it is advised to somehow mix together (e.g. using\\n   exclusive or) the hash values for the components of the object that\\n   also play a part in comparison of objects.\\n\\n   If a class does not define an ``__eq__()`` method it should not\\n   define a ``__hash__()`` operation either; if it defines\\n   ``__eq__()`` but not ``__hash__()``, its instances will not be\\n   usable as items in hashable collections.  If a class defines\\n   mutable objects and implements an ``__eq__()`` method, it should\\n   not implement ``__hash__()``, since the implementation of hashable\\n   collections requires that a key\\'s hash value is immutable (if the\\n   object\\'s hash value changes, it will be in the wrong hash bucket).\\n\\n   User-defined classes have ``__eq__()`` and ``__hash__()`` methods\\n   by default; with them, all objects compare unequal (except with\\n   themselves) and ``x.__hash__()`` returns an appropriate value such\\n   that ``x == y`` implies both that ``x is y`` and ``hash(x) ==\\n   hash(y)``.\\n\\n   A class that overrides ``__eq__()`` and does not define\\n   ``__hash__()`` will have its ``__hash__()`` implicitly set to\\n   ``None``.  When the ``__hash__()`` method of a class is ``None``,\\n   instances of the class will raise an appropriate ``TypeError`` when\\n   a program attempts to retrieve their hash value, and will also be\\n   correctly identified as unhashable when checking ``isinstance(obj,\\n   collections.Hashable``).\\n\\n   If a class that overrides ``__eq__()`` needs to retain the\\n   implementation of ``__hash__()`` from a parent class, the\\n   interpreter must be told this explicitly by setting ``__hash__ =\\n   <ParentClass>.__hash__``.\\n\\n   If a class that does not override ``__eq__()`` wishes to suppress\\n   hash support, it should include ``__hash__ = None`` in the class\\n   definition. A class which defines its own ``__hash__()`` that\\n   explicitly raises a ``TypeError`` would be incorrectly identified\\n   as hashable by an ``isinstance(obj, collections.Hashable)`` call.\\n\\n   Note: By default, the ``__hash__()`` values of str, bytes and datetime\\n     objects are \"salted\" with an unpredictable random value.\\n     Although they remain constant within an individual Python\\n     process, they are not predictable between repeated invocations of\\n     Python.This is intended to provide protection against a denial-\\n     of-service caused by carefully-chosen inputs that exploit the\\n     worst case performance of a dict insertion, O(n^2) complexity.\\n     See http://www.ocert.org/advisories/ocert-2011-003.html for\\n     details.Changing hash values affects the iteration order of\\n     dicts, sets and other mappings.  Python has never made guarantees\\n     about this ordering (and it typically varies between 32-bit and\\n     64-bit builds).See also ``PYTHONHASHSEED``.\\n\\n   Changed in version 3.3: Hash randomization is enabled by default.\\n\\nobject.__bool__(self)\\n\\n   Called to implement truth value testing and the built-in operation\\n   ``bool()``; should return ``False`` or ``True``.  When this method\\n   is not defined, ``__len__()`` is called, if it is defined, and the\\n   object is considered true if its result is nonzero.  If a class\\n   defines neither ``__len__()`` nor ``__bool__()``, all its instances\\n   are considered true.\\n\\n\\nCustomizing attribute access\\n============================\\n\\nThe following methods can be defined to customize the meaning of\\nattribute access (use of, assignment to, or deletion of ``x.name``)\\nfor class instances.\\n\\nobject.__getattr__(self, name)\\n\\n   Called when an attribute lookup has not found the attribute in the\\n   usual places (i.e. it is not an instance attribute nor is it found\\n   in the class tree for ``self``).  ``name`` is the attribute name.\\n   This method should return the (computed) attribute value or raise\\n   an ``AttributeError`` exception.\\n\\n   Note that if the attribute is found through the normal mechanism,\\n   ``__getattr__()`` is not called.  (This is an intentional asymmetry\\n   between ``__getattr__()`` and ``__setattr__()``.) This is done both\\n   for efficiency reasons and because otherwise ``__getattr__()``\\n   would have no way to access other attributes of the instance.  Note\\n   that at least for instance variables, you can fake total control by\\n   not inserting any values in the instance attribute dictionary (but\\n   instead inserting them in another object).  See the\\n   ``__getattribute__()`` method below for a way to actually get total\\n   control over attribute access.\\n\\nobject.__getattribute__(self, name)\\n\\n   Called unconditionally to implement attribute accesses for\\n   instances of the class. If the class also defines\\n   ``__getattr__()``, the latter will not be called unless\\n   ``__getattribute__()`` either calls it explicitly or raises an\\n   ``AttributeError``. This method should return the (computed)\\n   attribute value or raise an ``AttributeError`` exception. In order\\n   to avoid infinite recursion in this method, its implementation\\n   should always call the base class method with the same name to\\n   access any attributes it needs, for example,\\n   ``object.__getattribute__(self, name)``.\\n\\n   Note: This method may still be bypassed when looking up special methods\\n     as the result of implicit invocation via language syntax or\\n     built-in functions. See *Special method lookup*.\\n\\nobject.__setattr__(self, name, value)\\n\\n   Called when an attribute assignment is attempted.  This is called\\n   instead of the normal mechanism (i.e. store the value in the\\n   instance dictionary). *name* is the attribute name, *value* is the\\n   value to be assigned to it.\\n\\n   If ``__setattr__()`` wants to assign to an instance attribute, it\\n   should call the base class method with the same name, for example,\\n   ``object.__setattr__(self, name, value)``.\\n\\nobject.__delattr__(self, name)\\n\\n   Like ``__setattr__()`` but for attribute deletion instead of\\n   assignment.  This should only be implemented if ``del obj.name`` is\\n   meaningful for the object.\\n\\nobject.__dir__(self)\\n\\n   Called when ``dir()`` is called on the object. A sequence must be\\n   returned. ``dir()`` converts the returned sequence to a list and\\n   sorts it.\\n\\n\\nImplementing Descriptors\\n------------------------\\n\\nThe following methods only apply when an instance of the class\\ncontaining the method (a so-called *descriptor* class) appears in an\\n*owner* class (the descriptor must be in either the owner\\'s class\\ndictionary or in the class dictionary for one of its parents).  In the\\nexamples below, \"the attribute\" refers to the attribute whose name is\\nthe key of the property in the owner class\\' ``__dict__``.\\n\\nobject.__get__(self, instance, owner)\\n\\n   Called to get the attribute of the owner class (class attribute\\n   access) or of an instance of that class (instance attribute\\n   access). *owner* is always the owner class, while *instance* is the\\n   instance that the attribute was accessed through, or ``None`` when\\n   the attribute is accessed through the *owner*.  This method should\\n   return the (computed) attribute value or raise an\\n   ``AttributeError`` exception.\\n\\nobject.__set__(self, instance, value)\\n\\n   Called to set the attribute on an instance *instance* of the owner\\n   class to a new value, *value*.\\n\\nobject.__delete__(self, instance)\\n\\n   Called to delete the attribute on an instance *instance* of the\\n   owner class.\\n\\n\\nInvoking Descriptors\\n--------------------\\n\\nIn general, a descriptor is an object attribute with \"binding\\nbehavior\", one whose attribute access has been overridden by methods\\nin the descriptor protocol:  ``__get__()``, ``__set__()``, and\\n``__delete__()``. If any of those methods are defined for an object,\\nit is said to be a descriptor.\\n\\nThe default behavior for attribute access is to get, set, or delete\\nthe attribute from an object\\'s dictionary. For instance, ``a.x`` has a\\nlookup chain starting with ``a.__dict__[\\'x\\']``, then\\n``type(a).__dict__[\\'x\\']``, and continuing through the base classes of\\n``type(a)`` excluding metaclasses.\\n\\nHowever, if the looked-up value is an object defining one of the\\ndescriptor methods, then Python may override the default behavior and\\ninvoke the descriptor method instead.  Where this occurs in the\\nprecedence chain depends on which descriptor methods were defined and\\nhow they were called.\\n\\nThe starting point for descriptor invocation is a binding, ``a.x``.\\nHow the arguments are assembled depends on ``a``:\\n\\nDirect Call\\n   The simplest and least common call is when user code directly\\n   invokes a descriptor method:    ``x.__get__(a)``.\\n\\nInstance Binding\\n   If binding to an object instance, ``a.x`` is transformed into the\\n   call: ``type(a).__dict__[\\'x\\'].__get__(a, type(a))``.\\n\\nClass Binding\\n   If binding to a class, ``A.x`` is transformed into the call:\\n   ``A.__dict__[\\'x\\'].__get__(None, A)``.\\n\\nSuper Binding\\n   If ``a`` is an instance of ``super``, then the binding ``super(B,\\n   obj).m()`` searches ``obj.__class__.__mro__`` for the base class\\n   ``A`` immediately preceding ``B`` and then invokes the descriptor\\n   with the call: ``A.__dict__[\\'m\\'].__get__(obj, obj.__class__)``.\\n\\nFor instance bindings, the precedence of descriptor invocation depends\\non the which descriptor methods are defined.  A descriptor can define\\nany combination of ``__get__()``, ``__set__()`` and ``__delete__()``.\\nIf it does not define ``__get__()``, then accessing the attribute will\\nreturn the descriptor object itself unless there is a value in the\\nobject\\'s instance dictionary.  If the descriptor defines ``__set__()``\\nand/or ``__delete__()``, it is a data descriptor; if it defines\\nneither, it is a non-data descriptor.  Normally, data descriptors\\ndefine both ``__get__()`` and ``__set__()``, while non-data\\ndescriptors have just the ``__get__()`` method.  Data descriptors with\\n``__set__()`` and ``__get__()`` defined always override a redefinition\\nin an instance dictionary.  In contrast, non-data descriptors can be\\noverridden by instances.\\n\\nPython methods (including ``staticmethod()`` and ``classmethod()``)\\nare implemented as non-data descriptors.  Accordingly, instances can\\nredefine and override methods.  This allows individual instances to\\nacquire behaviors that differ from other instances of the same class.\\n\\nThe ``property()`` function is implemented as a data descriptor.\\nAccordingly, instances cannot override the behavior of a property.\\n\\n\\n__slots__\\n---------\\n\\nBy default, instances of classes have a dictionary for attribute\\nstorage.  This wastes space for objects having very few instance\\nvariables.  The space consumption can become acute when creating large\\nnumbers of instances.\\n\\nThe default can be overridden by defining *__slots__* in a class\\ndefinition. The *__slots__* declaration takes a sequence of instance\\nvariables and reserves just enough space in each instance to hold a\\nvalue for each variable.  Space is saved because *__dict__* is not\\ncreated for each instance.\\n\\nobject.__slots__\\n\\n   This class variable can be assigned a string, iterable, or sequence\\n   of strings with variable names used by instances.  If defined in a\\n   class, *__slots__* reserves space for the declared variables and\\n   prevents the automatic creation of *__dict__* and *__weakref__* for\\n   each instance.\\n\\n\\nNotes on using *__slots__*\\n~~~~~~~~~~~~~~~~~~~~~~~~~~\\n\\n* When inheriting from a class without *__slots__*, the *__dict__*\\n  attribute of that class will always be accessible, so a *__slots__*\\n  definition in the subclass is meaningless.\\n\\n* Without a *__dict__* variable, instances cannot be assigned new\\n  variables not listed in the *__slots__* definition.  Attempts to\\n  assign to an unlisted variable name raises ``AttributeError``. If\\n  dynamic assignment of new variables is desired, then add\\n  ``\\'__dict__\\'`` to the sequence of strings in the *__slots__*\\n  declaration.\\n\\n* Without a *__weakref__* variable for each instance, classes defining\\n  *__slots__* do not support weak references to its instances. If weak\\n  reference support is needed, then add ``\\'__weakref__\\'`` to the\\n  sequence of strings in the *__slots__* declaration.\\n\\n* *__slots__* are implemented at the class level by creating\\n  descriptors (*Implementing Descriptors*) for each variable name.  As\\n  a result, class attributes cannot be used to set default values for\\n  instance variables defined by *__slots__*; otherwise, the class\\n  attribute would overwrite the descriptor assignment.\\n\\n* The action of a *__slots__* declaration is limited to the class\\n  where it is defined.  As a result, subclasses will have a *__dict__*\\n  unless they also define *__slots__* (which must only contain names\\n  of any *additional* slots).\\n\\n* If a class defines a slot also defined in a base class, the instance\\n  variable defined by the base class slot is inaccessible (except by\\n  retrieving its descriptor directly from the base class). This\\n  renders the meaning of the program undefined.  In the future, a\\n  check may be added to prevent this.\\n\\n* Nonempty *__slots__* does not work for classes derived from\\n  \"variable-length\" built-in types such as ``int``, ``str`` and\\n  ``tuple``.\\n\\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\\n  also be used; however, in the future, special meaning may be\\n  assigned to the values corresponding to each key.\\n\\n* *__class__* assignment works only if both classes have the same\\n  *__slots__*.\\n\\n\\nCustomizing class creation\\n==========================\\n\\nBy default, classes are constructed using ``type()``. The class body\\nis executed in a new namespace and the class name is bound locally to\\nthe result of ``type(name, bases, namespace)``.\\n\\nThe class creation process can be customised by passing the\\n``metaclass`` keyword argument in the class definition line, or by\\ninheriting from an existing class that included such an argument. In\\nthe following example, both ``MyClass`` and ``MySubclass`` are\\ninstances of ``Meta``:\\n\\n   class Meta(type):\\n       pass\\n\\n   class MyClass(metaclass=Meta):\\n       pass\\n\\n   class MySubclass(MyClass):\\n       pass\\n\\nAny other keyword arguments that are specified in the class definition\\nare passed through to all metaclass operations described below.\\n\\nWhen a class definition is executed, the following steps occur:\\n\\n* the appropriate metaclass is determined\\n\\n* the class namespace is prepared\\n\\n* the class body is executed\\n\\n* the class object is created\\n\\n\\nDetermining the appropriate metaclass\\n-------------------------------------\\n\\nThe appropriate metaclass for a class definition is determined as\\nfollows:\\n\\n* if no bases and no explicit metaclass are given, then ``type()`` is\\n  used\\n\\n* if an explicit metaclass is given and it is *not* an instance of\\n  ``type()``, then it is used directly as the metaclass\\n\\n* if an instance of ``type()`` is given as the explicit metaclass, or\\n  bases are defined, then the most derived metaclass is used\\n\\nThe most derived metaclass is selected from the explicitly specified\\nmetaclass (if any) and the metaclasses (i.e. ``type(cls)``) of all\\nspecified base classes. The most derived metaclass is one which is a\\nsubtype of *all* of these candidate metaclasses. If none of the\\ncandidate metaclasses meets that criterion, then the class definition\\nwill fail with ``TypeError``.\\n\\n\\nPreparing the class namespace\\n-----------------------------\\n\\nOnce the appropriate metaclass has been identified, then the class\\nnamespace is prepared. If the metaclass has a ``__prepare__``\\nattribute, it is called as ``namespace = metaclass.__prepare__(name,\\nbases, **kwds)`` (where the additional keyword arguments, if any, come\\nfrom the class definition).\\n\\nIf the metaclass has no ``__prepare__`` attribute, then the class\\nnamespace is initialised as an empty ``dict()`` instance.\\n\\nSee also:\\n\\n   **PEP 3115** - Metaclasses in Python 3000\\n      Introduced the ``__prepare__`` namespace hook\\n\\n\\nExecuting the class body\\n------------------------\\n\\nThe class body is executed (approximately) as ``exec(body, globals(),\\nnamespace)``. The key difference from a normal call to ``exec()`` is\\nthat lexical scoping allows the class body (including any methods) to\\nreference names from the current and outer scopes when the class\\ndefinition occurs inside a function.\\n\\nHowever, even when the class definition occurs inside the function,\\nmethods defined inside the class still cannot see names defined at the\\nclass scope. Class variables must be accessed through the first\\nparameter of instance or class methods, and cannot be accessed at all\\nfrom static methods.\\n\\n\\nCreating the class object\\n-------------------------\\n\\nOnce the class namespace has been populated by executing the class\\nbody, the class object is created by calling ``metaclass(name, bases,\\nnamespace, **kwds)`` (the additional keywords passed here are the same\\nas those passed to ``__prepare__``).\\n\\nThis class object is the one that will be referenced by the zero-\\nargument form of ``super()``. ``__class__`` is an implicit closure\\nreference created by the compiler if any methods in a class body refer\\nto either ``__class__`` or ``super``. This allows the zero argument\\nform of ``super()`` to correctly identify the class being defined\\nbased on lexical scoping, while the class or instance that was used to\\nmake the current call is identified based on the first argument passed\\nto the method.\\n\\nAfter the class object is created, it is passed to the class\\ndecorators included in the class definition (if any) and the resulting\\nobject is bound in the local namespace as the defined class.\\n\\nSee also:\\n\\n   **PEP 3135** - New super\\n      Describes the implicit ``__class__`` closure reference\\n\\n\\nMetaclass example\\n-----------------\\n\\nThe potential uses for metaclasses are boundless. Some ideas that have\\nbeen explored include logging, interface checking, automatic\\ndelegation, automatic property creation, proxies, frameworks, and\\nautomatic resource locking/synchronization.\\n\\nHere is an example of a metaclass that uses an\\n``collections.OrderedDict`` to remember the order that class members\\nwere defined:\\n\\n   class OrderedClass(type):\\n\\n        @classmethod\\n        def __prepare__(metacls, name, bases, **kwds):\\n           return collections.OrderedDict()\\n\\n        def __new__(cls, name, bases, namespace, **kwds):\\n           result = type.__new__(cls, name, bases, dict(namespace))\\n           result.members = tuple(namespace)\\n           return result\\n\\n   class A(metaclass=OrderedClass):\\n       def one(self): pass\\n       def two(self): pass\\n       def three(self): pass\\n       def four(self): pass\\n\\n   >>> A.members\\n   (\\'__module__\\', \\'one\\', \\'two\\', \\'three\\', \\'four\\')\\n\\nWhen the class definition for *A* gets executed, the process begins\\nwith calling the metaclass\\'s ``__prepare__()`` method which returns an\\nempty ``collections.OrderedDict``.  That mapping records the methods\\nand attributes of *A* as they are defined within the body of the class\\nstatement. Once those definitions are executed, the ordered dictionary\\nis fully populated and the metaclass\\'s ``__new__()`` method gets\\ninvoked.  That method builds the new type and it saves the ordered\\ndictionary keys in an attribute called ``members``.\\n\\n\\nCustomizing instance and subclass checks\\n========================================\\n\\nThe following methods are used to override the default behavior of the\\n``isinstance()`` and ``issubclass()`` built-in functions.\\n\\nIn particular, the metaclass ``abc.ABCMeta`` implements these methods\\nin order to allow the addition of Abstract Base Classes (ABCs) as\\n\"virtual base classes\" to any class or type (including built-in\\ntypes), including other ABCs.\\n\\nclass.__instancecheck__(self, instance)\\n\\n   Return true if *instance* should be considered a (direct or\\n   indirect) instance of *class*. If defined, called to implement\\n   ``isinstance(instance, class)``.\\n\\nclass.__subclasscheck__(self, subclass)\\n\\n   Return true if *subclass* should be considered a (direct or\\n   indirect) subclass of *class*.  If defined, called to implement\\n   ``issubclass(subclass, class)``.\\n\\nNote that these methods are looked up on the type (metaclass) of a\\nclass.  They cannot be defined as class methods in the actual class.\\nThis is consistent with the lookup of special methods that are called\\non instances, only in this case the instance is itself a class.\\n\\nSee also:\\n\\n   **PEP 3119** - Introducing Abstract Base Classes\\n      Includes the specification for customizing ``isinstance()`` and\\n      ``issubclass()`` behavior through ``__instancecheck__()`` and\\n      ``__subclasscheck__()``, with motivation for this functionality\\n      in the context of adding Abstract Base Classes (see the ``abc``\\n      module) to the language.\\n\\n\\nEmulating callable objects\\n==========================\\n\\nobject.__call__(self[, args...])\\n\\n   Called when the instance is \"called\" as a function; if this method\\n   is defined, ``x(arg1, arg2, ...)`` is a shorthand for\\n   ``x.__call__(arg1, arg2, ...)``.\\n\\n\\nEmulating container types\\n=========================\\n\\nThe following methods can be defined to implement container objects.\\nContainers usually are sequences (such as lists or tuples) or mappings\\n(like dictionaries), but can represent other containers as well.  The\\nfirst set of methods is used either to emulate a sequence or to\\nemulate a mapping; the difference is that for a sequence, the\\nallowable keys should be the integers *k* for which ``0 <= k < N``\\nwhere *N* is the length of the sequence, or slice objects, which\\ndefine a range of items.  It is also recommended that mappings provide\\nthe methods ``keys()``, ``values()``, ``items()``, ``get()``,\\n``clear()``, ``setdefault()``, ``pop()``, ``popitem()``, ``copy()``,\\nand ``update()`` behaving similar to those for Python\\'s standard\\ndictionary objects.  The ``collections`` module provides a\\n``MutableMapping`` abstract base class to help create those methods\\nfrom a base set of ``__getitem__()``, ``__setitem__()``,\\n``__delitem__()``, and ``keys()``. Mutable sequences should provide\\nmethods ``append()``, ``count()``, ``index()``, ``extend()``,\\n``insert()``, ``pop()``, ``remove()``, ``reverse()`` and ``sort()``,\\nlike Python standard list objects.  Finally, sequence types should\\nimplement addition (meaning concatenation) and multiplication (meaning\\nrepetition) by defining the methods ``__add__()``, ``__radd__()``,\\n``__iadd__()``, ``__mul__()``, ``__rmul__()`` and ``__imul__()``\\ndescribed below; they should not define other numerical operators.  It\\nis recommended that both mappings and sequences implement the\\n``__contains__()`` method to allow efficient use of the ``in``\\noperator; for mappings, ``in`` should search the mapping\\'s keys; for\\nsequences, it should search through the values.  It is further\\nrecommended that both mappings and sequences implement the\\n``__iter__()`` method to allow efficient iteration through the\\ncontainer; for mappings, ``__iter__()`` should be the same as\\n``keys()``; for sequences, it should iterate through the values.\\n\\nobject.__len__(self)\\n\\n   Called to implement the built-in function ``len()``.  Should return\\n   the length of the object, an integer ``>=`` 0.  Also, an object\\n   that doesn\\'t define a ``__bool__()`` method and whose ``__len__()``\\n   method returns zero is considered to be false in a Boolean context.\\n\\nNote: Slicing is done exclusively with the following three methods.  A\\n  call like\\n\\n     a[1:2] = b\\n\\n  is translated to\\n\\n     a[slice(1, 2, None)] = b\\n\\n  and so forth.  Missing slice items are always filled in with\\n  ``None``.\\n\\nobject.__getitem__(self, key)\\n\\n   Called to implement evaluation of ``self[key]``. For sequence\\n   types, the accepted keys should be integers and slice objects.\\n   Note that the special interpretation of negative indexes (if the\\n   class wishes to emulate a sequence type) is up to the\\n   ``__getitem__()`` method. If *key* is of an inappropriate type,\\n   ``TypeError`` may be raised; if of a value outside the set of\\n   indexes for the sequence (after any special interpretation of\\n   negative values), ``IndexError`` should be raised. For mapping\\n   types, if *key* is missing (not in the container), ``KeyError``\\n   should be raised.\\n\\n   Note: ``for`` loops expect that an ``IndexError`` will be raised for\\n     illegal indexes to allow proper detection of the end of the\\n     sequence.\\n\\nobject.__setitem__(self, key, value)\\n\\n   Called to implement assignment to ``self[key]``.  Same note as for\\n   ``__getitem__()``.  This should only be implemented for mappings if\\n   the objects support changes to the values for keys, or if new keys\\n   can be added, or for sequences if elements can be replaced.  The\\n   same exceptions should be raised for improper *key* values as for\\n   the ``__getitem__()`` method.\\n\\nobject.__delitem__(self, key)\\n\\n   Called to implement deletion of ``self[key]``.  Same note as for\\n   ``__getitem__()``.  This should only be implemented for mappings if\\n   the objects support removal of keys, or for sequences if elements\\n   can be removed from the sequence.  The same exceptions should be\\n   raised for improper *key* values as for the ``__getitem__()``\\n   method.\\n\\nobject.__iter__(self)\\n\\n   This method is called when an iterator is required for a container.\\n   This method should return a new iterator object that can iterate\\n   over all the objects in the container.  For mappings, it should\\n   iterate over the keys of the container, and should also be made\\n   available as the method ``keys()``.\\n\\n   Iterator objects also need to implement this method; they are\\n   required to return themselves.  For more information on iterator\\n   objects, see *Iterator Types*.\\n\\nobject.__reversed__(self)\\n\\n   Called (if present) by the ``reversed()`` built-in to implement\\n   reverse iteration.  It should return a new iterator object that\\n   iterates over all the objects in the container in reverse order.\\n\\n   If the ``__reversed__()`` method is not provided, the\\n   ``reversed()`` built-in will fall back to using the sequence\\n   protocol (``__len__()`` and ``__getitem__()``).  Objects that\\n   support the sequence protocol should only provide\\n   ``__reversed__()`` if they can provide an implementation that is\\n   more efficient than the one provided by ``reversed()``.\\n\\nThe membership test operators (``in`` and ``not in``) are normally\\nimplemented as an iteration through a sequence.  However, container\\nobjects can supply the following special method with a more efficient\\nimplementation, which also does not require the object be a sequence.\\n\\nobject.__contains__(self, item)\\n\\n   Called to implement membership test operators.  Should return true\\n   if *item* is in *self*, false otherwise.  For mapping objects, this\\n   should consider the keys of the mapping rather than the values or\\n   the key-item pairs.\\n\\n   For objects that don\\'t define ``__contains__()``, the membership\\n   test first tries iteration via ``__iter__()``, then the old\\n   sequence iteration protocol via ``__getitem__()``, see *this\\n   section in the language reference*.\\n\\n\\nEmulating numeric types\\n=======================\\n\\nThe following methods can be defined to emulate numeric objects.\\nMethods corresponding to operations that are not supported by the\\nparticular kind of number implemented (e.g., bitwise operations for\\nnon-integral numbers) should be left undefined.\\n\\nobject.__add__(self, other)\\nobject.__sub__(self, other)\\nobject.__mul__(self, other)\\nobject.__truediv__(self, other)\\nobject.__floordiv__(self, other)\\nobject.__mod__(self, other)\\nobject.__divmod__(self, other)\\nobject.__pow__(self, other[, modulo])\\nobject.__lshift__(self, other)\\nobject.__rshift__(self, other)\\nobject.__and__(self, other)\\nobject.__xor__(self, other)\\nobject.__or__(self, other)\\n\\n   These methods are called to implement the binary arithmetic\\n   operations (``+``, ``-``, ``*``, ``/``, ``//``, ``%``,\\n   ``divmod()``, ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``,\\n   ``|``).  For instance, to evaluate the expression ``x + y``, where\\n   *x* is an instance of a class that has an ``__add__()`` method,\\n   ``x.__add__(y)`` is called.  The ``__divmod__()`` method should be\\n   the equivalent to using ``__floordiv__()`` and ``__mod__()``; it\\n   should not be related to ``__truediv__()``.  Note that\\n   ``__pow__()`` should be defined to accept an optional third\\n   argument if the ternary version of the built-in ``pow()`` function\\n   is to be supported.\\n\\n   If one of those methods does not support the operation with the\\n   supplied arguments, it should return ``NotImplemented``.\\n\\nobject.__radd__(self, other)\\nobject.__rsub__(self, other)\\nobject.__rmul__(self, other)\\nobject.__rtruediv__(self, other)\\nobject.__rfloordiv__(self, other)\\nobject.__rmod__(self, other)\\nobject.__rdivmod__(self, other)\\nobject.__rpow__(self, other)\\nobject.__rlshift__(self, other)\\nobject.__rrshift__(self, other)\\nobject.__rand__(self, other)\\nobject.__rxor__(self, other)\\nobject.__ror__(self, other)\\n\\n   These methods are called to implement the binary arithmetic\\n   operations (``+``, ``-``, ``*``, ``/``, ``//``, ``%``,\\n   ``divmod()``, ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``,\\n   ``|``) with reflected (swapped) operands. These functions are only\\n   called if the left operand does not support the corresponding\\n   operation and the operands are of different types. [2]  For\\n   instance, to evaluate the expression ``x - y``, where *y* is an\\n   instance of a class that has an ``__rsub__()`` method,\\n   ``y.__rsub__(x)`` is called if ``x.__sub__(y)`` returns\\n   *NotImplemented*.\\n\\n   Note that ternary ``pow()`` will not try calling ``__rpow__()``\\n   (the coercion rules would become too complicated).\\n\\n   Note: If the right operand\\'s type is a subclass of the left operand\\'s\\n     type and that subclass provides the reflected method for the\\n     operation, this method will be called before the left operand\\'s\\n     non-reflected method.  This behavior allows subclasses to\\n     override their ancestors\\' operations.\\n\\nobject.__iadd__(self, other)\\nobject.__isub__(self, other)\\nobject.__imul__(self, other)\\nobject.__itruediv__(self, other)\\nobject.__ifloordiv__(self, other)\\nobject.__imod__(self, other)\\nobject.__ipow__(self, other[, modulo])\\nobject.__ilshift__(self, other)\\nobject.__irshift__(self, other)\\nobject.__iand__(self, other)\\nobject.__ixor__(self, other)\\nobject.__ior__(self, other)\\n\\n   These methods are called to implement the augmented arithmetic\\n   assignments (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``,\\n   ``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``).  These methods\\n   should attempt to do the operation in-place (modifying *self*) and\\n   return the result (which could be, but does not have to be,\\n   *self*).  If a specific method is not defined, the augmented\\n   assignment falls back to the normal methods.  For instance, to\\n   execute the statement ``x += y``, where *x* is an instance of a\\n   class that has an ``__iadd__()`` method, ``x.__iadd__(y)`` is\\n   called.  If *x* is an instance of a class that does not define a\\n   ``__iadd__()`` method, ``x.__add__(y)`` and ``y.__radd__(x)`` are\\n   considered, as with the evaluation of ``x + y``.\\n\\nobject.__neg__(self)\\nobject.__pos__(self)\\nobject.__abs__(self)\\nobject.__invert__(self)\\n\\n   Called to implement the unary arithmetic operations (``-``, ``+``,\\n   ``abs()`` and ``~``).\\n\\nobject.__complex__(self)\\nobject.__int__(self)\\nobject.__float__(self)\\nobject.__round__(self[, n])\\n\\n   Called to implement the built-in functions ``complex()``,\\n   ``int()``, ``float()`` and ``round()``.  Should return a value of\\n   the appropriate type.\\n\\nobject.__index__(self)\\n\\n   Called to implement ``operator.index()``.  Also called whenever\\n   Python needs an integer object (such as in slicing, or in the\\n   built-in ``bin()``, ``hex()`` and ``oct()`` functions). Must return\\n   an integer.\\n\\n\\nWith Statement Context Managers\\n===============================\\n\\nA *context manager* is an object that defines the runtime context to\\nbe established when executing a ``with`` statement. The context\\nmanager handles the entry into, and the exit from, the desired runtime\\ncontext for the execution of the block of code.  Context managers are\\nnormally invoked using the ``with`` statement (described in section\\n*The with statement*), but can also be used by directly invoking their\\nmethods.\\n\\nTypical uses of context managers include saving and restoring various\\nkinds of global state, locking and unlocking resources, closing opened\\nfiles, etc.\\n\\nFor more information on context managers, see *Context Manager Types*.\\n\\nobject.__enter__(self)\\n\\n   Enter the runtime context related to this object. The ``with``\\n   statement will bind this method\\'s return value to the target(s)\\n   specified in the ``as`` clause of the statement, if any.\\n\\nobject.__exit__(self, exc_type, exc_value, traceback)\\n\\n   Exit the runtime context related to this object. The parameters\\n   describe the exception that caused the context to be exited. If the\\n   context was exited without an exception, all three arguments will\\n   be ``None``.\\n\\n   If an exception is supplied, and the method wishes to suppress the\\n   exception (i.e., prevent it from being propagated), it should\\n   return a true value. Otherwise, the exception will be processed\\n   normally upon exit from this method.\\n\\n   Note that ``__exit__()`` methods should not reraise the passed-in\\n   exception; this is the caller\\'s responsibility.\\n\\nSee also:\\n\\n   **PEP 0343** - The \"with\" statement\\n      The specification, background, and examples for the Python\\n      ``with`` statement.\\n\\n\\nSpecial method lookup\\n=====================\\n\\nFor custom classes, implicit invocations of special methods are only\\nguaranteed to work correctly if defined on an object\\'s type, not in\\nthe object\\'s instance dictionary.  That behaviour is the reason why\\nthe following code raises an exception:\\n\\n   >>> class C:\\n   ...     pass\\n   ...\\n   >>> c = C()\\n   >>> c.__len__ = lambda: 5\\n   >>> len(c)\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 1, in <module>\\n   TypeError: object of type \\'C\\' has no len()\\n\\nThe rationale behind this behaviour lies with a number of special\\nmethods such as ``__hash__()`` and ``__repr__()`` that are implemented\\nby all objects, including type objects. If the implicit lookup of\\nthese methods used the conventional lookup process, they would fail\\nwhen invoked on the type object itself:\\n\\n   >>> 1 .__hash__() == hash(1)\\n   True\\n   >>> int.__hash__() == hash(int)\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 1, in <module>\\n   TypeError: descriptor \\'__hash__\\' of \\'int\\' object needs an argument\\n\\nIncorrectly attempting to invoke an unbound method of a class in this\\nway is sometimes referred to as \\'metaclass confusion\\', and is avoided\\nby bypassing the instance when looking up special methods:\\n\\n   >>> type(1).__hash__(1) == hash(1)\\n   True\\n   >>> type(int).__hash__(int) == hash(int)\\n   True\\n\\nIn addition to bypassing any instance attributes in the interest of\\ncorrectness, implicit special method lookup generally also bypasses\\nthe ``__getattribute__()`` method even of the object\\'s metaclass:\\n\\n   >>> class Meta(type):\\n   ...    def __getattribute__(*args):\\n   ...       print(\"Metaclass getattribute invoked\")\\n   ...       return type.__getattribute__(*args)\\n   ...\\n   >>> class C(object, metaclass=Meta):\\n   ...     def __len__(self):\\n   ...         return 10\\n   ...     def __getattribute__(*args):\\n   ...         print(\"Class getattribute invoked\")\\n   ...         return object.__getattribute__(*args)\\n   ...\\n   >>> c = C()\\n   >>> c.__len__()                 # Explicit lookup via instance\\n   Class getattribute invoked\\n   10\\n   >>> type(c).__len__(c)          # Explicit lookup via type\\n   Metaclass getattribute invoked\\n   10\\n   >>> len(c)                      # Implicit lookup\\n   10\\n\\nBypassing the ``__getattribute__()`` machinery in this fashion\\nprovides significant scope for speed optimisations within the\\ninterpreter, at the cost of some flexibility in the handling of\\nspecial methods (the special method *must* be set on the class object\\nitself in order to be consistently invoked by the interpreter).\\n\\n-[ Footnotes ]-\\n\\n[1] It *is* possible in some cases to change an object\\'s type, under\\n    certain controlled conditions. It generally isn\\'t a good idea\\n    though, since it can lead to some very strange behaviour if it is\\n    handled incorrectly.\\n\\n[2] For operands of the same type, it is assumed that if the non-\\n    reflected method (such as ``__add__()``) fails the operation is\\n    not supported, which is why the reflected method is not called.\\n',\n'string-methods':'\\nString Methods\\n**************\\n\\nStrings implement all of the *common* sequence operations, along with\\nthe additional methods described below.\\n\\nStrings also support two styles of string formatting, one providing a\\nlarge degree of flexibility and customization (see ``str.format()``,\\n*Format String Syntax* and *String Formatting*) and the other based on\\nC ``printf`` style formatting that handles a narrower range of types\\nand is slightly harder to use correctly, but is often faster for the\\ncases it can handle (*printf-style String Formatting*).\\n\\nThe *Text Processing Services* section of the standard library covers\\na number of other modules that provide various text related utilities\\n(including regular expression support in the ``re`` module).\\n\\nstr.capitalize()\\n\\n   Return a copy of the string with its first character capitalized\\n   and the rest lowercased.\\n\\nstr.casefold()\\n\\n   Return a casefolded copy of the string. Casefolded strings may be\\n   used for caseless matching.\\n\\n   Casefolding is similar to lowercasing but more aggressive because\\n   it is intended to remove all case distinctions in a string. For\\n   example, the German lowercase letter ``\\'\\xc3\\x9f\\'`` is equivalent to\\n   ``\"ss\"``. Since it is already lowercase, ``lower()`` would do\\n   nothing to ``\\'\\xc3\\x9f\\'``; ``casefold()`` converts it to ``\"ss\"``.\\n\\n   The casefolding algorithm is described in section 3.13 of the\\n   Unicode Standard.\\n\\n   New in version 3.3.\\n\\nstr.center(width[, fillchar])\\n\\n   Return centered in a string of length *width*. Padding is done\\n   using the specified *fillchar* (default is a space).\\n\\nstr.count(sub[, start[, end]])\\n\\n   Return the number of non-overlapping occurrences of substring *sub*\\n   in the range [*start*, *end*].  Optional arguments *start* and\\n   *end* are interpreted as in slice notation.\\n\\nstr.encode(encoding=\"utf-8\", errors=\"strict\")\\n\\n   Return an encoded version of the string as a bytes object. Default\\n   encoding is ``\\'utf-8\\'``. *errors* may be given to set a different\\n   error handling scheme. The default for *errors* is ``\\'strict\\'``,\\n   meaning that encoding errors raise a ``UnicodeError``. Other\\n   possible values are ``\\'ignore\\'``, ``\\'replace\\'``,\\n   ``\\'xmlcharrefreplace\\'``, ``\\'backslashreplace\\'`` and any other name\\n   registered via ``codecs.register_error()``, see section *Codec Base\\n   Classes*. For a list of possible encodings, see section *Standard\\n   Encodings*.\\n\\n   Changed in version 3.1: Support for keyword arguments added.\\n\\nstr.endswith(suffix[, start[, end]])\\n\\n   Return ``True`` if the string ends with the specified *suffix*,\\n   otherwise return ``False``.  *suffix* can also be a tuple of\\n   suffixes to look for.  With optional *start*, test beginning at\\n   that position.  With optional *end*, stop comparing at that\\n   position.\\n\\nstr.expandtabs([tabsize])\\n\\n   Return a copy of the string where all tab characters are replaced\\n   by zero or more spaces, depending on the current column and the\\n   given tab size.  The column number is reset to zero after each\\n   newline occurring in the string. If *tabsize* is not given, a tab\\n   size of ``8`` characters is assumed.  This doesn\\'t understand other\\n   non-printing characters or escape sequences.\\n\\nstr.find(sub[, start[, end]])\\n\\n   Return the lowest index in the string where substring *sub* is\\n   found, such that *sub* is contained in the slice ``s[start:end]``.\\n   Optional arguments *start* and *end* are interpreted as in slice\\n   notation.  Return ``-1`` if *sub* is not found.\\n\\n   Note: The ``find()`` method should be used only if you need to know the\\n     position of *sub*.  To check if *sub* is a substring or not, use\\n     the ``in`` operator:\\n\\n        >>> \\'Py\\' in \\'Python\\'\\n        True\\n\\nstr.format(*args, **kwargs)\\n\\n   Perform a string formatting operation.  The string on which this\\n   method is called can contain literal text or replacement fields\\n   delimited by braces ``{}``.  Each replacement field contains either\\n   the numeric index of a positional argument, or the name of a\\n   keyword argument.  Returns a copy of the string where each\\n   replacement field is replaced with the string value of the\\n   corresponding argument.\\n\\n   >>> \"The sum of 1 + 2 is {0}\".format(1+2)\\n   \\'The sum of 1 + 2 is 3\\'\\n\\n   See *Format String Syntax* for a description of the various\\n   formatting options that can be specified in format strings.\\n\\nstr.format_map(mapping)\\n\\n   Similar to ``str.format(**mapping)``, except that ``mapping`` is\\n   used directly and not copied to a ``dict`` .  This is useful if for\\n   example ``mapping`` is a dict subclass:\\n\\n   >>> class Default(dict):\\n   ...     def __missing__(self, key):\\n   ...         return key\\n   ...\\n   >>> \\'{name} was born in {country}\\'.format_map(Default(name=\\'Guido\\'))\\n   \\'Guido was born in country\\'\\n\\n   New in version 3.2.\\n\\nstr.index(sub[, start[, end]])\\n\\n   Like ``find()``, but raise ``ValueError`` when the substring is not\\n   found.\\n\\nstr.isalnum()\\n\\n   Return true if all characters in the string are alphanumeric and\\n   there is at least one character, false otherwise.  A character\\n   ``c`` is alphanumeric if one of the following returns ``True``:\\n   ``c.isalpha()``, ``c.isdecimal()``, ``c.isdigit()``, or\\n   ``c.isnumeric()``.\\n\\nstr.isalpha()\\n\\n   Return true if all characters in the string are alphabetic and\\n   there is at least one character, false otherwise.  Alphabetic\\n   characters are those characters defined in the Unicode character\\n   database as \"Letter\", i.e., those with general category property\\n   being one of \"Lm\", \"Lt\", \"Lu\", \"Ll\", or \"Lo\".  Note that this is\\n   different from the \"Alphabetic\" property defined in the Unicode\\n   Standard.\\n\\nstr.isdecimal()\\n\\n   Return true if all characters in the string are decimal characters\\n   and there is at least one character, false otherwise. Decimal\\n   characters are those from general category \"Nd\". This category\\n   includes digit characters, and all characters that can be used to\\n   form decimal-radix numbers, e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\\n\\nstr.isdigit()\\n\\n   Return true if all characters in the string are digits and there is\\n   at least one character, false otherwise.  Digits include decimal\\n   characters and digits that need special handling, such as the\\n   compatibility superscript digits.  Formally, a digit is a character\\n   that has the property value Numeric_Type=Digit or\\n   Numeric_Type=Decimal.\\n\\nstr.isidentifier()\\n\\n   Return true if the string is a valid identifier according to the\\n   language definition, section *Identifiers and keywords*.\\n\\nstr.islower()\\n\\n   Return true if all cased characters [4] in the string are lowercase\\n   and there is at least one cased character, false otherwise.\\n\\nstr.isnumeric()\\n\\n   Return true if all characters in the string are numeric characters,\\n   and there is at least one character, false otherwise. Numeric\\n   characters include digit characters, and all characters that have\\n   the Unicode numeric value property, e.g. U+2155, VULGAR FRACTION\\n   ONE FIFTH.  Formally, numeric characters are those with the\\n   property value Numeric_Type=Digit, Numeric_Type=Decimal or\\n   Numeric_Type=Numeric.\\n\\nstr.isprintable()\\n\\n   Return true if all characters in the string are printable or the\\n   string is empty, false otherwise.  Nonprintable characters are\\n   those characters defined in the Unicode character database as\\n   \"Other\" or \"Separator\", excepting the ASCII space (0x20) which is\\n   considered printable.  (Note that printable characters in this\\n   context are those which should not be escaped when ``repr()`` is\\n   invoked on a string.  It has no bearing on the handling of strings\\n   written to ``sys.stdout`` or ``sys.stderr``.)\\n\\nstr.isspace()\\n\\n   Return true if there are only whitespace characters in the string\\n   and there is at least one character, false otherwise.  Whitespace\\n   characters  are those characters defined in the Unicode character\\n   database as \"Other\" or \"Separator\" and those with bidirectional\\n   property being one of \"WS\", \"B\", or \"S\".\\n\\nstr.istitle()\\n\\n   Return true if the string is a titlecased string and there is at\\n   least one character, for example uppercase characters may only\\n   follow uncased characters and lowercase characters only cased ones.\\n   Return false otherwise.\\n\\nstr.isupper()\\n\\n   Return true if all cased characters [4] in the string are uppercase\\n   and there is at least one cased character, false otherwise.\\n\\nstr.join(iterable)\\n\\n   Return a string which is the concatenation of the strings in the\\n   *iterable* *iterable*.  A ``TypeError`` will be raised if there are\\n   any non-string values in *iterable*, including ``bytes`` objects.\\n   The separator between elements is the string providing this method.\\n\\nstr.ljust(width[, fillchar])\\n\\n   Return the string left justified in a string of length *width*.\\n   Padding is done using the specified *fillchar* (default is a\\n   space).  The original string is returned if *width* is less than or\\n   equal to ``len(s)``.\\n\\nstr.lower()\\n\\n   Return a copy of the string with all the cased characters [4]\\n   converted to lowercase.\\n\\n   The lowercasing algorithm used is described in section 3.13 of the\\n   Unicode Standard.\\n\\nstr.lstrip([chars])\\n\\n   Return a copy of the string with leading characters removed.  The\\n   *chars* argument is a string specifying the set of characters to be\\n   removed.  If omitted or ``None``, the *chars* argument defaults to\\n   removing whitespace.  The *chars* argument is not a prefix; rather,\\n   all combinations of its values are stripped:\\n\\n   >>> \\'   spacious   \\'.lstrip()\\n   \\'spacious   \\'\\n   >>> \\'www.example.com\\'.lstrip(\\'cmowz.\\')\\n   \\'example.com\\'\\n\\nstatic str.maketrans(x[, y[, z]])\\n\\n   This static method returns a translation table usable for\\n   ``str.translate()``.\\n\\n   If there is only one argument, it must be a dictionary mapping\\n   Unicode ordinals (integers) or characters (strings of length 1) to\\n   Unicode ordinals, strings (of arbitrary lengths) or None.\\n   Character keys will then be converted to ordinals.\\n\\n   If there are two arguments, they must be strings of equal length,\\n   and in the resulting dictionary, each character in x will be mapped\\n   to the character at the same position in y.  If there is a third\\n   argument, it must be a string, whose characters will be mapped to\\n   None in the result.\\n\\nstr.partition(sep)\\n\\n   Split the string at the first occurrence of *sep*, and return a\\n   3-tuple containing the part before the separator, the separator\\n   itself, and the part after the separator.  If the separator is not\\n   found, return a 3-tuple containing the string itself, followed by\\n   two empty strings.\\n\\nstr.replace(old, new[, count])\\n\\n   Return a copy of the string with all occurrences of substring *old*\\n   replaced by *new*.  If the optional argument *count* is given, only\\n   the first *count* occurrences are replaced.\\n\\nstr.rfind(sub[, start[, end]])\\n\\n   Return the highest index in the string where substring *sub* is\\n   found, such that *sub* is contained within ``s[start:end]``.\\n   Optional arguments *start* and *end* are interpreted as in slice\\n   notation.  Return ``-1`` on failure.\\n\\nstr.rindex(sub[, start[, end]])\\n\\n   Like ``rfind()`` but raises ``ValueError`` when the substring *sub*\\n   is not found.\\n\\nstr.rjust(width[, fillchar])\\n\\n   Return the string right justified in a string of length *width*.\\n   Padding is done using the specified *fillchar* (default is a\\n   space). The original string is returned if *width* is less than or\\n   equal to ``len(s)``.\\n\\nstr.rpartition(sep)\\n\\n   Split the string at the last occurrence of *sep*, and return a\\n   3-tuple containing the part before the separator, the separator\\n   itself, and the part after the separator.  If the separator is not\\n   found, return a 3-tuple containing two empty strings, followed by\\n   the string itself.\\n\\nstr.rsplit(sep=None, maxsplit=-1)\\n\\n   Return a list of the words in the string, using *sep* as the\\n   delimiter string. If *maxsplit* is given, at most *maxsplit* splits\\n   are done, the *rightmost* ones.  If *sep* is not specified or\\n   ``None``, any whitespace string is a separator.  Except for\\n   splitting from the right, ``rsplit()`` behaves like ``split()``\\n   which is described in detail below.\\n\\nstr.rstrip([chars])\\n\\n   Return a copy of the string with trailing characters removed.  The\\n   *chars* argument is a string specifying the set of characters to be\\n   removed.  If omitted or ``None``, the *chars* argument defaults to\\n   removing whitespace.  The *chars* argument is not a suffix; rather,\\n   all combinations of its values are stripped:\\n\\n   >>> \\'   spacious   \\'.rstrip()\\n   \\'   spacious\\'\\n   >>> \\'mississippi\\'.rstrip(\\'ipz\\')\\n   \\'mississ\\'\\n\\nstr.split(sep=None, maxsplit=-1)\\n\\n   Return a list of the words in the string, using *sep* as the\\n   delimiter string.  If *maxsplit* is given, at most *maxsplit*\\n   splits are done (thus, the list will have at most ``maxsplit+1``\\n   elements).  If *maxsplit* is not specified or ``-1``, then there is\\n   no limit on the number of splits (all possible splits are made).\\n\\n   If *sep* is given, consecutive delimiters are not grouped together\\n   and are deemed to delimit empty strings (for example,\\n   ``\\'1,,2\\'.split(\\',\\')`` returns ``[\\'1\\', \\'\\', \\'2\\']``).  The *sep*\\n   argument may consist of multiple characters (for example,\\n   ``\\'1<>2<>3\\'.split(\\'<>\\')`` returns ``[\\'1\\', \\'2\\', \\'3\\']``). Splitting\\n   an empty string with a specified separator returns ``[\\'\\']``.\\n\\n   If *sep* is not specified or is ``None``, a different splitting\\n   algorithm is applied: runs of consecutive whitespace are regarded\\n   as a single separator, and the result will contain no empty strings\\n   at the start or end if the string has leading or trailing\\n   whitespace.  Consequently, splitting an empty string or a string\\n   consisting of just whitespace with a ``None`` separator returns\\n   ``[]``.\\n\\n   For example, ``\\' 1  2   3  \\'.split()`` returns ``[\\'1\\', \\'2\\', \\'3\\']``,\\n   and ``\\'  1  2   3  \\'.split(None, 1)`` returns ``[\\'1\\', \\'2   3  \\']``.\\n\\nstr.splitlines([keepends])\\n\\n   Return a list of the lines in the string, breaking at line\\n   boundaries. This method uses the *universal newlines* approach to\\n   splitting lines. Line breaks are not included in the resulting list\\n   unless *keepends* is given and true.\\n\\n   For example, ``\\'ab c\\\\n\\\\nde fg\\\\rkl\\\\r\\\\n\\'.splitlines()`` returns\\n   ``[\\'ab c\\', \\'\\', \\'de fg\\', \\'kl\\']``, while the same call with\\n   ``splitlines(True)`` returns ``[\\'ab c\\\\n\\', \\'\\\\n\\', \\'de fg\\\\r\\',\\n   \\'kl\\\\r\\\\n\\']``.\\n\\n   Unlike ``split()`` when a delimiter string *sep* is given, this\\n   method returns an empty list for the empty string, and a terminal\\n   line break does not result in an extra line.\\n\\nstr.startswith(prefix[, start[, end]])\\n\\n   Return ``True`` if string starts with the *prefix*, otherwise\\n   return ``False``. *prefix* can also be a tuple of prefixes to look\\n   for.  With optional *start*, test string beginning at that\\n   position.  With optional *end*, stop comparing string at that\\n   position.\\n\\nstr.strip([chars])\\n\\n   Return a copy of the string with the leading and trailing\\n   characters removed. The *chars* argument is a string specifying the\\n   set of characters to be removed. If omitted or ``None``, the\\n   *chars* argument defaults to removing whitespace. The *chars*\\n   argument is not a prefix or suffix; rather, all combinations of its\\n   values are stripped:\\n\\n   >>> \\'   spacious   \\'.strip()\\n   \\'spacious\\'\\n   >>> \\'www.example.com\\'.strip(\\'cmowz.\\')\\n   \\'example\\'\\n\\nstr.swapcase()\\n\\n   Return a copy of the string with uppercase characters converted to\\n   lowercase and vice versa. Note that it is not necessarily true that\\n   ``s.swapcase().swapcase() == s``.\\n\\nstr.title()\\n\\n   Return a titlecased version of the string where words start with an\\n   uppercase character and the remaining characters are lowercase.\\n\\n   The algorithm uses a simple language-independent definition of a\\n   word as groups of consecutive letters.  The definition works in\\n   many contexts but it means that apostrophes in contractions and\\n   possessives form word boundaries, which may not be the desired\\n   result:\\n\\n      >>> \"they\\'re bill\\'s friends from the UK\".title()\\n      \"They\\'Re Bill\\'S Friends From The Uk\"\\n\\n   A workaround for apostrophes can be constructed using regular\\n   expressions:\\n\\n      >>> import re\\n      >>> def titlecase(s):\\n      ...     return re.sub(r\"[A-Za-z]+(\\'[A-Za-z]+)?\",\\n      ...                   lambda mo: mo.group(0)[0].upper() +\\n      ...                              mo.group(0)[1:].lower(),\\n      ...                   s)\\n      ...\\n      >>> titlecase(\"they\\'re bill\\'s friends.\")\\n      \"They\\'re Bill\\'s Friends.\"\\n\\nstr.translate(map)\\n\\n   Return a copy of the *s* where all characters have been mapped\\n   through the *map* which must be a dictionary of Unicode ordinals\\n   (integers) to Unicode ordinals, strings or ``None``.  Unmapped\\n   characters are left untouched. Characters mapped to ``None`` are\\n   deleted.\\n\\n   You can use ``str.maketrans()`` to create a translation map from\\n   character-to-character mappings in different formats.\\n\\n   Note: An even more flexible approach is to create a custom character\\n     mapping codec using the ``codecs`` module (see\\n     ``encodings.cp1251`` for an example).\\n\\nstr.upper()\\n\\n   Return a copy of the string with all the cased characters [4]\\n   converted to uppercase.  Note that ``str.upper().isupper()`` might\\n   be ``False`` if ``s`` contains uncased characters or if the Unicode\\n   category of the resulting character(s) is not \"Lu\" (Letter,\\n   uppercase), but e.g. \"Lt\" (Letter, titlecase).\\n\\n   The uppercasing algorithm used is described in section 3.13 of the\\n   Unicode Standard.\\n\\nstr.zfill(width)\\n\\n   Return the numeric string left filled with zeros in a string of\\n   length *width*.  A sign prefix is handled correctly.  The original\\n   string is returned if *width* is less than or equal to ``len(s)``.\\n',\n'strings':'\\nString and Bytes literals\\n*************************\\n\\nString literals are described by the following lexical definitions:\\n\\n   stringliteral   ::= [stringprefix](shortstring | longstring)\\n   stringprefix    ::= \"r\" | \"u\" | \"R\" | \"U\"\\n   shortstring     ::= \"\\'\" shortstringitem* \"\\'\" | \\'\"\\' shortstringitem* \\'\"\\'\\n   longstring      ::= \"\\'\\'\\'\" longstringitem* \"\\'\\'\\'\" | \\'\"\"\"\\' longstringitem* \\'\"\"\"\\'\\n   shortstringitem ::= shortstringchar | stringescapeseq\\n   longstringitem  ::= longstringchar | stringescapeseq\\n   shortstringchar ::= <any source character except \"\\\\\" or newline or the quote>\\n   longstringchar  ::= <any source character except \"\\\\\">\\n   stringescapeseq ::= \"\\\\\" <any source character>\\n\\n   bytesliteral   ::= bytesprefix(shortbytes | longbytes)\\n   bytesprefix    ::= \"b\" | \"B\" | \"br\" | \"Br\" | \"bR\" | \"BR\" | \"rb\" | \"rB\" | \"Rb\" | \"RB\"\\n   shortbytes     ::= \"\\'\" shortbytesitem* \"\\'\" | \\'\"\\' shortbytesitem* \\'\"\\'\\n   longbytes      ::= \"\\'\\'\\'\" longbytesitem* \"\\'\\'\\'\" | \\'\"\"\"\\' longbytesitem* \\'\"\"\"\\'\\n   shortbytesitem ::= shortbyteschar | bytesescapeseq\\n   longbytesitem  ::= longbyteschar | bytesescapeseq\\n   shortbyteschar ::= <any ASCII character except \"\\\\\" or newline or the quote>\\n   longbyteschar  ::= <any ASCII character except \"\\\\\">\\n   bytesescapeseq ::= \"\\\\\" <any ASCII character>\\n\\nOne syntactic restriction not indicated by these productions is that\\nwhitespace is not allowed between the ``stringprefix`` or\\n``bytesprefix`` and the rest of the literal. The source character set\\nis defined by the encoding declaration; it is UTF-8 if no encoding\\ndeclaration is given in the source file; see section *Encoding\\ndeclarations*.\\n\\nIn plain English: Both types of literals can be enclosed in matching\\nsingle quotes (``\\'``) or double quotes (``\"``).  They can also be\\nenclosed in matching groups of three single or double quotes (these\\nare generally referred to as *triple-quoted strings*).  The backslash\\n(``\\\\``) character is used to escape characters that otherwise have a\\nspecial meaning, such as newline, backslash itself, or the quote\\ncharacter.\\n\\nBytes literals are always prefixed with ``\\'b\\'`` or ``\\'B\\'``; they\\nproduce an instance of the ``bytes`` type instead of the ``str`` type.\\nThey may only contain ASCII characters; bytes with a numeric value of\\n128 or greater must be expressed with escapes.\\n\\nAs of Python 3.3 it is possible again to prefix unicode strings with a\\n``u`` prefix to simplify maintenance of dual 2.x and 3.x codebases.\\n\\nBoth string and bytes literals may optionally be prefixed with a\\nletter ``\\'r\\'`` or ``\\'R\\'``; such strings are called *raw strings* and\\ntreat backslashes as literal characters.  As a result, in string\\nliterals, ``\\'\\\\U\\'`` and ``\\'\\\\u\\'`` escapes in raw strings are not treated\\nspecially. Given that Python 2.x\\'s raw unicode literals behave\\ndifferently than Python 3.x\\'s the ``\\'ur\\'`` syntax is not supported.\\n\\n   New in version 3.3: The ``\\'rb\\'`` prefix of raw bytes literals has\\n   been added as a synonym of ``\\'br\\'``.\\n\\n   New in version 3.3: Support for the unicode legacy literal\\n   (``u\\'value\\'``) was reintroduced to simplify the maintenance of dual\\n   Python 2.x and 3.x codebases. See **PEP 414** for more information.\\n\\nIn triple-quoted strings, unescaped newlines and quotes are allowed\\n(and are retained), except that three unescaped quotes in a row\\nterminate the string.  (A \"quote\" is the character used to open the\\nstring, i.e. either ``\\'`` or ``\"``.)\\n\\nUnless an ``\\'r\\'`` or ``\\'R\\'`` prefix is present, escape sequences in\\nstrings are interpreted according to rules similar to those used by\\nStandard C.  The recognized escape sequences are:\\n\\n+-------------------+-----------------------------------+---------+\\n| Escape Sequence   | Meaning                           | Notes   |\\n+===================+===================================+=========+\\n| ``\\\\newline``      | Backslash and newline ignored     |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\\\\\``            | Backslash (``\\\\``)                 |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\\\'``            | Single quote (``\\'``)              |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\\"``            | Double quote (``\"``)              |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\a``            | ASCII Bell (BEL)                  |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\b``            | ASCII Backspace (BS)              |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\f``            | ASCII Formfeed (FF)               |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\n``            | ASCII Linefeed (LF)               |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\r``            | ASCII Carriage Return (CR)        |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\t``            | ASCII Horizontal Tab (TAB)        |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\v``            | ASCII Vertical Tab (VT)           |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\ooo``          | Character with octal value *ooo*  | (1,3)   |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\xhh``          | Character with hex value *hh*     | (2,3)   |\\n+-------------------+-----------------------------------+---------+\\n\\nEscape sequences only recognized in string literals are:\\n\\n+-------------------+-----------------------------------+---------+\\n| Escape Sequence   | Meaning                           | Notes   |\\n+===================+===================================+=========+\\n| ``\\\\N{name}``      | Character named *name* in the     | (4)     |\\n|                   | Unicode database                  |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\uxxxx``        | Character with 16-bit hex value   | (5)     |\\n|                   | *xxxx*                            |         |\\n+-------------------+-----------------------------------+---------+\\n| ``\\\\Uxxxxxxxx``    | Character with 32-bit hex value   | (6)     |\\n|                   | *xxxxxxxx*                        |         |\\n+-------------------+-----------------------------------+---------+\\n\\nNotes:\\n\\n1. As in Standard C, up to three octal digits are accepted.\\n\\n2. Unlike in Standard C, exactly two hex digits are required.\\n\\n3. In a bytes literal, hexadecimal and octal escapes denote the byte\\n   with the given value. In a string literal, these escapes denote a\\n   Unicode character with the given value.\\n\\n4. Changed in version 3.3: Support for name aliases [1] has been\\n   added.\\n\\n5. Individual code units which form parts of a surrogate pair can be\\n   encoded using this escape sequence.  Exactly four hex digits are\\n   required.\\n\\n6. Any Unicode character can be encoded this way.  Exactly eight hex\\n   digits are required.\\n\\nUnlike Standard C, all unrecognized escape sequences are left in the\\nstring unchanged, i.e., *the backslash is left in the string*.  (This\\nbehavior is useful when debugging: if an escape sequence is mistyped,\\nthe resulting output is more easily recognized as broken.)  It is also\\nimportant to note that the escape sequences only recognized in string\\nliterals fall into the category of unrecognized escapes for bytes\\nliterals.\\n\\nEven in a raw string, string quotes can be escaped with a backslash,\\nbut the backslash remains in the string; for example, ``r\"\\\\\"\"`` is a\\nvalid string literal consisting of two characters: a backslash and a\\ndouble quote; ``r\"\\\\\"`` is not a valid string literal (even a raw\\nstring cannot end in an odd number of backslashes).  Specifically, *a\\nraw string cannot end in a single backslash* (since the backslash\\nwould escape the following quote character).  Note also that a single\\nbackslash followed by a newline is interpreted as those two characters\\nas part of the string, *not* as a line continuation.\\n',\n'subscriptions':'\\nSubscriptions\\n*************\\n\\nA subscription selects an item of a sequence (string, tuple or list)\\nor mapping (dictionary) object:\\n\\n   subscription ::= primary \"[\" expression_list \"]\"\\n\\nThe primary must evaluate to an object that supports subscription,\\ne.g. a list or dictionary.  User-defined objects can support\\nsubscription by defining a ``__getitem__()`` method.\\n\\nFor built-in objects, there are two types of objects that support\\nsubscription:\\n\\nIf the primary is a mapping, the expression list must evaluate to an\\nobject whose value is one of the keys of the mapping, and the\\nsubscription selects the value in the mapping that corresponds to that\\nkey.  (The expression list is a tuple except if it has exactly one\\nitem.)\\n\\nIf the primary is a sequence, the expression (list) must evaluate to\\nan integer or a slice (as discussed in the following section).\\n\\nThe formal syntax makes no special provision for negative indices in\\nsequences; however, built-in sequences all provide a ``__getitem__()``\\nmethod that interprets negative indices by adding the length of the\\nsequence to the index (so that ``x[-1]`` selects the last item of\\n``x``).  The resulting value must be a nonnegative integer less than\\nthe number of items in the sequence, and the subscription selects the\\nitem whose index is that value (counting from zero). Since the support\\nfor negative indices and slicing occurs in the object\\'s\\n``__getitem__()`` method, subclasses overriding this method will need\\nto explicitly add that support.\\n\\nA string\\'s items are characters.  A character is not a separate data\\ntype but a string of exactly one character.\\n',\n'truth':\"\\nTruth Value Testing\\n*******************\\n\\nAny object can be tested for truth value, for use in an ``if`` or\\n``while`` condition or as operand of the Boolean operations below. The\\nfollowing values are considered false:\\n\\n* ``None``\\n\\n* ``False``\\n\\n* zero of any numeric type, for example, ``0``, ``0.0``, ``0j``.\\n\\n* any empty sequence, for example, ``''``, ``()``, ``[]``.\\n\\n* any empty mapping, for example, ``{}``.\\n\\n* instances of user-defined classes, if the class defines a\\n  ``__bool__()`` or ``__len__()`` method, when that method returns the\\n  integer zero or ``bool`` value ``False``. [1]\\n\\nAll other values are considered true --- so objects of many types are\\nalways true.\\n\\nOperations and built-in functions that have a Boolean result always\\nreturn ``0`` or ``False`` for false and ``1`` or ``True`` for true,\\nunless otherwise stated. (Important exception: the Boolean operations\\n``or`` and ``and`` always return one of their operands.)\\n\",\n'try':'\\nThe ``try`` statement\\n*********************\\n\\nThe ``try`` statement specifies exception handlers and/or cleanup code\\nfor a group of statements:\\n\\n   try_stmt  ::= try1_stmt | try2_stmt\\n   try1_stmt ::= \"try\" \":\" suite\\n                 (\"except\" [expression [\"as\" target]] \":\" suite)+\\n                 [\"else\" \":\" suite]\\n                 [\"finally\" \":\" suite]\\n   try2_stmt ::= \"try\" \":\" suite\\n                 \"finally\" \":\" suite\\n\\nThe ``except`` clause(s) specify one or more exception handlers. When\\nno exception occurs in the ``try`` clause, no exception handler is\\nexecuted. When an exception occurs in the ``try`` suite, a search for\\nan exception handler is started.  This search inspects the except\\nclauses in turn until one is found that matches the exception.  An\\nexpression-less except clause, if present, must be last; it matches\\nany exception.  For an except clause with an expression, that\\nexpression is evaluated, and the clause matches the exception if the\\nresulting object is \"compatible\" with the exception.  An object is\\ncompatible with an exception if it is the class or a base class of the\\nexception object or a tuple containing an item compatible with the\\nexception.\\n\\nIf no except clause matches the exception, the search for an exception\\nhandler continues in the surrounding code and on the invocation stack.\\n[1]\\n\\nIf the evaluation of an expression in the header of an except clause\\nraises an exception, the original search for a handler is canceled and\\na search starts for the new exception in the surrounding code and on\\nthe call stack (it is treated as if the entire ``try`` statement\\nraised the exception).\\n\\nWhen a matching except clause is found, the exception is assigned to\\nthe target specified after the ``as`` keyword in that except clause,\\nif present, and the except clause\\'s suite is executed.  All except\\nclauses must have an executable block.  When the end of this block is\\nreached, execution continues normally after the entire try statement.\\n(This means that if two nested handlers exist for the same exception,\\nand the exception occurs in the try clause of the inner handler, the\\nouter handler will not handle the exception.)\\n\\nWhen an exception has been assigned using ``as target``, it is cleared\\nat the end of the except clause.  This is as if\\n\\n   except E as N:\\n       foo\\n\\nwas translated to\\n\\n   except E as N:\\n       try:\\n           foo\\n       finally:\\n           del N\\n\\nThis means the exception must be assigned to a different name to be\\nable to refer to it after the except clause.  Exceptions are cleared\\nbecause with the traceback attached to them, they form a reference\\ncycle with the stack frame, keeping all locals in that frame alive\\nuntil the next garbage collection occurs.\\n\\nBefore an except clause\\'s suite is executed, details about the\\nexception are stored in the ``sys`` module and can be access via\\n``sys.exc_info()``. ``sys.exc_info()`` returns a 3-tuple consisting of\\nthe exception class, the exception instance and a traceback object\\n(see section *The standard type hierarchy*) identifying the point in\\nthe program where the exception occurred.  ``sys.exc_info()`` values\\nare restored to their previous values (before the call) when returning\\nfrom a function that handled an exception.\\n\\nThe optional ``else`` clause is executed if and when control flows off\\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\\nare not handled by the preceding ``except`` clauses.\\n\\nIf ``finally`` is present, it specifies a \\'cleanup\\' handler.  The\\n``try`` clause is executed, including any ``except`` and ``else``\\nclauses.  If an exception occurs in any of the clauses and is not\\nhandled, the exception is temporarily saved. The ``finally`` clause is\\nexecuted.  If there is a saved exception it is re-raised at the end of\\nthe ``finally`` clause.  If the ``finally`` clause raises another\\nexception, the saved exception is set as the context of the new\\nexception. If the ``finally`` clause executes a ``return`` or\\n``break`` statement, the saved exception is discarded:\\n\\n   def f():\\n       try:\\n           1/0\\n       finally:\\n           return 42\\n\\n   >>> f()\\n   42\\n\\nThe exception information is not available to the program during\\nexecution of the ``finally`` clause.\\n\\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\\nthe ``try`` suite of a ``try``...``finally`` statement, the\\n``finally`` clause is also executed \\'on the way out.\\' A ``continue``\\nstatement is illegal in the ``finally`` clause. (The reason is a\\nproblem with the current implementation --- this restriction may be\\nlifted in the future).\\n\\nAdditional information on exceptions can be found in section\\n*Exceptions*, and information on using the ``raise`` statement to\\ngenerate exceptions may be found in section *The raise statement*.\\n',\n'types':'\\nThe standard type hierarchy\\n***************************\\n\\nBelow is a list of the types that are built into Python.  Extension\\nmodules (written in C, Java, or other languages, depending on the\\nimplementation) can define additional types.  Future versions of\\nPython may add types to the type hierarchy (e.g., rational numbers,\\nefficiently stored arrays of integers, etc.), although such additions\\nwill often be provided via the standard library instead.\\n\\nSome of the type descriptions below contain a paragraph listing\\n\\'special attributes.\\'  These are attributes that provide access to the\\nimplementation and are not intended for general use.  Their definition\\nmay change in the future.\\n\\nNone\\n   This type has a single value.  There is a single object with this\\n   value. This object is accessed through the built-in name ``None``.\\n   It is used to signify the absence of a value in many situations,\\n   e.g., it is returned from functions that don\\'t explicitly return\\n   anything. Its truth value is false.\\n\\nNotImplemented\\n   This type has a single value.  There is a single object with this\\n   value. This object is accessed through the built-in name\\n   ``NotImplemented``. Numeric methods and rich comparison methods may\\n   return this value if they do not implement the operation for the\\n   operands provided.  (The interpreter will then try the reflected\\n   operation, or some other fallback, depending on the operator.)  Its\\n   truth value is true.\\n\\nEllipsis\\n   This type has a single value.  There is a single object with this\\n   value. This object is accessed through the literal ``...`` or the\\n   built-in name ``Ellipsis``.  Its truth value is true.\\n\\n``numbers.Number``\\n   These are created by numeric literals and returned as results by\\n   arithmetic operators and arithmetic built-in functions.  Numeric\\n   objects are immutable; once created their value never changes.\\n   Python numbers are of course strongly related to mathematical\\n   numbers, but subject to the limitations of numerical representation\\n   in computers.\\n\\n   Python distinguishes between integers, floating point numbers, and\\n   complex numbers:\\n\\n   ``numbers.Integral``\\n      These represent elements from the mathematical set of integers\\n      (positive and negative).\\n\\n      There are two types of integers:\\n\\n      Integers (``int``)\\n\\n         These represent numbers in an unlimited range, subject to\\n         available (virtual) memory only.  For the purpose of shift\\n         and mask operations, a binary representation is assumed, and\\n         negative numbers are represented in a variant of 2\\'s\\n         complement which gives the illusion of an infinite string of\\n         sign bits extending to the left.\\n\\n      Booleans (``bool``)\\n         These represent the truth values False and True.  The two\\n         objects representing the values False and True are the only\\n         Boolean objects. The Boolean type is a subtype of the integer\\n         type, and Boolean values behave like the values 0 and 1,\\n         respectively, in almost all contexts, the exception being\\n         that when converted to a string, the strings ``\"False\"`` or\\n         ``\"True\"`` are returned, respectively.\\n\\n      The rules for integer representation are intended to give the\\n      most meaningful interpretation of shift and mask operations\\n      involving negative integers.\\n\\n   ``numbers.Real`` (``float``)\\n      These represent machine-level double precision floating point\\n      numbers. You are at the mercy of the underlying machine\\n      architecture (and C or Java implementation) for the accepted\\n      range and handling of overflow. Python does not support single-\\n      precision floating point numbers; the savings in processor and\\n      memory usage that are usually the reason for using these is\\n      dwarfed by the overhead of using objects in Python, so there is\\n      no reason to complicate the language with two kinds of floating\\n      point numbers.\\n\\n   ``numbers.Complex`` (``complex``)\\n      These represent complex numbers as a pair of machine-level\\n      double precision floating point numbers.  The same caveats apply\\n      as for floating point numbers. The real and imaginary parts of a\\n      complex number ``z`` can be retrieved through the read-only\\n      attributes ``z.real`` and ``z.imag``.\\n\\nSequences\\n   These represent finite ordered sets indexed by non-negative\\n   numbers. The built-in function ``len()`` returns the number of\\n   items of a sequence. When the length of a sequence is *n*, the\\n   index set contains the numbers 0, 1, ..., *n*-1.  Item *i* of\\n   sequence *a* is selected by ``a[i]``.\\n\\n   Sequences also support slicing: ``a[i:j]`` selects all items with\\n   index *k* such that *i* ``<=`` *k* ``<`` *j*.  When used as an\\n   expression, a slice is a sequence of the same type.  This implies\\n   that the index set is renumbered so that it starts at 0.\\n\\n   Some sequences also support \"extended slicing\" with a third \"step\"\\n   parameter: ``a[i:j:k]`` selects all items of *a* with index *x*\\n   where ``x = i + n*k``, *n* ``>=`` ``0`` and *i* ``<=`` *x* ``<``\\n   *j*.\\n\\n   Sequences are distinguished according to their mutability:\\n\\n   Immutable sequences\\n      An object of an immutable sequence type cannot change once it is\\n      created.  (If the object contains references to other objects,\\n      these other objects may be mutable and may be changed; however,\\n      the collection of objects directly referenced by an immutable\\n      object cannot change.)\\n\\n      The following types are immutable sequences:\\n\\n      Strings\\n         A string is a sequence of values that represent Unicode\\n         codepoints. All the codepoints in range ``U+0000 - U+10FFFF``\\n         can be represented in a string.  Python doesn\\'t have a\\n         ``chr`` type, and every character in the string is\\n         represented as a string object with length ``1``.  The built-\\n         in function ``ord()`` converts a character to its codepoint\\n         (as an integer); ``chr()`` converts an integer in range ``0 -\\n         10FFFF`` to the corresponding character. ``str.encode()`` can\\n         be used to convert a ``str`` to ``bytes`` using the given\\n         encoding, and ``bytes.decode()`` can be used to achieve the\\n         opposite.\\n\\n      Tuples\\n         The items of a tuple are arbitrary Python objects. Tuples of\\n         two or more items are formed by comma-separated lists of\\n         expressions.  A tuple of one item (a \\'singleton\\') can be\\n         formed by affixing a comma to an expression (an expression by\\n         itself does not create a tuple, since parentheses must be\\n         usable for grouping of expressions).  An empty tuple can be\\n         formed by an empty pair of parentheses.\\n\\n      Bytes\\n         A bytes object is an immutable array.  The items are 8-bit\\n         bytes, represented by integers in the range 0 <= x < 256.\\n         Bytes literals (like ``b\\'abc\\'``) and the built-in function\\n         ``bytes()`` can be used to construct bytes objects.  Also,\\n         bytes objects can be decoded to strings via the ``decode()``\\n         method.\\n\\n   Mutable sequences\\n      Mutable sequences can be changed after they are created.  The\\n      subscription and slicing notations can be used as the target of\\n      assignment and ``del`` (delete) statements.\\n\\n      There are currently two intrinsic mutable sequence types:\\n\\n      Lists\\n         The items of a list are arbitrary Python objects.  Lists are\\n         formed by placing a comma-separated list of expressions in\\n         square brackets. (Note that there are no special cases needed\\n         to form lists of length 0 or 1.)\\n\\n      Byte Arrays\\n         A bytearray object is a mutable array. They are created by\\n         the built-in ``bytearray()`` constructor.  Aside from being\\n         mutable (and hence unhashable), byte arrays otherwise provide\\n         the same interface and functionality as immutable bytes\\n         objects.\\n\\n      The extension module ``array`` provides an additional example of\\n      a mutable sequence type, as does the ``collections`` module.\\n\\nSet types\\n   These represent unordered, finite sets of unique, immutable\\n   objects. As such, they cannot be indexed by any subscript. However,\\n   they can be iterated over, and the built-in function ``len()``\\n   returns the number of items in a set. Common uses for sets are fast\\n   membership testing, removing duplicates from a sequence, and\\n   computing mathematical operations such as intersection, union,\\n   difference, and symmetric difference.\\n\\n   For set elements, the same immutability rules apply as for\\n   dictionary keys. Note that numeric types obey the normal rules for\\n   numeric comparison: if two numbers compare equal (e.g., ``1`` and\\n   ``1.0``), only one of them can be contained in a set.\\n\\n   There are currently two intrinsic set types:\\n\\n   Sets\\n      These represent a mutable set. They are created by the built-in\\n      ``set()`` constructor and can be modified afterwards by several\\n      methods, such as ``add()``.\\n\\n   Frozen sets\\n      These represent an immutable set.  They are created by the\\n      built-in ``frozenset()`` constructor.  As a frozenset is\\n      immutable and *hashable*, it can be used again as an element of\\n      another set, or as a dictionary key.\\n\\nMappings\\n   These represent finite sets of objects indexed by arbitrary index\\n   sets. The subscript notation ``a[k]`` selects the item indexed by\\n   ``k`` from the mapping ``a``; this can be used in expressions and\\n   as the target of assignments or ``del`` statements. The built-in\\n   function ``len()`` returns the number of items in a mapping.\\n\\n   There is currently a single intrinsic mapping type:\\n\\n   Dictionaries\\n      These represent finite sets of objects indexed by nearly\\n      arbitrary values.  The only types of values not acceptable as\\n      keys are values containing lists or dictionaries or other\\n      mutable types that are compared by value rather than by object\\n      identity, the reason being that the efficient implementation of\\n      dictionaries requires a key\\'s hash value to remain constant.\\n      Numeric types used for keys obey the normal rules for numeric\\n      comparison: if two numbers compare equal (e.g., ``1`` and\\n      ``1.0``) then they can be used interchangeably to index the same\\n      dictionary entry.\\n\\n      Dictionaries are mutable; they can be created by the ``{...}``\\n      notation (see section *Dictionary displays*).\\n\\n      The extension modules ``dbm.ndbm`` and ``dbm.gnu`` provide\\n      additional examples of mapping types, as does the\\n      ``collections`` module.\\n\\nCallable types\\n   These are the types to which the function call operation (see\\n   section *Calls*) can be applied:\\n\\n   User-defined functions\\n      A user-defined function object is created by a function\\n      definition (see section *Function definitions*).  It should be\\n      called with an argument list containing the same number of items\\n      as the function\\'s formal parameter list.\\n\\n      Special attributes:\\n\\n      +---------------------------+---------------------------------+-------------+\\n      | Attribute                 | Meaning                         |             |\\n      +===========================+=================================+=============+\\n      | ``__doc__``               | The function\\'s documentation    | Writable    |\\n      |                           | string, or ``None`` if          |             |\\n      |                           | unavailable                     |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__name__``              | The function\\'s name             | Writable    |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__qualname__``          | The function\\'s *qualified name* | Writable    |\\n      |                           | New in version 3.3.             |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__module__``            | The name of the module the      | Writable    |\\n      |                           | function was defined in, or     |             |\\n      |                           | ``None`` if unavailable.        |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__defaults__``          | A tuple containing default      | Writable    |\\n      |                           | argument values for those       |             |\\n      |                           | arguments that have defaults,   |             |\\n      |                           | or ``None`` if no arguments     |             |\\n      |                           | have a default value            |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__code__``              | The code object representing    | Writable    |\\n      |                           | the compiled function body.     |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__globals__``           | A reference to the dictionary   | Read-only   |\\n      |                           | that holds the function\\'s       |             |\\n      |                           | global variables --- the global |             |\\n      |                           | namespace of the module in      |             |\\n      |                           | which the function was defined. |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__dict__``              | The namespace supporting        | Writable    |\\n      |                           | arbitrary function attributes.  |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__closure__``           | ``None`` or a tuple of cells    | Read-only   |\\n      |                           | that contain bindings for the   |             |\\n      |                           | function\\'s free variables.      |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__annotations__``       | A dict containing annotations   | Writable    |\\n      |                           | of parameters.  The keys of the |             |\\n      |                           | dict are the parameter names,   |             |\\n      |                           | or ``\\'return\\'`` for the return  |             |\\n      |                           | annotation, if provided.        |             |\\n      +---------------------------+---------------------------------+-------------+\\n      | ``__kwdefaults__``        | A dict containing defaults for  | Writable    |\\n      |                           | keyword-only parameters.        |             |\\n      +---------------------------+---------------------------------+-------------+\\n\\n      Most of the attributes labelled \"Writable\" check the type of the\\n      assigned value.\\n\\n      Function objects also support getting and setting arbitrary\\n      attributes, which can be used, for example, to attach metadata\\n      to functions.  Regular attribute dot-notation is used to get and\\n      set such attributes. *Note that the current implementation only\\n      supports function attributes on user-defined functions. Function\\n      attributes on built-in functions may be supported in the\\n      future.*\\n\\n      Additional information about a function\\'s definition can be\\n      retrieved from its code object; see the description of internal\\n      types below.\\n\\n   Instance methods\\n      An instance method object combines a class, a class instance and\\n      any callable object (normally a user-defined function).\\n\\n      Special read-only attributes: ``__self__`` is the class instance\\n      object, ``__func__`` is the function object; ``__doc__`` is the\\n      method\\'s documentation (same as ``__func__.__doc__``);\\n      ``__name__`` is the method name (same as ``__func__.__name__``);\\n      ``__module__`` is the name of the module the method was defined\\n      in, or ``None`` if unavailable.\\n\\n      Methods also support accessing (but not setting) the arbitrary\\n      function attributes on the underlying function object.\\n\\n      User-defined method objects may be created when getting an\\n      attribute of a class (perhaps via an instance of that class), if\\n      that attribute is a user-defined function object or a class\\n      method object.\\n\\n      When an instance method object is created by retrieving a user-\\n      defined function object from a class via one of its instances,\\n      its ``__self__`` attribute is the instance, and the method\\n      object is said to be bound.  The new method\\'s ``__func__``\\n      attribute is the original function object.\\n\\n      When a user-defined method object is created by retrieving\\n      another method object from a class or instance, the behaviour is\\n      the same as for a function object, except that the ``__func__``\\n      attribute of the new instance is not the original method object\\n      but its ``__func__`` attribute.\\n\\n      When an instance method object is created by retrieving a class\\n      method object from a class or instance, its ``__self__``\\n      attribute is the class itself, and its ``__func__`` attribute is\\n      the function object underlying the class method.\\n\\n      When an instance method object is called, the underlying\\n      function (``__func__``) is called, inserting the class instance\\n      (``__self__``) in front of the argument list.  For instance,\\n      when ``C`` is a class which contains a definition for a function\\n      ``f()``, and ``x`` is an instance of ``C``, calling ``x.f(1)``\\n      is equivalent to calling ``C.f(x, 1)``.\\n\\n      When an instance method object is derived from a class method\\n      object, the \"class instance\" stored in ``__self__`` will\\n      actually be the class itself, so that calling either ``x.f(1)``\\n      or ``C.f(1)`` is equivalent to calling ``f(C,1)`` where ``f`` is\\n      the underlying function.\\n\\n      Note that the transformation from function object to instance\\n      method object happens each time the attribute is retrieved from\\n      the instance.  In some cases, a fruitful optimization is to\\n      assign the attribute to a local variable and call that local\\n      variable. Also notice that this transformation only happens for\\n      user-defined functions; other callable objects (and all non-\\n      callable objects) are retrieved without transformation.  It is\\n      also important to note that user-defined functions which are\\n      attributes of a class instance are not converted to bound\\n      methods; this *only* happens when the function is an attribute\\n      of the class.\\n\\n   Generator functions\\n      A function or method which uses the ``yield`` statement (see\\n      section *The yield statement*) is called a *generator function*.\\n      Such a function, when called, always returns an iterator object\\n      which can be used to execute the body of the function:  calling\\n      the iterator\\'s ``iterator__next__()`` method will cause the\\n      function to execute until it provides a value using the\\n      ``yield`` statement.  When the function executes a ``return``\\n      statement or falls off the end, a ``StopIteration`` exception is\\n      raised and the iterator will have reached the end of the set of\\n      values to be returned.\\n\\n   Built-in functions\\n      A built-in function object is a wrapper around a C function.\\n      Examples of built-in functions are ``len()`` and ``math.sin()``\\n      (``math`` is a standard built-in module). The number and type of\\n      the arguments are determined by the C function. Special read-\\n      only attributes: ``__doc__`` is the function\\'s documentation\\n      string, or ``None`` if unavailable; ``__name__`` is the\\n      function\\'s name; ``__self__`` is set to ``None`` (but see the\\n      next item); ``__module__`` is the name of the module the\\n      function was defined in or ``None`` if unavailable.\\n\\n   Built-in methods\\n      This is really a different disguise of a built-in function, this\\n      time containing an object passed to the C function as an\\n      implicit extra argument.  An example of a built-in method is\\n      ``alist.append()``, assuming *alist* is a list object. In this\\n      case, the special read-only attribute ``__self__`` is set to the\\n      object denoted by *alist*.\\n\\n   Classes\\n      Classes are callable.  These objects normally act as factories\\n      for new instances of themselves, but variations are possible for\\n      class types that override ``__new__()``.  The arguments of the\\n      call are passed to ``__new__()`` and, in the typical case, to\\n      ``__init__()`` to initialize the new instance.\\n\\n   Class Instances\\n      Instances of arbitrary classes can be made callable by defining\\n      a ``__call__()`` method in their class.\\n\\nModules\\n   Modules are a basic organizational unit of Python code, and are\\n   created by the *import system* as invoked either by the ``import``\\n   statement (see ``import``), or by calling functions such as\\n   ``importlib.import_module()`` and built-in ``__import__()``.  A\\n   module object has a namespace implemented by a dictionary object\\n   (this is the dictionary referenced by the ``__globals__`` attribute\\n   of functions defined in the module).  Attribute references are\\n   translated to lookups in this dictionary, e.g., ``m.x`` is\\n   equivalent to ``m.__dict__[\"x\"]``. A module object does not contain\\n   the code object used to initialize the module (since it isn\\'t\\n   needed once the initialization is done).\\n\\n   Attribute assignment updates the module\\'s namespace dictionary,\\n   e.g., ``m.x = 1`` is equivalent to ``m.__dict__[\"x\"] = 1``.\\n\\n   Special read-only attribute: ``__dict__`` is the module\\'s namespace\\n   as a dictionary object.\\n\\n   **CPython implementation detail:** Because of the way CPython\\n   clears module dictionaries, the module dictionary will be cleared\\n   when the module falls out of scope even if the dictionary still has\\n   live references.  To avoid this, copy the dictionary or keep the\\n   module around while using its dictionary directly.\\n\\n   Predefined (writable) attributes: ``__name__`` is the module\\'s\\n   name; ``__doc__`` is the module\\'s documentation string, or ``None``\\n   if unavailable; ``__file__`` is the pathname of the file from which\\n   the module was loaded, if it was loaded from a file. The\\n   ``__file__`` attribute may be missing for certain types of modules,\\n   such as C modules that are statically linked into the interpreter;\\n   for extension modules loaded dynamically from a shared library, it\\n   is the pathname of the shared library file.\\n\\nCustom classes\\n   Custom class types are typically created by class definitions (see\\n   section *Class definitions*).  A class has a namespace implemented\\n   by a dictionary object. Class attribute references are translated\\n   to lookups in this dictionary, e.g., ``C.x`` is translated to\\n   ``C.__dict__[\"x\"]`` (although there are a number of hooks which\\n   allow for other means of locating attributes). When the attribute\\n   name is not found there, the attribute search continues in the base\\n   classes. This search of the base classes uses the C3 method\\n   resolution order which behaves correctly even in the presence of\\n   \\'diamond\\' inheritance structures where there are multiple\\n   inheritance paths leading back to a common ancestor. Additional\\n   details on the C3 MRO used by Python can be found in the\\n   documentation accompanying the 2.3 release at\\n   http://www.python.org/download/releases/2.3/mro/.\\n\\n   When a class attribute reference (for class ``C``, say) would yield\\n   a class method object, it is transformed into an instance method\\n   object whose ``__self__`` attributes is ``C``.  When it would yield\\n   a static method object, it is transformed into the object wrapped\\n   by the static method object. See section *Implementing Descriptors*\\n   for another way in which attributes retrieved from a class may\\n   differ from those actually contained in its ``__dict__``.\\n\\n   Class attribute assignments update the class\\'s dictionary, never\\n   the dictionary of a base class.\\n\\n   A class object can be called (see above) to yield a class instance\\n   (see below).\\n\\n   Special attributes: ``__name__`` is the class name; ``__module__``\\n   is the module name in which the class was defined; ``__dict__`` is\\n   the dictionary containing the class\\'s namespace; ``__bases__`` is a\\n   tuple (possibly empty or a singleton) containing the base classes,\\n   in the order of their occurrence in the base class list;\\n   ``__doc__`` is the class\\'s documentation string, or None if\\n   undefined.\\n\\nClass instances\\n   A class instance is created by calling a class object (see above).\\n   A class instance has a namespace implemented as a dictionary which\\n   is the first place in which attribute references are searched.\\n   When an attribute is not found there, and the instance\\'s class has\\n   an attribute by that name, the search continues with the class\\n   attributes.  If a class attribute is found that is a user-defined\\n   function object, it is transformed into an instance method object\\n   whose ``__self__`` attribute is the instance.  Static method and\\n   class method objects are also transformed; see above under\\n   \"Classes\".  See section *Implementing Descriptors* for another way\\n   in which attributes of a class retrieved via its instances may\\n   differ from the objects actually stored in the class\\'s\\n   ``__dict__``.  If no class attribute is found, and the object\\'s\\n   class has a ``__getattr__()`` method, that is called to satisfy the\\n   lookup.\\n\\n   Attribute assignments and deletions update the instance\\'s\\n   dictionary, never a class\\'s dictionary.  If the class has a\\n   ``__setattr__()`` or ``__delattr__()`` method, this is called\\n   instead of updating the instance dictionary directly.\\n\\n   Class instances can pretend to be numbers, sequences, or mappings\\n   if they have methods with certain special names.  See section\\n   *Special method names*.\\n\\n   Special attributes: ``__dict__`` is the attribute dictionary;\\n   ``__class__`` is the instance\\'s class.\\n\\nI/O objects (also known as file objects)\\n   A *file object* represents an open file.  Various shortcuts are\\n   available to create file objects: the ``open()`` built-in function,\\n   and also ``os.popen()``, ``os.fdopen()``, and the ``makefile()``\\n   method of socket objects (and perhaps by other functions or methods\\n   provided by extension modules).\\n\\n   The objects ``sys.stdin``, ``sys.stdout`` and ``sys.stderr`` are\\n   initialized to file objects corresponding to the interpreter\\'s\\n   standard input, output and error streams; they are all open in text\\n   mode and therefore follow the interface defined by the\\n   ``io.TextIOBase`` abstract class.\\n\\nInternal types\\n   A few types used internally by the interpreter are exposed to the\\n   user. Their definitions may change with future versions of the\\n   interpreter, but they are mentioned here for completeness.\\n\\n   Code objects\\n      Code objects represent *byte-compiled* executable Python code,\\n      or *bytecode*. The difference between a code object and a\\n      function object is that the function object contains an explicit\\n      reference to the function\\'s globals (the module in which it was\\n      defined), while a code object contains no context; also the\\n      default argument values are stored in the function object, not\\n      in the code object (because they represent values calculated at\\n      run-time).  Unlike function objects, code objects are immutable\\n      and contain no references (directly or indirectly) to mutable\\n      objects.\\n\\n      Special read-only attributes: ``co_name`` gives the function\\n      name; ``co_argcount`` is the number of positional arguments\\n      (including arguments with default values); ``co_nlocals`` is the\\n      number of local variables used by the function (including\\n      arguments); ``co_varnames`` is a tuple containing the names of\\n      the local variables (starting with the argument names);\\n      ``co_cellvars`` is a tuple containing the names of local\\n      variables that are referenced by nested functions;\\n      ``co_freevars`` is a tuple containing the names of free\\n      variables; ``co_code`` is a string representing the sequence of\\n      bytecode instructions; ``co_consts`` is a tuple containing the\\n      literals used by the bytecode; ``co_names`` is a tuple\\n      containing the names used by the bytecode; ``co_filename`` is\\n      the filename from which the code was compiled;\\n      ``co_firstlineno`` is the first line number of the function;\\n      ``co_lnotab`` is a string encoding the mapping from bytecode\\n      offsets to line numbers (for details see the source code of the\\n      interpreter); ``co_stacksize`` is the required stack size\\n      (including local variables); ``co_flags`` is an integer encoding\\n      a number of flags for the interpreter.\\n\\n      The following flag bits are defined for ``co_flags``: bit\\n      ``0x04`` is set if the function uses the ``*arguments`` syntax\\n      to accept an arbitrary number of positional arguments; bit\\n      ``0x08`` is set if the function uses the ``**keywords`` syntax\\n      to accept arbitrary keyword arguments; bit ``0x20`` is set if\\n      the function is a generator.\\n\\n      Future feature declarations (``from __future__ import\\n      division``) also use bits in ``co_flags`` to indicate whether a\\n      code object was compiled with a particular feature enabled: bit\\n      ``0x2000`` is set if the function was compiled with future\\n      division enabled; bits ``0x10`` and ``0x1000`` were used in\\n      earlier versions of Python.\\n\\n      Other bits in ``co_flags`` are reserved for internal use.\\n\\n      If a code object represents a function, the first item in\\n      ``co_consts`` is the documentation string of the function, or\\n      ``None`` if undefined.\\n\\n   Frame objects\\n      Frame objects represent execution frames.  They may occur in\\n      traceback objects (see below).\\n\\n      Special read-only attributes: ``f_back`` is to the previous\\n      stack frame (towards the caller), or ``None`` if this is the\\n      bottom stack frame; ``f_code`` is the code object being executed\\n      in this frame; ``f_locals`` is the dictionary used to look up\\n      local variables; ``f_globals`` is used for global variables;\\n      ``f_builtins`` is used for built-in (intrinsic) names;\\n      ``f_lasti`` gives the precise instruction (this is an index into\\n      the bytecode string of the code object).\\n\\n      Special writable attributes: ``f_trace``, if not ``None``, is a\\n      function called at the start of each source code line (this is\\n      used by the debugger); ``f_lineno`` is the current line number\\n      of the frame --- writing to this from within a trace function\\n      jumps to the given line (only for the bottom-most frame).  A\\n      debugger can implement a Jump command (aka Set Next Statement)\\n      by writing to f_lineno.\\n\\n   Traceback objects\\n      Traceback objects represent a stack trace of an exception.  A\\n      traceback object is created when an exception occurs.  When the\\n      search for an exception handler unwinds the execution stack, at\\n      each unwound level a traceback object is inserted in front of\\n      the current traceback.  When an exception handler is entered,\\n      the stack trace is made available to the program. (See section\\n      *The try statement*.) It is accessible as the third item of the\\n      tuple returned by ``sys.exc_info()``. When the program contains\\n      no suitable handler, the stack trace is written (nicely\\n      formatted) to the standard error stream; if the interpreter is\\n      interactive, it is also made available to the user as\\n      ``sys.last_traceback``.\\n\\n      Special read-only attributes: ``tb_next`` is the next level in\\n      the stack trace (towards the frame where the exception\\n      occurred), or ``None`` if there is no next level; ``tb_frame``\\n      points to the execution frame of the current level;\\n      ``tb_lineno`` gives the line number where the exception\\n      occurred; ``tb_lasti`` indicates the precise instruction.  The\\n      line number and last instruction in the traceback may differ\\n      from the line number of its frame object if the exception\\n      occurred in a ``try`` statement with no matching except clause\\n      or with a finally clause.\\n\\n   Slice objects\\n      Slice objects are used to represent slices for ``__getitem__()``\\n      methods.  They are also created by the built-in ``slice()``\\n      function.\\n\\n      Special read-only attributes: ``start`` is the lower bound;\\n      ``stop`` is the upper bound; ``step`` is the step value; each is\\n      ``None`` if omitted. These attributes can have any type.\\n\\n      Slice objects support one method:\\n\\n      slice.indices(self, length)\\n\\n         This method takes a single integer argument *length* and\\n         computes information about the slice that the slice object\\n         would describe if applied to a sequence of *length* items.\\n         It returns a tuple of three integers; respectively these are\\n         the *start* and *stop* indices and the *step* or stride\\n         length of the slice. Missing or out-of-bounds indices are\\n         handled in a manner consistent with regular slices.\\n\\n   Static method objects\\n      Static method objects provide a way of defeating the\\n      transformation of function objects to method objects described\\n      above. A static method object is a wrapper around any other\\n      object, usually a user-defined method object. When a static\\n      method object is retrieved from a class or a class instance, the\\n      object actually returned is the wrapped object, which is not\\n      subject to any further transformation. Static method objects are\\n      not themselves callable, although the objects they wrap usually\\n      are. Static method objects are created by the built-in\\n      ``staticmethod()`` constructor.\\n\\n   Class method objects\\n      A class method object, like a static method object, is a wrapper\\n      around another object that alters the way in which that object\\n      is retrieved from classes and class instances. The behaviour of\\n      class method objects upon such retrieval is described above,\\n      under \"User-defined methods\". Class method objects are created\\n      by the built-in ``classmethod()`` constructor.\\n',\n'typesfunctions':'\\nFunctions\\n*********\\n\\nFunction objects are created by function definitions.  The only\\noperation on a function object is to call it: ``func(argument-list)``.\\n\\nThere are really two flavors of function objects: built-in functions\\nand user-defined functions.  Both support the same operation (to call\\nthe function), but the implementation is different, hence the\\ndifferent object types.\\n\\nSee *Function definitions* for more information.\\n',\n'typesmapping':'\\nMapping Types --- ``dict``\\n**************************\\n\\nA *mapping* object maps *hashable* values to arbitrary objects.\\nMappings are mutable objects.  There is currently only one standard\\nmapping type, the *dictionary*.  (For other containers see the built-\\nin ``list``, ``set``, and ``tuple`` classes, and the ``collections``\\nmodule.)\\n\\nA dictionary\\'s keys are *almost* arbitrary values.  Values that are\\nnot *hashable*, that is, values containing lists, dictionaries or\\nother mutable types (that are compared by value rather than by object\\nidentity) may not be used as keys.  Numeric types used for keys obey\\nthe normal rules for numeric comparison: if two numbers compare equal\\n(such as ``1`` and ``1.0``) then they can be used interchangeably to\\nindex the same dictionary entry.  (Note however, that since computers\\nstore floating-point numbers as approximations it is usually unwise to\\nuse them as dictionary keys.)\\n\\nDictionaries can be created by placing a comma-separated list of\\n``key: value`` pairs within braces, for example: ``{\\'jack\\': 4098,\\n\\'sjoerd\\': 4127}`` or ``{4098: \\'jack\\', 4127: \\'sjoerd\\'}``, or by the\\n``dict`` constructor.\\n\\nclass class dict(**kwarg)\\nclass class dict(mapping, **kwarg)\\nclass class dict(iterable, **kwarg)\\n\\n   Return a new dictionary initialized from an optional positional\\n   argument and a possibly empty set of keyword arguments.\\n\\n   If no positional argument is given, an empty dictionary is created.\\n   If a positional argument is given and it is a mapping object, a\\n   dictionary is created with the same key-value pairs as the mapping\\n   object.  Otherwise, the positional argument must be an *iterator*\\n   object.  Each item in the iterable must itself be an iterator with\\n   exactly two objects.  The first object of each item becomes a key\\n   in the new dictionary, and the second object the corresponding\\n   value.  If a key occurs more than once, the last value for that key\\n   becomes the corresponding value in the new dictionary.\\n\\n   If keyword arguments are given, the keyword arguments and their\\n   values are added to the dictionary created from the positional\\n   argument.  If a key being added is already present, the value from\\n   the keyword argument replaces the value from the positional\\n   argument.\\n\\n   To illustrate, the following examples all return a dictionary equal\\n   to ``{\"one\": 1, \"two\": 2, \"three\": 3}``:\\n\\n      >>> a = dict(one=1, two=2, three=3)\\n      >>> b = {\\'one\\': 1, \\'two\\': 2, \\'three\\': 3}\\n      >>> c = dict(zip([\\'one\\', \\'two\\', \\'three\\'], [1, 2, 3]))\\n      >>> d = dict([(\\'two\\', 2), (\\'one\\', 1), (\\'three\\', 3)])\\n      >>> e = dict({\\'three\\': 3, \\'one\\': 1, \\'two\\': 2})\\n      >>> a == b == c == d == e\\n      True\\n\\n   Providing keyword arguments as in the first example only works for\\n   keys that are valid Python identifiers.  Otherwise, any valid keys\\n   can be used.\\n\\n   These are the operations that dictionaries support (and therefore,\\n   custom mapping types should support too):\\n\\n   len(d)\\n\\n      Return the number of items in the dictionary *d*.\\n\\n   d[key]\\n\\n      Return the item of *d* with key *key*.  Raises a ``KeyError`` if\\n      *key* is not in the map.\\n\\n      If a subclass of dict defines a method ``__missing__()``, if the\\n      key *key* is not present, the ``d[key]`` operation calls that\\n      method with the key *key* as argument.  The ``d[key]`` operation\\n      then returns or raises whatever is returned or raised by the\\n      ``__missing__(key)`` call if the key is not present. No other\\n      operations or methods invoke ``__missing__()``. If\\n      ``__missing__()`` is not defined, ``KeyError`` is raised.\\n      ``__missing__()`` must be a method; it cannot be an instance\\n      variable:\\n\\n         >>> class Counter(dict):\\n         ...     def __missing__(self, key):\\n         ...         return 0\\n         >>> c = Counter()\\n         >>> c[\\'red\\']\\n         0\\n         >>> c[\\'red\\'] += 1\\n         >>> c[\\'red\\']\\n         1\\n\\n      See ``collections.Counter`` for a complete implementation\\n      including other methods helpful for accumulating and managing\\n      tallies.\\n\\n   d[key] = value\\n\\n      Set ``d[key]`` to *value*.\\n\\n   del d[key]\\n\\n      Remove ``d[key]`` from *d*.  Raises a ``KeyError`` if *key* is\\n      not in the map.\\n\\n   key in d\\n\\n      Return ``True`` if *d* has a key *key*, else ``False``.\\n\\n   key not in d\\n\\n      Equivalent to ``not key in d``.\\n\\n   iter(d)\\n\\n      Return an iterator over the keys of the dictionary.  This is a\\n      shortcut for ``iter(d.keys())``.\\n\\n   clear()\\n\\n      Remove all items from the dictionary.\\n\\n   copy()\\n\\n      Return a shallow copy of the dictionary.\\n\\n   classmethod fromkeys(seq[, value])\\n\\n      Create a new dictionary with keys from *seq* and values set to\\n      *value*.\\n\\n      ``fromkeys()`` is a class method that returns a new dictionary.\\n      *value* defaults to ``None``.\\n\\n   get(key[, default])\\n\\n      Return the value for *key* if *key* is in the dictionary, else\\n      *default*. If *default* is not given, it defaults to ``None``,\\n      so that this method never raises a ``KeyError``.\\n\\n   items()\\n\\n      Return a new view of the dictionary\\'s items (``(key, value)``\\n      pairs). See the *documentation of view objects*.\\n\\n   keys()\\n\\n      Return a new view of the dictionary\\'s keys.  See the\\n      *documentation of view objects*.\\n\\n   pop(key[, default])\\n\\n      If *key* is in the dictionary, remove it and return its value,\\n      else return *default*.  If *default* is not given and *key* is\\n      not in the dictionary, a ``KeyError`` is raised.\\n\\n   popitem()\\n\\n      Remove and return an arbitrary ``(key, value)`` pair from the\\n      dictionary.\\n\\n      ``popitem()`` is useful to destructively iterate over a\\n      dictionary, as often used in set algorithms.  If the dictionary\\n      is empty, calling ``popitem()`` raises a ``KeyError``.\\n\\n   setdefault(key[, default])\\n\\n      If *key* is in the dictionary, return its value.  If not, insert\\n      *key* with a value of *default* and return *default*.  *default*\\n      defaults to ``None``.\\n\\n   update([other])\\n\\n      Update the dictionary with the key/value pairs from *other*,\\n      overwriting existing keys.  Return ``None``.\\n\\n      ``update()`` accepts either another dictionary object or an\\n      iterable of key/value pairs (as tuples or other iterables of\\n      length two).  If keyword arguments are specified, the dictionary\\n      is then updated with those key/value pairs: ``d.update(red=1,\\n      blue=2)``.\\n\\n   values()\\n\\n      Return a new view of the dictionary\\'s values.  See the\\n      *documentation of view objects*.\\n\\nSee also:\\n\\n   ``types.MappingProxyType`` can be used to create a read-only view\\n   of a ``dict``.\\n\\n\\nDictionary view objects\\n=======================\\n\\nThe objects returned by ``dict.keys()``, ``dict.values()`` and\\n``dict.items()`` are *view objects*.  They provide a dynamic view on\\nthe dictionary\\'s entries, which means that when the dictionary\\nchanges, the view reflects these changes.\\n\\nDictionary views can be iterated over to yield their respective data,\\nand support membership tests:\\n\\nlen(dictview)\\n\\n   Return the number of entries in the dictionary.\\n\\niter(dictview)\\n\\n   Return an iterator over the keys, values or items (represented as\\n   tuples of ``(key, value)``) in the dictionary.\\n\\n   Keys and values are iterated over in an arbitrary order which is\\n   non-random, varies across Python implementations, and depends on\\n   the dictionary\\'s history of insertions and deletions. If keys,\\n   values and items views are iterated over with no intervening\\n   modifications to the dictionary, the order of items will directly\\n   correspond.  This allows the creation of ``(value, key)`` pairs\\n   using ``zip()``: ``pairs = zip(d.values(), d.keys())``.  Another\\n   way to create the same list is ``pairs = [(v, k) for (k, v) in\\n   d.items()]``.\\n\\n   Iterating views while adding or deleting entries in the dictionary\\n   may raise a ``RuntimeError`` or fail to iterate over all entries.\\n\\nx in dictview\\n\\n   Return ``True`` if *x* is in the underlying dictionary\\'s keys,\\n   values or items (in the latter case, *x* should be a ``(key,\\n   value)`` tuple).\\n\\nKeys views are set-like since their entries are unique and hashable.\\nIf all values are hashable, so that ``(key, value)`` pairs are unique\\nand hashable, then the items view is also set-like.  (Values views are\\nnot treated as set-like since the entries are generally not unique.)\\nFor set-like views, all of the operations defined for the abstract\\nbase class ``collections.abc.Set`` are available (for example, ``==``,\\n``<``, or ``^``).\\n\\nAn example of dictionary view usage:\\n\\n   >>> dishes = {\\'eggs\\': 2, \\'sausage\\': 1, \\'bacon\\': 1, \\'spam\\': 500}\\n   >>> keys = dishes.keys()\\n   >>> values = dishes.values()\\n\\n   >>> # iteration\\n   >>> n = 0\\n   >>> for val in values:\\n   ...     n += val\\n   >>> print(n)\\n   504\\n\\n   >>> # keys and values are iterated over in the same order\\n   >>> list(keys)\\n   [\\'eggs\\', \\'bacon\\', \\'sausage\\', \\'spam\\']\\n   >>> list(values)\\n   [2, 1, 1, 500]\\n\\n   >>> # view objects are dynamic and reflect dict changes\\n   >>> del dishes[\\'eggs\\']\\n   >>> del dishes[\\'sausage\\']\\n   >>> list(keys)\\n   [\\'spam\\', \\'bacon\\']\\n\\n   >>> # set operations\\n   >>> keys & {\\'eggs\\', \\'bacon\\', \\'salad\\'}\\n   {\\'bacon\\'}\\n   >>> keys ^ {\\'sausage\\', \\'juice\\'}\\n   {\\'juice\\', \\'sausage\\', \\'bacon\\', \\'spam\\'}\\n',\n'typesmethods':'\\nMethods\\n*******\\n\\nMethods are functions that are called using the attribute notation.\\nThere are two flavors: built-in methods (such as ``append()`` on\\nlists) and class instance methods.  Built-in methods are described\\nwith the types that support them.\\n\\nIf you access a method (a function defined in a class namespace)\\nthrough an instance, you get a special object: a *bound method* (also\\ncalled *instance method*) object. When called, it will add the\\n``self`` argument to the argument list.  Bound methods have two\\nspecial read-only attributes: ``m.__self__`` is the object on which\\nthe method operates, and ``m.__func__`` is the function implementing\\nthe method.  Calling ``m(arg-1, arg-2, ..., arg-n)`` is completely\\nequivalent to calling ``m.__func__(m.__self__, arg-1, arg-2, ...,\\narg-n)``.\\n\\nLike function objects, bound method objects support getting arbitrary\\nattributes.  However, since method attributes are actually stored on\\nthe underlying function object (``meth.__func__``), setting method\\nattributes on bound methods is disallowed.  Attempting to set an\\nattribute on a method results in an ``AttributeError`` being raised.\\nIn order to set a method attribute, you need to explicitly set it on\\nthe underlying function object:\\n\\n   >>> class C:\\n   ...     def method(self):\\n   ...         pass\\n   ...\\n   >>> c = C()\\n   >>> c.method.whoami = \\'my name is method\\'  # can\\'t set on the method\\n   Traceback (most recent call last):\\n     File \"<stdin>\", line 1, in <module>\\n   AttributeError: \\'method\\' object has no attribute \\'whoami\\'\\n   >>> c.method.__func__.whoami = \\'my name is method\\'\\n   >>> c.method.whoami\\n   \\'my name is method\\'\\n\\nSee *The standard type hierarchy* for more information.\\n',\n'typesmodules':\"\\nModules\\n*******\\n\\nThe only special operation on a module is attribute access:\\n``m.name``, where *m* is a module and *name* accesses a name defined\\nin *m*'s symbol table. Module attributes can be assigned to.  (Note\\nthat the ``import`` statement is not, strictly speaking, an operation\\non a module object; ``import foo`` does not require a module object\\nnamed *foo* to exist, rather it requires an (external) *definition*\\nfor a module named *foo* somewhere.)\\n\\nA special attribute of every module is ``__dict__``. This is the\\ndictionary containing the module's symbol table. Modifying this\\ndictionary will actually change the module's symbol table, but direct\\nassignment to the ``__dict__`` attribute is not possible (you can\\nwrite ``m.__dict__['a'] = 1``, which defines ``m.a`` to be ``1``, but\\nyou can't write ``m.__dict__ = {}``).  Modifying ``__dict__`` directly\\nis not recommended.\\n\\nModules built into the interpreter are written like this: ``<module\\n'sys' (built-in)>``.  If loaded from a file, they are written as\\n``<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>``.\\n\",\n'typesseq':'\\nSequence Types --- ``list``, ``tuple``, ``range``\\n*************************************************\\n\\nThere are three basic sequence types: lists, tuples, and range\\nobjects. Additional sequence types tailored for processing of *binary\\ndata* and *text strings* are described in dedicated sections.\\n\\n\\nCommon Sequence Operations\\n==========================\\n\\nThe operations in the following table are supported by most sequence\\ntypes, both mutable and immutable. The ``collections.abc.Sequence``\\nABC is provided to make it easier to correctly implement these\\noperations on custom sequence types.\\n\\nThis table lists the sequence operations sorted in ascending priority\\n(operations in the same box have the same priority).  In the table,\\n*s* and *t* are sequences of the same type, *n*, *i*, *j* and *k* are\\nintegers and *x* is an arbitrary object that meets any type and value\\nrestrictions imposed by *s*.\\n\\nThe ``in`` and ``not in`` operations have the same priorities as the\\ncomparison operations. The ``+`` (concatenation) and ``*``\\n(repetition) operations have the same priority as the corresponding\\nnumeric operations.\\n\\n+----------------------------+----------------------------------+------------+\\n| Operation                  | Result                           | Notes      |\\n+============================+==================================+============+\\n| ``x in s``                 | ``True`` if an item of *s* is    | (1)        |\\n|                            | equal to *x*, else ``False``     |            |\\n+----------------------------+----------------------------------+------------+\\n| ``x not in s``             | ``False`` if an item of *s* is   | (1)        |\\n|                            | equal to *x*, else ``True``      |            |\\n+----------------------------+----------------------------------+------------+\\n| ``s + t``                  | the concatenation of *s* and *t* | (6)(7)     |\\n+----------------------------+----------------------------------+------------+\\n| ``s * n`` or ``n * s``     | *n* shallow copies of *s*        | (2)(7)     |\\n|                            | concatenated                     |            |\\n+----------------------------+----------------------------------+------------+\\n| ``s[i]``                   | *i*th item of *s*, origin 0      | (3)        |\\n+----------------------------+----------------------------------+------------+\\n| ``s[i:j]``                 | slice of *s* from *i* to *j*     | (3)(4)     |\\n+----------------------------+----------------------------------+------------+\\n| ``s[i:j:k]``               | slice of *s* from *i* to *j*     | (3)(5)     |\\n|                            | with step *k*                    |            |\\n+----------------------------+----------------------------------+------------+\\n| ``len(s)``                 | length of *s*                    |            |\\n+----------------------------+----------------------------------+------------+\\n| ``min(s)``                 | smallest item of *s*             |            |\\n+----------------------------+----------------------------------+------------+\\n| ``max(s)``                 | largest item of *s*              |            |\\n+----------------------------+----------------------------------+------------+\\n| ``s.index(x[, i[, j]])``   | index of the first occurence of  | (8)        |\\n|                            | *x* in *s* (at or after index    |            |\\n|                            | *i* and before index *j*)        |            |\\n+----------------------------+----------------------------------+------------+\\n| ``s.count(x)``             | total number of occurences of    |            |\\n|                            | *x* in *s*                       |            |\\n+----------------------------+----------------------------------+------------+\\n\\nSequences of the same type also support comparisons.  In particular,\\ntuples and lists are compared lexicographically by comparing\\ncorresponding elements. This means that to compare equal, every\\nelement must compare equal and the two sequences must be of the same\\ntype and have the same length.  (For full details see *Comparisons* in\\nthe language reference.)\\n\\nNotes:\\n\\n1. While the ``in`` and ``not in`` operations are used only for simple\\n   containment testing in the general case, some specialised sequences\\n   (such as ``str``, ``bytes`` and ``bytearray``) also use them for\\n   subsequence testing:\\n\\n      >>> \"gg\" in \"eggs\"\\n      True\\n\\n2. Values of *n* less than ``0`` are treated as ``0`` (which yields an\\n   empty sequence of the same type as *s*).  Note also that the copies\\n   are shallow; nested structures are not copied.  This often haunts\\n   new Python programmers; consider:\\n\\n      >>> lists = [[]] * 3\\n      >>> lists\\n      [[], [], []]\\n      >>> lists[0].append(3)\\n      >>> lists\\n      [[3], [3], [3]]\\n\\n   What has happened is that ``[[]]`` is a one-element list containing\\n   an empty list, so all three elements of ``[[]] * 3`` are (pointers\\n   to) this single empty list.  Modifying any of the elements of\\n   ``lists`` modifies this single list. You can create a list of\\n   different lists this way:\\n\\n      >>> lists = [[] for i in range(3)]\\n      >>> lists[0].append(3)\\n      >>> lists[1].append(5)\\n      >>> lists[2].append(7)\\n      >>> lists\\n      [[3], [5], [7]]\\n\\n3. If *i* or *j* is negative, the index is relative to the end of the\\n   string: ``len(s) + i`` or ``len(s) + j`` is substituted.  But note\\n   that ``-0`` is still ``0``.\\n\\n4. The slice of *s* from *i* to *j* is defined as the sequence of\\n   items with index *k* such that ``i <= k < j``.  If *i* or *j* is\\n   greater than ``len(s)``, use ``len(s)``.  If *i* is omitted or\\n   ``None``, use ``0``.  If *j* is omitted or ``None``, use\\n   ``len(s)``.  If *i* is greater than or equal to *j*, the slice is\\n   empty.\\n\\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\\n   sequence of items with index  ``x = i + n*k`` such that ``0 <= n <\\n   (j-i)/k``.  In other words, the indices are ``i``, ``i+k``,\\n   ``i+2*k``, ``i+3*k`` and so on, stopping when *j* is reached (but\\n   never including *j*).  If *i* or *j* is greater than ``len(s)``,\\n   use ``len(s)``.  If *i* or *j* are omitted or ``None``, they become\\n   \"end\" values (which end depends on the sign of *k*).  Note, *k*\\n   cannot be zero. If *k* is ``None``, it is treated like ``1``.\\n\\n6. Concatenating immutable sequences always results in a new object.\\n   This means that building up a sequence by repeated concatenation\\n   will have a quadratic runtime cost in the total sequence length.\\n   To get a linear runtime cost, you must switch to one of the\\n   alternatives below:\\n\\n   * if concatenating ``str`` objects, you can build a list and use\\n     ``str.join()`` at the end or else write to a ``io.StringIO``\\n     instance and retrieve its value when complete\\n\\n   * if concatenating ``bytes`` objects, you can similarly use\\n     ``bytes.join()`` or ``io.BytesIO``, or you can do in-place\\n     concatenation with a ``bytearray`` object.  ``bytearray`` objects\\n     are mutable and have an efficient overallocation mechanism\\n\\n   * if concatenating ``tuple`` objects, extend a ``list`` instead\\n\\n   * for other types, investigate the relevant class documentation\\n\\n7. Some sequence types (such as ``range``) only support item sequences\\n   that follow specific patterns, and hence don\\'t support sequence\\n   concatenation or repetition.\\n\\n8. ``index`` raises ``ValueError`` when *x* is not found in *s*. When\\n   supported, the additional arguments to the index method allow\\n   efficient searching of subsections of the sequence. Passing the\\n   extra arguments is roughly equivalent to using ``s[i:j].index(x)``,\\n   only without copying any data and with the returned index being\\n   relative to the start of the sequence rather than the start of the\\n   slice.\\n\\n\\nImmutable Sequence Types\\n========================\\n\\nThe only operation that immutable sequence types generally implement\\nthat is not also implemented by mutable sequence types is support for\\nthe ``hash()`` built-in.\\n\\nThis support allows immutable sequences, such as ``tuple`` instances,\\nto be used as ``dict`` keys and stored in ``set`` and ``frozenset``\\ninstances.\\n\\nAttempting to hash an immutable sequence that contains unhashable\\nvalues will result in ``TypeError``.\\n\\n\\nMutable Sequence Types\\n======================\\n\\nThe operations in the following table are defined on mutable sequence\\ntypes. The ``collections.abc.MutableSequence`` ABC is provided to make\\nit easier to correctly implement these operations on custom sequence\\ntypes.\\n\\nIn the table *s* is an instance of a mutable sequence type, *t* is any\\niterable object and *x* is an arbitrary object that meets any type and\\nvalue restrictions imposed by *s* (for example, ``bytearray`` only\\naccepts integers that meet the value restriction ``0 <= x <= 255``).\\n\\n+--------------------------------+----------------------------------+-----------------------+\\n| Operation                      | Result                           | Notes                 |\\n+================================+==================================+=======================+\\n| ``s[i] = x``                   | item *i* of *s* is replaced by   |                       |\\n|                                | *x*                              |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s[i:j] = t``                 | slice of *s* from *i* to *j* is  |                       |\\n|                                | replaced by the contents of the  |                       |\\n|                                | iterable *t*                     |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``del s[i:j]``                 | same as ``s[i:j] = []``          |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s[i:j:k] = t``               | the elements of ``s[i:j:k]`` are | (1)                   |\\n|                                | replaced by those of *t*         |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``del s[i:j:k]``               | removes the elements of          |                       |\\n|                                | ``s[i:j:k]`` from the list       |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.append(x)``                | appends *x* to the end of the    |                       |\\n|                                | sequence (same as                |                       |\\n|                                | ``s[len(s):len(s)] = [x]``)      |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.clear()``                  | removes all items from ``s``     | (5)                   |\\n|                                | (same as ``del s[:]``)           |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.copy()``                   | creates a shallow copy of ``s``  | (5)                   |\\n|                                | (same as ``s[:]``)               |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.extend(t)``                | extends *s* with the contents of |                       |\\n|                                | *t* (same as ``s[len(s):len(s)]  |                       |\\n|                                | = t``)                           |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.insert(i, x)``             | inserts *x* into *s* at the      |                       |\\n|                                | index given by *i* (same as      |                       |\\n|                                | ``s[i:i] = [x]``)                |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.pop([i])``                 | retrieves the item at *i* and    | (2)                   |\\n|                                | also removes it from *s*         |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.remove(x)``                | remove the first item from *s*   | (3)                   |\\n|                                | where ``s[i] == x``              |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.reverse()``                | reverses the items of *s* in     | (4)                   |\\n|                                | place                            |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n\\nNotes:\\n\\n1. *t* must have the same length as the slice it is replacing.\\n\\n2. The optional argument *i* defaults to ``-1``, so that by default\\n   the last item is removed and returned.\\n\\n3. ``remove`` raises ``ValueError`` when *x* is not found in *s*.\\n\\n4. The ``reverse()`` method modifies the sequence in place for economy\\n   of space when reversing a large sequence.  To remind users that it\\n   operates by side effect, it does not return the reversed sequence.\\n\\n5. ``clear()`` and ``copy()`` are included for consistency with the\\n   interfaces of mutable containers that don\\'t support slicing\\n   operations (such as ``dict`` and ``set``)\\n\\n   New in version 3.3: ``clear()`` and ``copy()`` methods.\\n\\n\\nLists\\n=====\\n\\nLists are mutable sequences, typically used to store collections of\\nhomogeneous items (where the precise degree of similarity will vary by\\napplication).\\n\\nclass class list([iterable])\\n\\n   Lists may be constructed in several ways:\\n\\n   * Using a pair of square brackets to denote the empty list: ``[]``\\n\\n   * Using square brackets, separating items with commas: ``[a]``,\\n     ``[a, b, c]``\\n\\n   * Using a list comprehension: ``[x for x in iterable]``\\n\\n   * Using the type constructor: ``list()`` or ``list(iterable)``\\n\\n   The constructor builds a list whose items are the same and in the\\n   same order as *iterable*\\'s items.  *iterable* may be either a\\n   sequence, a container that supports iteration, or an iterator\\n   object.  If *iterable* is already a list, a copy is made and\\n   returned, similar to ``iterable[:]``. For example, ``list(\\'abc\\')``\\n   returns ``[\\'a\\', \\'b\\', \\'c\\']`` and ``list( (1, 2, 3) )`` returns ``[1,\\n   2, 3]``. If no argument is given, the constructor creates a new\\n   empty list, ``[]``.\\n\\n   Many other operations also produce lists, including the\\n   ``sorted()`` built-in.\\n\\n   Lists implement all of the *common* and *mutable* sequence\\n   operations. Lists also provide the following additional method:\\n\\n   sort(*, key=None, reverse=None)\\n\\n      This method sorts the list in place, using only ``<``\\n      comparisons between items. Exceptions are not suppressed - if\\n      any comparison operations fail, the entire sort operation will\\n      fail (and the list will likely be left in a partially modified\\n      state).\\n\\n      *key* specifies a function of one argument that is used to\\n      extract a comparison key from each list element (for example,\\n      ``key=str.lower``). The key corresponding to each item in the\\n      list is calculated once and then used for the entire sorting\\n      process. The default value of ``None`` means that list items are\\n      sorted directly without calculating a separate key value.\\n\\n      The ``functools.cmp_to_key()`` utility is available to convert a\\n      2.x style *cmp* function to a *key* function.\\n\\n      *reverse* is a boolean value.  If set to ``True``, then the list\\n      elements are sorted as if each comparison were reversed.\\n\\n      This method modifies the sequence in place for economy of space\\n      when sorting a large sequence.  To remind users that it operates\\n      by side effect, it does not return the sorted sequence (use\\n      ``sorted()`` to explicitly request a new sorted list instance).\\n\\n      The ``sort()`` method is guaranteed to be stable.  A sort is\\n      stable if it guarantees not to change the relative order of\\n      elements that compare equal --- this is helpful for sorting in\\n      multiple passes (for example, sort by department, then by salary\\n      grade).\\n\\n      **CPython implementation detail:** While a list is being sorted,\\n      the effect of attempting to mutate, or even inspect, the list is\\n      undefined.  The C implementation of Python makes the list appear\\n      empty for the duration, and raises ``ValueError`` if it can\\n      detect that the list has been mutated during a sort.\\n\\n\\nTuples\\n======\\n\\nTuples are immutable sequences, typically used to store collections of\\nheterogeneous data (such as the 2-tuples produced by the\\n``enumerate()`` built-in). Tuples are also used for cases where an\\nimmutable sequence of homogeneous data is needed (such as allowing\\nstorage in a ``set`` or ``dict`` instance).\\n\\nclass class tuple([iterable])\\n\\n   Tuples may be constructed in a number of ways:\\n\\n   * Using a pair of parentheses to denote the empty tuple: ``()``\\n\\n   * Using a trailing comma for a singleton tuple: ``a,`` or ``(a,)``\\n\\n   * Separating items with commas: ``a, b, c`` or ``(a, b, c)``\\n\\n   * Using the ``tuple()`` built-in: ``tuple()`` or\\n     ``tuple(iterable)``\\n\\n   The constructor builds a tuple whose items are the same and in the\\n   same order as *iterable*\\'s items.  *iterable* may be either a\\n   sequence, a container that supports iteration, or an iterator\\n   object.  If *iterable* is already a tuple, it is returned\\n   unchanged. For example, ``tuple(\\'abc\\')`` returns ``(\\'a\\', \\'b\\',\\n   \\'c\\')`` and ``tuple( [1, 2, 3] )`` returns ``(1, 2, 3)``. If no\\n   argument is given, the constructor creates a new empty tuple,\\n   ``()``.\\n\\n   Note that it is actually the comma which makes a tuple, not the\\n   parentheses. The parentheses are optional, except in the empty\\n   tuple case, or when they are needed to avoid syntactic ambiguity.\\n   For example, ``f(a, b, c)`` is a function call with three\\n   arguments, while ``f((a, b, c))`` is a function call with a 3-tuple\\n   as the sole argument.\\n\\n   Tuples implement all of the *common* sequence operations.\\n\\nFor heterogeneous collections of data where access by name is clearer\\nthan access by index, ``collections.namedtuple()`` may be a more\\nappropriate choice than a simple tuple object.\\n\\n\\nRanges\\n======\\n\\nThe ``range`` type represents an immutable sequence of numbers and is\\ncommonly used for looping a specific number of times in ``for`` loops.\\n\\nclass class range(stop)\\nclass class range(start, stop[, step])\\n\\n   The arguments to the range constructor must be integers (either\\n   built-in ``int`` or any object that implements the ``__index__``\\n   special method).  If the *step* argument is omitted, it defaults to\\n   ``1``. If the *start* argument is omitted, it defaults to ``0``. If\\n   *step* is zero, ``ValueError`` is raised.\\n\\n   For a positive *step*, the contents of a range ``r`` are determined\\n   by the formula ``r[i] = start + step*i`` where ``i >= 0`` and\\n   ``r[i] < stop``.\\n\\n   For a negative *step*, the contents of the range are still\\n   determined by the formula ``r[i] = start + step*i``, but the\\n   constraints are ``i >= 0`` and ``r[i] > stop``.\\n\\n   A range object will be empty if ``r[0]`` does not meet the value\\n   constraint. Ranges do support negative indices, but these are\\n   interpreted as indexing from the end of the sequence determined by\\n   the positive indices.\\n\\n   Ranges containing absolute values larger than ``sys.maxsize`` are\\n   permitted but some features (such as ``len()``) may raise\\n   ``OverflowError``.\\n\\n   Range examples:\\n\\n      >>> list(range(10))\\n      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\\n      >>> list(range(1, 11))\\n      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\\n      >>> list(range(0, 30, 5))\\n      [0, 5, 10, 15, 20, 25]\\n      >>> list(range(0, 10, 3))\\n      [0, 3, 6, 9]\\n      >>> list(range(0, -10, -1))\\n      [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]\\n      >>> list(range(0))\\n      []\\n      >>> list(range(1, 0))\\n      []\\n\\n   Ranges implement all of the *common* sequence operations except\\n   concatenation and repetition (due to the fact that range objects\\n   can only represent sequences that follow a strict pattern and\\n   repetition and concatenation will usually violate that pattern).\\n\\nThe advantage of the ``range`` type over a regular ``list`` or\\n``tuple`` is that a ``range`` object will always take the same (small)\\namount of memory, no matter the size of the range it represents (as it\\nonly stores the ``start``, ``stop`` and ``step`` values, calculating\\nindividual items and subranges as needed).\\n\\nRange objects implement the ``collections.Sequence`` ABC, and provide\\nfeatures such as containment tests, element index lookup, slicing and\\nsupport for negative indices (see *Sequence Types --- list, tuple,\\nrange*):\\n\\n>>> r = range(0, 20, 2)\\n>>> r\\nrange(0, 20, 2)\\n>>> 11 in r\\nFalse\\n>>> 10 in r\\nTrue\\n>>> r.index(10)\\n5\\n>>> r[5]\\n10\\n>>> r[:5]\\nrange(0, 10, 2)\\n>>> r[-1]\\n18\\n\\nTesting range objects for equality with ``==`` and ``!=`` compares\\nthem as sequences.  That is, two range objects are considered equal if\\nthey represent the same sequence of values.  (Note that two range\\nobjects that compare equal might have different ``start``, ``stop``\\nand ``step`` attributes, for example ``range(0) == range(2, 1, 3)`` or\\n``range(0, 3, 2) == range(0, 4, 2)``.)\\n\\nChanged in version 3.2: Implement the Sequence ABC. Support slicing\\nand negative indices. Test ``int`` objects for membership in constant\\ntime instead of iterating through all items.\\n\\nChanged in version 3.3: Define \\'==\\' and \\'!=\\' to compare range objects\\nbased on the sequence of values they define (instead of comparing\\nbased on object identity).\\n\\nNew in version 3.3: The ``start``, ``stop`` and ``step`` attributes.\\n',\n'typesseq-mutable':\"\\nMutable Sequence Types\\n**********************\\n\\nThe operations in the following table are defined on mutable sequence\\ntypes. The ``collections.abc.MutableSequence`` ABC is provided to make\\nit easier to correctly implement these operations on custom sequence\\ntypes.\\n\\nIn the table *s* is an instance of a mutable sequence type, *t* is any\\niterable object and *x* is an arbitrary object that meets any type and\\nvalue restrictions imposed by *s* (for example, ``bytearray`` only\\naccepts integers that meet the value restriction ``0 <= x <= 255``).\\n\\n+--------------------------------+----------------------------------+-----------------------+\\n| Operation                      | Result                           | Notes                 |\\n+================================+==================================+=======================+\\n| ``s[i] = x``                   | item *i* of *s* is replaced by   |                       |\\n|                                | *x*                              |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s[i:j] = t``                 | slice of *s* from *i* to *j* is  |                       |\\n|                                | replaced by the contents of the  |                       |\\n|                                | iterable *t*                     |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``del s[i:j]``                 | same as ``s[i:j] = []``          |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s[i:j:k] = t``               | the elements of ``s[i:j:k]`` are | (1)                   |\\n|                                | replaced by those of *t*         |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``del s[i:j:k]``               | removes the elements of          |                       |\\n|                                | ``s[i:j:k]`` from the list       |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.append(x)``                | appends *x* to the end of the    |                       |\\n|                                | sequence (same as                |                       |\\n|                                | ``s[len(s):len(s)] = [x]``)      |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.clear()``                  | removes all items from ``s``     | (5)                   |\\n|                                | (same as ``del s[:]``)           |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.copy()``                   | creates a shallow copy of ``s``  | (5)                   |\\n|                                | (same as ``s[:]``)               |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.extend(t)``                | extends *s* with the contents of |                       |\\n|                                | *t* (same as ``s[len(s):len(s)]  |                       |\\n|                                | = t``)                           |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.insert(i, x)``             | inserts *x* into *s* at the      |                       |\\n|                                | index given by *i* (same as      |                       |\\n|                                | ``s[i:i] = [x]``)                |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.pop([i])``                 | retrieves the item at *i* and    | (2)                   |\\n|                                | also removes it from *s*         |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.remove(x)``                | remove the first item from *s*   | (3)                   |\\n|                                | where ``s[i] == x``              |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n| ``s.reverse()``                | reverses the items of *s* in     | (4)                   |\\n|                                | place                            |                       |\\n+--------------------------------+----------------------------------+-----------------------+\\n\\nNotes:\\n\\n1. *t* must have the same length as the slice it is replacing.\\n\\n2. The optional argument *i* defaults to ``-1``, so that by default\\n   the last item is removed and returned.\\n\\n3. ``remove`` raises ``ValueError`` when *x* is not found in *s*.\\n\\n4. The ``reverse()`` method modifies the sequence in place for economy\\n   of space when reversing a large sequence.  To remind users that it\\n   operates by side effect, it does not return the reversed sequence.\\n\\n5. ``clear()`` and ``copy()`` are included for consistency with the\\n   interfaces of mutable containers that don't support slicing\\n   operations (such as ``dict`` and ``set``)\\n\\n   New in version 3.3: ``clear()`` and ``copy()`` methods.\\n\",\n'unary':'\\nUnary arithmetic and bitwise operations\\n***************************************\\n\\nAll unary arithmetic and bitwise operations have the same priority:\\n\\n   u_expr ::= power | \"-\" u_expr | \"+\" u_expr | \"~\" u_expr\\n\\nThe unary ``-`` (minus) operator yields the negation of its numeric\\nargument.\\n\\nThe unary ``+`` (plus) operator yields its numeric argument unchanged.\\n\\nThe unary ``~`` (invert) operator yields the bitwise inversion of its\\ninteger argument.  The bitwise inversion of ``x`` is defined as\\n``-(x+1)``.  It only applies to integral numbers.\\n\\nIn all three cases, if the argument does not have the proper type, a\\n``TypeError`` exception is raised.\\n',\n'while':'\\nThe ``while`` statement\\n***********************\\n\\nThe ``while`` statement is used for repeated execution as long as an\\nexpression is true:\\n\\n   while_stmt ::= \"while\" expression \":\" suite\\n                  [\"else\" \":\" suite]\\n\\nThis repeatedly tests the expression and, if it is true, executes the\\nfirst suite; if the expression is false (which may be the first time\\nit is tested) the suite of the ``else`` clause, if present, is\\nexecuted and the loop terminates.\\n\\nA ``break`` statement executed in the first suite terminates the loop\\nwithout executing the ``else`` clause\\'s suite.  A ``continue``\\nstatement executed in the first suite skips the rest of the suite and\\ngoes back to testing the expression.\\n',\n'with':'\\nThe ``with`` statement\\n**********************\\n\\nThe ``with`` statement is used to wrap the execution of a block with\\nmethods defined by a context manager (see section *With Statement\\nContext Managers*). This allows common\\n``try``...``except``...``finally`` usage patterns to be encapsulated\\nfor convenient reuse.\\n\\n   with_stmt ::= \"with\" with_item (\",\" with_item)* \":\" suite\\n   with_item ::= expression [\"as\" target]\\n\\nThe execution of the ``with`` statement with one \"item\" proceeds as\\nfollows:\\n\\n1. The context expression (the expression given in the ``with_item``)\\n   is evaluated to obtain a context manager.\\n\\n2. The context manager\\'s ``__exit__()`` is loaded for later use.\\n\\n3. The context manager\\'s ``__enter__()`` method is invoked.\\n\\n4. If a target was included in the ``with`` statement, the return\\n   value from ``__enter__()`` is assigned to it.\\n\\n   Note: The ``with`` statement guarantees that if the ``__enter__()``\\n     method returns without an error, then ``__exit__()`` will always\\n     be called. Thus, if an error occurs during the assignment to the\\n     target list, it will be treated the same as an error occurring\\n     within the suite would be. See step 6 below.\\n\\n5. The suite is executed.\\n\\n6. The context manager\\'s ``__exit__()`` method is invoked.  If an\\n   exception caused the suite to be exited, its type, value, and\\n   traceback are passed as arguments to ``__exit__()``. Otherwise,\\n   three ``None`` arguments are supplied.\\n\\n   If the suite was exited due to an exception, and the return value\\n   from the ``__exit__()`` method was false, the exception is\\n   reraised.  If the return value was true, the exception is\\n   suppressed, and execution continues with the statement following\\n   the ``with`` statement.\\n\\n   If the suite was exited for any reason other than an exception, the\\n   return value from ``__exit__()`` is ignored, and execution proceeds\\n   at the normal location for the kind of exit that was taken.\\n\\nWith more than one item, the context managers are processed as if\\nmultiple ``with`` statements were nested:\\n\\n   with A() as a, B() as b:\\n       suite\\n\\nis equivalent to\\n\\n   with A() as a:\\n       with B() as b:\\n           suite\\n\\nChanged in version 3.1: Support for multiple context expressions.\\n\\nSee also:\\n\\n   **PEP 0343** - The \"with\" statement\\n      The specification, background, and examples for the Python\\n      ``with`` statement.\\n',\n'yield':'\\nThe ``yield`` statement\\n***********************\\n\\n   yield_stmt ::= yield_expression\\n\\nThe ``yield`` statement is only used when defining a generator\\nfunction, and is only used in the body of the generator function.\\nUsing a ``yield`` statement in a function definition is sufficient to\\ncause that definition to create a generator function instead of a\\nnormal function.\\n\\nWhen a generator function is called, it returns an iterator known as a\\ngenerator iterator, or more commonly, a generator.  The body of the\\ngenerator function is executed by calling the ``next()`` function on\\nthe generator repeatedly until it raises an exception.\\n\\nWhen a ``yield`` statement is executed, the state of the generator is\\nfrozen and the value of ``expression_list`` is returned to\\n``next()``\\'s caller.  By \"frozen\" we mean that all local state is\\nretained, including the current bindings of local variables, the\\ninstruction pointer, and the internal evaluation stack: enough\\ninformation is saved so that the next time ``next()`` is invoked, the\\nfunction can proceed exactly as if the ``yield`` statement were just\\nanother external call.\\n\\nThe ``yield`` statement is allowed in the ``try`` clause of a ``try``\\n...  ``finally`` construct.  If the generator is not resumed before it\\nis finalized (by reaching a zero reference count or by being garbage\\ncollected), the generator-iterator\\'s ``close()`` method will be\\ncalled, allowing any pending ``finally`` clauses to execute.\\n\\nWhen ``yield from <expr>`` is used, it treats the supplied expression\\nas a subiterator, producing values from it until the underlying\\niterator is exhausted.\\n\\n   Changed in version 3.3: Added ``yield from <expr>`` to delegate\\n   control flow to a subiterator\\n\\nFor full details of ``yield`` semantics, refer to the *Yield\\nexpressions* section.\\n\\nSee also:\\n\\n   **PEP 0255** - Simple Generators\\n      The proposal for adding generators and the ``yield`` statement\\n      to Python.\\n\\n   **PEP 0342** - Coroutines via Enhanced Generators\\n      The proposal to enhance the API and syntax of generators, making\\n      them usable as simple coroutines.\\n\\n   **PEP 0380** - Syntax for Delegating to a Subgenerator\\n      The proposal to introduce the ``yield_from`` syntax, making\\n      delegation to sub-generators easy.\\n'}\n"], "opcode": [".py", "\n\"\"\"\nopcode module - potentially shared between dis and other modules which\noperate on bytecodes (e.g. peephole optimizers).\n\"\"\"\n\n__all__=[\"cmp_op\",\"hasconst\",\"hasname\",\"hasjrel\",\"hasjabs\",\n\"haslocal\",\"hascompare\",\"hasfree\",\"opname\",\"opmap\",\n\"HAVE_ARGUMENT\",\"EXTENDED_ARG\",\"hasnargs\"]\n\n\n\n\n\n\n\n\ntry :\n from _opcode import stack_effect\n __all__.append('stack_effect')\nexcept ImportError:\n pass\n \ncmp_op=('<','<=','==','!=','>','>=','in','not in','is',\n'is not','exception match','BAD')\n\nhasconst=[]\nhasname=[]\nhasjrel=[]\nhasjabs=[]\nhaslocal=[]\nhascompare=[]\nhasfree=[]\nhasnargs=[]\n\nopmap={}\nopname=['']*256\nfor op in range(256):opname[op]='<%r>'%(op,)\ndel op\n\ndef def_op(name,op):\n opname[op]=name\n opmap[name]=op\n \ndef name_op(name,op):\n def_op(name,op)\n hasname.append(op)\n \ndef jrel_op(name,op):\n def_op(name,op)\n hasjrel.append(op)\n \ndef jabs_op(name,op):\n def_op(name,op)\n hasjabs.append(op)\n \n \n \n \ndef_op('POP_TOP',1)\ndef_op('ROT_TWO',2)\ndef_op('ROT_THREE',3)\ndef_op('DUP_TOP',4)\ndef_op('DUP_TOP_TWO',5)\n\ndef_op('NOP',9)\ndef_op('UNARY_POSITIVE',10)\ndef_op('UNARY_NEGATIVE',11)\ndef_op('UNARY_NOT',12)\n\ndef_op('UNARY_INVERT',15)\n\ndef_op('BINARY_POWER',19)\ndef_op('BINARY_MULTIPLY',20)\n\ndef_op('BINARY_MODULO',22)\ndef_op('BINARY_ADD',23)\ndef_op('BINARY_SUBTRACT',24)\ndef_op('BINARY_SUBSCR',25)\ndef_op('BINARY_FLOOR_DIVIDE',26)\ndef_op('BINARY_TRUE_DIVIDE',27)\ndef_op('INPLACE_FLOOR_DIVIDE',28)\ndef_op('INPLACE_TRUE_DIVIDE',29)\n\ndef_op('STORE_MAP',54)\ndef_op('INPLACE_ADD',55)\ndef_op('INPLACE_SUBTRACT',56)\ndef_op('INPLACE_MULTIPLY',57)\n\ndef_op('INPLACE_MODULO',59)\ndef_op('STORE_SUBSCR',60)\ndef_op('DELETE_SUBSCR',61)\ndef_op('BINARY_LSHIFT',62)\ndef_op('BINARY_RSHIFT',63)\ndef_op('BINARY_AND',64)\ndef_op('BINARY_XOR',65)\ndef_op('BINARY_OR',66)\ndef_op('INPLACE_POWER',67)\ndef_op('GET_ITER',68)\n\ndef_op('PRINT_EXPR',70)\ndef_op('LOAD_BUILD_CLASS',71)\ndef_op('YIELD_FROM',72)\n\ndef_op('INPLACE_LSHIFT',75)\ndef_op('INPLACE_RSHIFT',76)\ndef_op('INPLACE_AND',77)\ndef_op('INPLACE_XOR',78)\ndef_op('INPLACE_OR',79)\ndef_op('BREAK_LOOP',80)\ndef_op('WITH_CLEANUP',81)\n\ndef_op('RETURN_VALUE',83)\ndef_op('IMPORT_STAR',84)\n\ndef_op('YIELD_VALUE',86)\ndef_op('POP_BLOCK',87)\ndef_op('END_FINALLY',88)\ndef_op('POP_EXCEPT',89)\n\nHAVE_ARGUMENT=90\n\nname_op('STORE_NAME',90)\nname_op('DELETE_NAME',91)\ndef_op('UNPACK_SEQUENCE',92)\njrel_op('FOR_ITER',93)\ndef_op('UNPACK_EX',94)\nname_op('STORE_ATTR',95)\nname_op('DELETE_ATTR',96)\nname_op('STORE_GLOBAL',97)\nname_op('DELETE_GLOBAL',98)\ndef_op('LOAD_CONST',100)\nhasconst.append(100)\nname_op('LOAD_NAME',101)\ndef_op('BUILD_TUPLE',102)\ndef_op('BUILD_LIST',103)\ndef_op('BUILD_SET',104)\ndef_op('BUILD_MAP',105)\nname_op('LOAD_ATTR',106)\ndef_op('COMPARE_OP',107)\nhascompare.append(107)\nname_op('IMPORT_NAME',108)\nname_op('IMPORT_FROM',109)\n\njrel_op('JUMP_FORWARD',110)\njabs_op('JUMP_IF_FALSE_OR_POP',111)\njabs_op('JUMP_IF_TRUE_OR_POP',112)\njabs_op('JUMP_ABSOLUTE',113)\njabs_op('POP_JUMP_IF_FALSE',114)\njabs_op('POP_JUMP_IF_TRUE',115)\n\nname_op('LOAD_GLOBAL',116)\n\njabs_op('CONTINUE_LOOP',119)\njrel_op('SETUP_LOOP',120)\njrel_op('SETUP_EXCEPT',121)\njrel_op('SETUP_FINALLY',122)\n\ndef_op('LOAD_FAST',124)\nhaslocal.append(124)\ndef_op('STORE_FAST',125)\nhaslocal.append(125)\ndef_op('DELETE_FAST',126)\nhaslocal.append(126)\n\ndef_op('RAISE_VARARGS',130)\ndef_op('CALL_FUNCTION',131)\nhasnargs.append(131)\ndef_op('MAKE_FUNCTION',132)\ndef_op('BUILD_SLICE',133)\ndef_op('MAKE_CLOSURE',134)\ndef_op('LOAD_CLOSURE',135)\nhasfree.append(135)\ndef_op('LOAD_DEREF',136)\nhasfree.append(136)\ndef_op('STORE_DEREF',137)\nhasfree.append(137)\ndef_op('DELETE_DEREF',138)\nhasfree.append(138)\n\ndef_op('CALL_FUNCTION_VAR',140)\nhasnargs.append(140)\ndef_op('CALL_FUNCTION_KW',141)\nhasnargs.append(141)\ndef_op('CALL_FUNCTION_VAR_KW',142)\nhasnargs.append(142)\n\njrel_op('SETUP_WITH',143)\n\ndef_op('LIST_APPEND',145)\ndef_op('SET_ADD',146)\ndef_op('MAP_ADD',147)\n\ndef_op('LOAD_CLASSDEREF',148)\nhasfree.append(148)\n\ndef_op('EXTENDED_ARG',144)\nEXTENDED_ARG=144\n\ndel def_op,name_op,jrel_op,jabs_op\n"], "encodings.mac_roman": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-roman',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\xc6'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u03c0'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\xe6'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\xff'\n'\\u0178'\n'\\u2044'\n'\\u20ac'\n'\\u2039'\n'\\u203a'\n'\\ufb01'\n'\\ufb02'\n'\\u2021'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\xca'\n'\\xc1'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\uf8ff'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u02d8'\n'\\u02d9'\n'\\u02da'\n'\\xb8'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "xml.dom.minidom": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport io\nimport xml.dom\n\nfrom xml.dom import EMPTY_NAMESPACE,EMPTY_PREFIX,XMLNS_NAMESPACE,domreg\nfrom xml.dom.minicompat import *\nfrom xml.dom.xmlbuilder import DOMImplementationLS,DocumentLS\n\n\n\n\n\n\n_nodeTypes_with_children=(xml.dom.Node.ELEMENT_NODE,\nxml.dom.Node.ENTITY_REFERENCE_NODE)\n\n\nclass Node(xml.dom.Node):\n namespaceURI=None\n parentNode=None\n ownerDocument=None\n nextSibling=None\n previousSibling=None\n \n prefix=EMPTY_PREFIX\n \n def __bool__(self):\n  return True\n  \n def toxml(self,encoding=None ):\n  return self.toprettyxml(\"\",\"\",encoding)\n  \n def toprettyxml(self,indent=\"\\t\",newl=\"\\n\",encoding=None ):\n  if encoding is None :\n   writer=io.StringIO()\n  else :\n   writer=io.TextIOWrapper(io.BytesIO(),\n   encoding=encoding,\n   errors=\"xmlcharrefreplace\",\n   newline='\\n')\n  if self.nodeType ==Node.DOCUMENT_NODE:\n  \n   self.writexml(writer,\"\",indent,newl,encoding)\n  else :\n   self.writexml(writer,\"\",indent,newl)\n  if encoding is None :\n   return writer.getvalue()\n  else :\n   return writer.detach().getvalue()\n   \n def hasChildNodes(self):\n  return bool(self.childNodes)\n  \n def _get_childNodes(self):\n  return self.childNodes\n  \n def _get_firstChild(self):\n  if self.childNodes:\n   return self.childNodes[0]\n   \n def _get_lastChild(self):\n  if self.childNodes:\n   return self.childNodes[-1]\n   \n def insertBefore(self,newChild,refChild):\n  if newChild.nodeType ==self.DOCUMENT_FRAGMENT_NODE:\n   for c in tuple(newChild.childNodes):\n    self.insertBefore(c,refChild)\n    \n   return newChild\n  if newChild.nodeType not in self._child_node_types:\n   raise xml.dom.HierarchyRequestErr(\n   \"%s cannot be child of %s\"%(repr(newChild),repr(self)))\n  if newChild.parentNode is not None :\n   newChild.parentNode.removeChild(newChild)\n  if refChild is None :\n   self.appendChild(newChild)\n  else :\n   try :\n    index=self.childNodes.index(refChild)\n   except ValueError:\n    raise xml.dom.NotFoundErr()\n   if newChild.nodeType in _nodeTypes_with_children:\n    _clear_id_cache(self)\n   self.childNodes.insert(index,newChild)\n   newChild.nextSibling=refChild\n   refChild.previousSibling=newChild\n   if index:\n    node=self.childNodes[index -1]\n    node.nextSibling=newChild\n    newChild.previousSibling=node\n   else :\n    newChild.previousSibling=None\n   newChild.parentNode=self\n  return newChild\n  \n def appendChild(self,node):\n  if node.nodeType ==self.DOCUMENT_FRAGMENT_NODE:\n   for c in tuple(node.childNodes):\n    self.appendChild(c)\n    \n   return node\n  if node.nodeType not in self._child_node_types:\n   raise xml.dom.HierarchyRequestErr(\n   \"%s cannot be child of %s\"%(repr(node),repr(self)))\n  elif node.nodeType in _nodeTypes_with_children:\n   _clear_id_cache(self)\n  if node.parentNode is not None :\n   node.parentNode.removeChild(node)\n  _append_child(self,node)\n  node.nextSibling=None\n  return node\n  \n def replaceChild(self,newChild,oldChild):\n  if newChild.nodeType ==self.DOCUMENT_FRAGMENT_NODE:\n   refChild=oldChild.nextSibling\n   self.removeChild(oldChild)\n   return self.insertBefore(newChild,refChild)\n  if newChild.nodeType not in self._child_node_types:\n   raise xml.dom.HierarchyRequestErr(\n   \"%s cannot be child of %s\"%(repr(newChild),repr(self)))\n  if newChild is oldChild:\n   return\n  if newChild.parentNode is not None :\n   newChild.parentNode.removeChild(newChild)\n  try :\n   index=self.childNodes.index(oldChild)\n  except ValueError:\n   raise xml.dom.NotFoundErr()\n  self.childNodes[index]=newChild\n  newChild.parentNode=self\n  oldChild.parentNode=None\n  if (newChild.nodeType in _nodeTypes_with_children\n  or oldChild.nodeType in _nodeTypes_with_children):\n   _clear_id_cache(self)\n  newChild.nextSibling=oldChild.nextSibling\n  newChild.previousSibling=oldChild.previousSibling\n  oldChild.nextSibling=None\n  oldChild.previousSibling=None\n  if newChild.previousSibling:\n   newChild.previousSibling.nextSibling=newChild\n  if newChild.nextSibling:\n   newChild.nextSibling.previousSibling=newChild\n  return oldChild\n  \n def removeChild(self,oldChild):\n  try :\n   self.childNodes.remove(oldChild)\n  except ValueError:\n   raise xml.dom.NotFoundErr()\n  if oldChild.nextSibling is not None :\n   oldChild.nextSibling.previousSibling=oldChild.previousSibling\n  if oldChild.previousSibling is not None :\n   oldChild.previousSibling.nextSibling=oldChild.nextSibling\n  oldChild.nextSibling=oldChild.previousSibling=None\n  if oldChild.nodeType in _nodeTypes_with_children:\n   _clear_id_cache(self)\n   \n  oldChild.parentNode=None\n  return oldChild\n  \n def normalize(self):\n  L=[]\n  for child in self.childNodes:\n   if child.nodeType ==Node.TEXT_NODE:\n    if not child.data:\n    \n     if L:\n      L[-1].nextSibling=child.nextSibling\n     if child.nextSibling:\n      child.nextSibling.previousSibling=child.previousSibling\n     child.unlink()\n    elif L and L[-1].nodeType ==child.nodeType:\n    \n     node=L[-1]\n     node.data=node.data+child.data\n     node.nextSibling=child.nextSibling\n     if child.nextSibling:\n      child.nextSibling.previousSibling=node\n     child.unlink()\n    else :\n     L.append(child)\n   else :\n    L.append(child)\n    if child.nodeType ==Node.ELEMENT_NODE:\n     child.normalize()\n  self.childNodes[:]=L\n  \n def cloneNode(self,deep):\n  return _clone_node(self,deep,self.ownerDocument or self)\n  \n def isSupported(self,feature,version):\n  return self.ownerDocument.implementation.hasFeature(feature,version)\n  \n def _get_localName(self):\n \n  return None\n  \n  \n  \n def isSameNode(self,other):\n  return self is other\n  \n def getInterface(self,feature):\n  if self.isSupported(feature,None ):\n   return self\n  else :\n   return None\n   \n   \n   \n   \n   \n def getUserData(self,key):\n  try :\n   return self._user_data[key][0]\n  except (AttributeError,KeyError):\n   return None\n   \n def setUserData(self,key,data,handler):\n  old=None\n  try :\n   d=self._user_data\n  except AttributeError:\n   d={}\n   self._user_data=d\n  if key in d:\n   old=d[key][0]\n  if data is None :\n  \n   handler=None\n   if old is not None :\n    del d[key]\n  else :\n   d[key]=(data,handler)\n  return old\n  \n def _call_user_data_handler(self,operation,src,dst):\n  if hasattr(self,\"_user_data\"):\n   for key,(data,handler)in list(self._user_data.items()):\n    if handler is not None :\n     handler.handle(operation,key,data,src,dst)\n     \n     \n     \n def unlink(self):\n  self.parentNode=self.ownerDocument=None\n  if self.childNodes:\n   for child in self.childNodes:\n    child.unlink()\n   self.childNodes=NodeList()\n  self.previousSibling=None\n  self.nextSibling=None\n  \n  \n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,et,ev,tb):\n  self.unlink()\n  \ndefproperty(Node,\"firstChild\",doc=\"First child node, or None.\")\ndefproperty(Node,\"lastChild\",doc=\"Last child node, or None.\")\ndefproperty(Node,\"localName\",doc=\"Namespace-local name of this node.\")\n\n\ndef _append_child(self,node):\n\n childNodes=self.childNodes\n if childNodes:\n  last=childNodes[-1]\n  node.previousSibling=last\n  last.nextSibling=node\n childNodes.append(node)\n node.parentNode=self\n \ndef _in_document(node):\n\n while node is not None :\n  if node.nodeType ==Node.DOCUMENT_NODE:\n   return True\n  node=node.parentNode\n return False\n \ndef _write_data(writer,data):\n ''\n if data:\n  data=data.replace(\"&\",\"&amp;\").replace(\"<\",\"&lt;\").  replace(\"\\\"\",\"&quot;\").replace(\">\",\"&gt;\")\n  writer.write(data)\n  \ndef _get_elements_by_tagName_helper(parent,name,rc):\n for node in parent.childNodes:\n  if node.nodeType ==Node.ELEMENT_NODE and  (name ==\"*\"or node.tagName ==name):\n   rc.append(node)\n  _get_elements_by_tagName_helper(node,name,rc)\n return rc\n \ndef _get_elements_by_tagName_ns_helper(parent,nsURI,localName,rc):\n for node in parent.childNodes:\n  if node.nodeType ==Node.ELEMENT_NODE:\n   if ((localName ==\"*\"or node.localName ==localName)and\n   (nsURI ==\"*\"or node.namespaceURI ==nsURI)):\n    rc.append(node)\n   _get_elements_by_tagName_ns_helper(node,nsURI,localName,rc)\n return rc\n \nclass DocumentFragment(Node):\n nodeType=Node.DOCUMENT_FRAGMENT_NODE\n nodeName=\"#document-fragment\"\n nodeValue=None\n attributes=None\n parentNode=None\n _child_node_types=(Node.ELEMENT_NODE,\n Node.TEXT_NODE,\n Node.CDATA_SECTION_NODE,\n Node.ENTITY_REFERENCE_NODE,\n Node.PROCESSING_INSTRUCTION_NODE,\n Node.COMMENT_NODE,\n Node.NOTATION_NODE)\n \n def __init__(self):\n  self.childNodes=NodeList()\n  \n  \nclass Attr(Node):\n __slots__=('_name','_value','namespaceURI',\n '_prefix','childNodes','_localName','ownerDocument','ownerElement')\n nodeType=Node.ATTRIBUTE_NODE\n attributes=None\n specified=False\n _is_id=False\n \n _child_node_types=(Node.TEXT_NODE,Node.ENTITY_REFERENCE_NODE)\n \n def __init__(self,qName,namespaceURI=EMPTY_NAMESPACE,localName=None ,\n prefix=None ):\n  self.ownerElement=None\n  self._name=qName\n  self.namespaceURI=namespaceURI\n  self._prefix=prefix\n  self.childNodes=NodeList()\n  \n  \n  self.childNodes.append(Text())\n  \n  \n  \n def _get_localName(self):\n  try :\n   return self._localName\n  except AttributeError:\n   return self.nodeName.split(\":\",1)[-1]\n   \n def _get_name(self):\n  return self.name\n  \n def _get_specified(self):\n  return self.specified\n  \n def _get_name(self):\n  return self._name\n  \n def _set_name(self,value):\n  self._name=value\n  if self.ownerElement is not None :\n   _clear_id_cache(self.ownerElement)\n   \n nodeName=name=property(_get_name,_set_name)\n \n def _get_value(self):\n  return self._value\n  \n def _set_value(self,value):\n  self._value=value\n  self.childNodes[0].data=value\n  if self.ownerElement is not None :\n   _clear_id_cache(self.ownerElement)\n  self.childNodes[0].data=value\n  \n nodeValue=value=property(_get_value,_set_value)\n \n def _get_prefix(self):\n  return self._prefix\n  \n def _set_prefix(self,prefix):\n  nsuri=self.namespaceURI\n  if prefix ==\"xmlns\":\n   if nsuri and nsuri !=XMLNS_NAMESPACE:\n    raise xml.dom.NamespaceErr(\n    \"illegal use of 'xmlns' prefix for the wrong namespace\")\n  self._prefix=prefix\n  if prefix is None :\n   newName=self.localName\n  else :\n   newName=\"%s:%s\"%(prefix,self.localName)\n  if self.ownerElement:\n   _clear_id_cache(self.ownerElement)\n  self.name=newName\n  \n prefix=property(_get_prefix,_set_prefix)\n \n def unlink(self):\n \n \n \n \n  elem=self.ownerElement\n  if elem is not None :\n   del elem._attrs[self.nodeName]\n   del elem._attrsNS[(self.namespaceURI,self.localName)]\n   if self._is_id:\n    self._is_id=False\n    elem._magic_id_nodes -=1\n    self.ownerDocument._magic_id_count -=1\n  for child in self.childNodes:\n   child.unlink()\n  del self.childNodes[:]\n  \n def _get_isId(self):\n  if self._is_id:\n   return True\n  doc=self.ownerDocument\n  elem=self.ownerElement\n  if doc is None or elem is None :\n   return False\n   \n  info=doc._get_elem_info(elem)\n  if info is None :\n   return False\n  if self.namespaceURI:\n   return info.isIdNS(self.namespaceURI,self.localName)\n  else :\n   return info.isId(self.nodeName)\n   \n def _get_schemaType(self):\n  doc=self.ownerDocument\n  elem=self.ownerElement\n  if doc is None or elem is None :\n   return _no_type\n   \n  info=doc._get_elem_info(elem)\n  if info is None :\n   return _no_type\n  if self.namespaceURI:\n   return info.getAttributeTypeNS(self.namespaceURI,self.localName)\n  else :\n   return info.getAttributeType(self.nodeName)\n   \ndefproperty(Attr,\"isId\",doc=\"True if this attribute is an ID.\")\ndefproperty(Attr,\"localName\",doc=\"Namespace-local name of this attribute.\")\ndefproperty(Attr,\"schemaType\",doc=\"Schema type for this attribute.\")\n\n\nclass NamedNodeMap(object):\n ''\n\n\n\n\n\n \n \n __slots__=('_attrs','_attrsNS','_ownerElement')\n \n def __init__(self,attrs,attrsNS,ownerElement):\n  self._attrs=attrs\n  self._attrsNS=attrsNS\n  self._ownerElement=ownerElement\n  \n def _get_length(self):\n  return len(self._attrs)\n  \n def item(self,index):\n  try :\n   return self[list(self._attrs.keys())[index]]\n  except IndexError:\n   return None\n   \n def items(self):\n  L=[]\n  for node in self._attrs.values():\n   L.append((node.nodeName,node.value))\n  return L\n  \n def itemsNS(self):\n  L=[]\n  for node in self._attrs.values():\n   L.append(((node.namespaceURI,node.localName),node.value))\n  return L\n  \n def __contains__(self,key):\n  if isinstance(key,str):\n   return key in self._attrs\n  else :\n   return key in self._attrsNS\n   \n def keys(self):\n  return self._attrs.keys()\n  \n def keysNS(self):\n  return self._attrsNS.keys()\n  \n def values(self):\n  return self._attrs.values()\n  \n def get(self,name,value=None ):\n  return self._attrs.get(name,value)\n  \n __len__=_get_length\n \n def _cmp(self,other):\n  if self._attrs is getattr(other,\"_attrs\",None ):\n   return 0\n  else :\n   return (id(self)>id(other))-(id(self)<id(other))\n   \n def __eq__(self,other):\n  return self._cmp(other)==0\n  \n def __ge__(self,other):\n  return self._cmp(other)>=0\n  \n def __gt__(self,other):\n  return self._cmp(other)>0\n  \n def __le__(self,other):\n  return self._cmp(other)<=0\n  \n def __lt__(self,other):\n  return self._cmp(other)<0\n  \n def __ne__(self,other):\n  return self._cmp(other)!=0\n  \n def __getitem__(self,attname_or_tuple):\n  if isinstance(attname_or_tuple,tuple):\n   return self._attrsNS[attname_or_tuple]\n  else :\n   return self._attrs[attname_or_tuple]\n   \n   \n def __setitem__(self,attname,value):\n  if isinstance(value,str):\n   try :\n    node=self._attrs[attname]\n   except KeyError:\n    node=Attr(attname)\n    node.ownerDocument=self._ownerElement.ownerDocument\n    self.setNamedItem(node)\n   node.value=value\n  else :\n   if not isinstance(value,Attr):\n    raise TypeError(\"value must be a string or Attr object\")\n   node=value\n   self.setNamedItem(node)\n   \n def getNamedItem(self,name):\n  try :\n   return self._attrs[name]\n  except KeyError:\n   return None\n   \n def getNamedItemNS(self,namespaceURI,localName):\n  try :\n   return self._attrsNS[(namespaceURI,localName)]\n  except KeyError:\n   return None\n   \n def removeNamedItem(self,name):\n  n=self.getNamedItem(name)\n  if n is not None :\n   _clear_id_cache(self._ownerElement)\n   del self._attrs[n.nodeName]\n   del self._attrsNS[(n.namespaceURI,n.localName)]\n   if hasattr(n,'ownerElement'):\n    n.ownerElement=None\n   return n\n  else :\n   raise xml.dom.NotFoundErr()\n   \n def removeNamedItemNS(self,namespaceURI,localName):\n  n=self.getNamedItemNS(namespaceURI,localName)\n  if n is not None :\n   _clear_id_cache(self._ownerElement)\n   del self._attrsNS[(n.namespaceURI,n.localName)]\n   del self._attrs[n.nodeName]\n   if hasattr(n,'ownerElement'):\n    n.ownerElement=None\n   return n\n  else :\n   raise xml.dom.NotFoundErr()\n   \n def setNamedItem(self,node):\n  if not isinstance(node,Attr):\n   raise xml.dom.HierarchyRequestErr(\n   \"%s cannot be child of %s\"%(repr(node),repr(self)))\n  old=self._attrs.get(node.name)\n  if old:\n   old.unlink()\n  self._attrs[node.name]=node\n  self._attrsNS[(node.namespaceURI,node.localName)]=node\n  node.ownerElement=self._ownerElement\n  _clear_id_cache(node.ownerElement)\n  return old\n  \n def setNamedItemNS(self,node):\n  return self.setNamedItem(node)\n  \n def __delitem__(self,attname_or_tuple):\n  node=self[attname_or_tuple]\n  _clear_id_cache(node.ownerElement)\n  node.unlink()\n  \n def __getstate__(self):\n  return self._attrs,self._attrsNS,self._ownerElement\n  \n def __setstate__(self,state):\n  self._attrs,self._attrsNS,self._ownerElement=state\n  \ndefproperty(NamedNodeMap,\"length\",\ndoc=\"Number of nodes in the NamedNodeMap.\")\n\nAttributeList=NamedNodeMap\n\n\nclass TypeInfo(object):\n __slots__='namespace','name'\n \n def __init__(self,namespace,name):\n  self.namespace=namespace\n  self.name=name\n  \n def __repr__(self):\n  if self.namespace:\n   return\"<TypeInfo %r (from %r)>\"%(self.name,self.namespace)\n  else :\n   return\"<TypeInfo %r>\"%self.name\n   \n def _get_name(self):\n  return self.name\n  \n def _get_namespace(self):\n  return self.namespace\n  \n_no_type=TypeInfo(None ,None )\n\nclass Element(Node):\n __slots__=('ownerDocument','parentNode','tagName','nodeName','prefix',\n 'namespaceURI','_localName','childNodes','_attrs','_attrsNS',\n 'nextSibling','previousSibling')\n nodeType=Node.ELEMENT_NODE\n nodeValue=None\n schemaType=_no_type\n \n _magic_id_nodes=0\n \n _child_node_types=(Node.ELEMENT_NODE,\n Node.PROCESSING_INSTRUCTION_NODE,\n Node.COMMENT_NODE,\n Node.TEXT_NODE,\n Node.CDATA_SECTION_NODE,\n Node.ENTITY_REFERENCE_NODE)\n \n def __init__(self,tagName,namespaceURI=EMPTY_NAMESPACE,prefix=None ,\n localName=None ):\n  self.parentNode=None\n  self.tagName=self.nodeName=tagName\n  self.prefix=prefix\n  self.namespaceURI=namespaceURI\n  self.childNodes=NodeList()\n  self.nextSibling=self.previousSibling=None\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  self._attrs=None\n  self._attrsNS=None\n  \n def _ensure_attributes(self):\n  if self._attrs is None :\n   self._attrs={}\n   self._attrsNS={}\n   \n def _get_localName(self):\n  try :\n   return self._localName\n  except AttributeError:\n   return self.tagName.split(\":\",1)[-1]\n   \n def _get_tagName(self):\n  return self.tagName\n  \n def unlink(self):\n  if self._attrs is not None :\n   for attr in list(self._attrs.values()):\n    attr.unlink()\n  self._attrs=None\n  self._attrsNS=None\n  Node.unlink(self)\n  \n def getAttribute(self,attname):\n  if self._attrs is None :\n   return\"\"\n  try :\n   return self._attrs[attname].value\n  except KeyError:\n   return\"\"\n   \n def getAttributeNS(self,namespaceURI,localName):\n  if self._attrsNS is None :\n   return\"\"\n  try :\n   return self._attrsNS[(namespaceURI,localName)].value\n  except KeyError:\n   return\"\"\n   \n def setAttribute(self,attname,value):\n  attr=self.getAttributeNode(attname)\n  if attr is None :\n   attr=Attr(attname)\n   attr.value=value\n   attr.ownerDocument=self.ownerDocument\n   self.setAttributeNode(attr)\n  elif value !=attr.value:\n   attr.value=value\n   if attr.isId:\n    _clear_id_cache(self)\n    \n def setAttributeNS(self,namespaceURI,qualifiedName,value):\n  prefix,localname=_nssplit(qualifiedName)\n  attr=self.getAttributeNodeNS(namespaceURI,localname)\n  if attr is None :\n   attr=Attr(qualifiedName,namespaceURI,localname,prefix)\n   attr.value=value\n   attr.ownerDocument=self.ownerDocument\n   self.setAttributeNode(attr)\n  else :\n   if value !=attr.value:\n    attr.value=value\n    if attr.isId:\n     _clear_id_cache(self)\n   if attr.prefix !=prefix:\n    attr.prefix=prefix\n    attr.nodeName=qualifiedName\n    \n def getAttributeNode(self,attrname):\n  if self._attrs is None :\n   return None\n  return self._attrs.get(attrname)\n  \n def getAttributeNodeNS(self,namespaceURI,localName):\n  if self._attrsNS is None :\n   return None\n  return self._attrsNS.get((namespaceURI,localName))\n  \n def setAttributeNode(self,attr):\n  if attr.ownerElement not in (None ,self):\n   raise xml.dom.InuseAttributeErr(\"attribute node already owned\")\n  self._ensure_attributes()\n  old1=self._attrs.get(attr.name,None )\n  if old1 is not None :\n   self.removeAttributeNode(old1)\n  old2=self._attrsNS.get((attr.namespaceURI,attr.localName),None )\n  if old2 is not None and old2 is not old1:\n   self.removeAttributeNode(old2)\n  _set_attribute_node(self,attr)\n  \n  if old1 is not attr:\n  \n  \n   return old1\n  if old2 is not attr:\n   return old2\n   \n setAttributeNodeNS=setAttributeNode\n \n def removeAttribute(self,name):\n  if self._attrsNS is None :\n   raise xml.dom.NotFoundErr()\n  try :\n   attr=self._attrs[name]\n  except KeyError:\n   raise xml.dom.NotFoundErr()\n  self.removeAttributeNode(attr)\n  \n def removeAttributeNS(self,namespaceURI,localName):\n  if self._attrsNS is None :\n   raise xml.dom.NotFoundErr()\n  try :\n   attr=self._attrsNS[(namespaceURI,localName)]\n  except KeyError:\n   raise xml.dom.NotFoundErr()\n  self.removeAttributeNode(attr)\n  \n def removeAttributeNode(self,node):\n  if node is None :\n   raise xml.dom.NotFoundErr()\n  try :\n   self._attrs[node.name]\n  except KeyError:\n   raise xml.dom.NotFoundErr()\n  _clear_id_cache(self)\n  node.unlink()\n  \n  \n  node.ownerDocument=self.ownerDocument\n  \n removeAttributeNodeNS=removeAttributeNode\n \n def hasAttribute(self,name):\n  if self._attrs is None :\n   return False\n  return name in self._attrs\n  \n def hasAttributeNS(self,namespaceURI,localName):\n  if self._attrsNS is None :\n   return False\n  return (namespaceURI,localName)in self._attrsNS\n  \n def getElementsByTagName(self,name):\n  return _get_elements_by_tagName_helper(self,name,NodeList())\n  \n def getElementsByTagNameNS(self,namespaceURI,localName):\n  return _get_elements_by_tagName_ns_helper(\n  self,namespaceURI,localName,NodeList())\n  \n def __repr__(self):\n  return\"<DOM Element: %s at %#x>\"%(self.tagName,id(self))\n  \n def writexml(self,writer,indent=\"\",addindent=\"\",newl=\"\"):\n \n \n \n  writer.write(indent+\"<\"+self.tagName)\n  \n  attrs=self._get_attributes()\n  a_names=sorted(attrs.keys())\n  \n  for a_name in a_names:\n   writer.write(\" %s=\\\"\"%a_name)\n   _write_data(writer,attrs[a_name].value)\n   writer.write(\"\\\"\")\n  if self.childNodes:\n   writer.write(\">\")\n   if (len(self.childNodes)==1 and\n   self.childNodes[0].nodeType ==Node.TEXT_NODE):\n    self.childNodes[0].writexml(writer,'','','')\n   else :\n    writer.write(newl)\n    for node in self.childNodes:\n     node.writexml(writer,indent+addindent,addindent,newl)\n    writer.write(indent)\n   writer.write(\"</%s>%s\"%(self.tagName,newl))\n  else :\n   writer.write(\"/>%s\"%(newl))\n   \n def _get_attributes(self):\n  self._ensure_attributes()\n  return NamedNodeMap(self._attrs,self._attrsNS,self)\n  \n def hasAttributes(self):\n  if self._attrs:\n   return True\n  else :\n   return False\n   \n   \n   \n def setIdAttribute(self,name):\n  idAttr=self.getAttributeNode(name)\n  self.setIdAttributeNode(idAttr)\n  \n def setIdAttributeNS(self,namespaceURI,localName):\n  idAttr=self.getAttributeNodeNS(namespaceURI,localName)\n  self.setIdAttributeNode(idAttr)\n  \n def setIdAttributeNode(self,idAttr):\n  if idAttr is None or not self.isSameNode(idAttr.ownerElement):\n   raise xml.dom.NotFoundErr()\n  if _get_containing_entref(self)is not None :\n   raise xml.dom.NoModificationAllowedErr()\n  if not idAttr._is_id:\n   idAttr._is_id=True\n   self._magic_id_nodes +=1\n   self.ownerDocument._magic_id_count +=1\n   _clear_id_cache(self)\n   \ndefproperty(Element,\"attributes\",\ndoc=\"NamedNodeMap of attributes on the element.\")\ndefproperty(Element,\"localName\",\ndoc=\"Namespace-local name of this element.\")\n\n\ndef _set_attribute_node(element,attr):\n _clear_id_cache(element)\n element._ensure_attributes()\n element._attrs[attr.name]=attr\n element._attrsNS[(attr.namespaceURI,attr.localName)]=attr\n \n \n \n \n attr.ownerElement=element\n \nclass Childless:\n ''\n\n \n __slots__=()\n \n attributes=None\n childNodes=EmptyNodeList()\n firstChild=None\n lastChild=None\n \n def _get_firstChild(self):\n  return None\n  \n def _get_lastChild(self):\n  return None\n  \n def appendChild(self,node):\n  raise xml.dom.HierarchyRequestErr(\n  self.nodeName+\" nodes cannot have children\")\n  \n def hasChildNodes(self):\n  return False\n  \n def insertBefore(self,newChild,refChild):\n  raise xml.dom.HierarchyRequestErr(\n  self.nodeName+\" nodes do not have children\")\n  \n def removeChild(self,oldChild):\n  raise xml.dom.NotFoundErr(\n  self.nodeName+\" nodes do not have children\")\n  \n def normalize(self):\n \n  pass\n  \n def replaceChild(self,newChild,oldChild):\n  raise xml.dom.HierarchyRequestErr(\n  self.nodeName+\" nodes do not have children\")\n  \n  \nclass ProcessingInstruction(Childless,Node):\n nodeType=Node.PROCESSING_INSTRUCTION_NODE\n __slots__=('target','data')\n \n def __init__(self,target,data):\n  self.target=target\n  self.data=data\n  \n  \n def _get_nodeValue(self):\n  return self.data\n def _set_nodeValue(self,value):\n  self.data=data\n nodeValue=property(_get_nodeValue,_set_nodeValue)\n \n \n def _get_nodeName(self):\n  return self.target\n def _set_nodeName(self,value):\n  self.target=value\n nodeName=property(_get_nodeName,_set_nodeName)\n \n def writexml(self,writer,indent=\"\",addindent=\"\",newl=\"\"):\n  writer.write(\"%s<?%s %s?>%s\"%(indent,self.target,self.data,newl))\n  \n  \nclass CharacterData(Childless,Node):\n __slots__=('_data','ownerDocument','parentNode','previousSibling','nextSibling')\n \n def __init__(self):\n  self.ownerDocument=self.parentNode=None\n  self.previousSibling=self.nextSibling=None\n  self._data=''\n  Node.__init__(self)\n  \n def _get_length(self):\n  return len(self.data)\n __len__=_get_length\n \n def _get_data(self):\n  return self._data\n def _set_data(self,data):\n  self._data=data\n  \n data=nodeValue=property(_get_data,_set_data)\n \n def __repr__(self):\n  data=self.data\n  if len(data)>10:\n   dotdotdot=\"...\"\n  else :\n   dotdotdot=\"\"\n  return'<DOM %s node \"%r%s\">'%(\n  self.__class__.__name__,data[0:10],dotdotdot)\n  \n def substringData(self,offset,count):\n  if offset <0:\n   raise xml.dom.IndexSizeErr(\"offset cannot be negative\")\n  if offset >=len(self.data):\n   raise xml.dom.IndexSizeErr(\"offset cannot be beyond end of data\")\n  if count <0:\n   raise xml.dom.IndexSizeErr(\"count cannot be negative\")\n  return self.data[offset:offset+count]\n  \n def appendData(self,arg):\n  self.data=self.data+arg\n  \n def insertData(self,offset,arg):\n  if offset <0:\n   raise xml.dom.IndexSizeErr(\"offset cannot be negative\")\n  if offset >=len(self.data):\n   raise xml.dom.IndexSizeErr(\"offset cannot be beyond end of data\")\n  if arg:\n   self.data=\"%s%s%s\"%(\n   self.data[:offset],arg,self.data[offset:])\n   \n def deleteData(self,offset,count):\n  if offset <0:\n   raise xml.dom.IndexSizeErr(\"offset cannot be negative\")\n  if offset >=len(self.data):\n   raise xml.dom.IndexSizeErr(\"offset cannot be beyond end of data\")\n  if count <0:\n   raise xml.dom.IndexSizeErr(\"count cannot be negative\")\n  if count:\n   self.data=self.data[:offset]+self.data[offset+count:]\n   \n def replaceData(self,offset,count,arg):\n  if offset <0:\n   raise xml.dom.IndexSizeErr(\"offset cannot be negative\")\n  if offset >=len(self.data):\n   raise xml.dom.IndexSizeErr(\"offset cannot be beyond end of data\")\n  if count <0:\n   raise xml.dom.IndexSizeErr(\"count cannot be negative\")\n  if count:\n   self.data=\"%s%s%s\"%(\n   self.data[:offset],arg,self.data[offset+count:])\n   \ndefproperty(CharacterData,\"length\",doc=\"Length of the string data.\")\n\n\nclass Text(CharacterData):\n __slots__=()\n \n nodeType=Node.TEXT_NODE\n nodeName=\"#text\"\n attributes=None\n \n def splitText(self,offset):\n  if offset <0 or offset >len(self.data):\n   raise xml.dom.IndexSizeErr(\"illegal offset value\")\n  newText=self.__class__()\n  newText.data=self.data[offset:]\n  newText.ownerDocument=self.ownerDocument\n  next=self.nextSibling\n  if self.parentNode and self in self.parentNode.childNodes:\n   if next is None :\n    self.parentNode.appendChild(newText)\n   else :\n    self.parentNode.insertBefore(newText,next)\n  self.data=self.data[:offset]\n  return newText\n  \n def writexml(self,writer,indent=\"\",addindent=\"\",newl=\"\"):\n  _write_data(writer,\"%s%s%s\"%(indent,self.data,newl))\n  \n  \n  \n def _get_wholeText(self):\n  L=[self.data]\n  n=self.previousSibling\n  while n is not None :\n   if n.nodeType in (Node.TEXT_NODE,Node.CDATA_SECTION_NODE):\n    L.insert(0,n.data)\n    n=n.previousSibling\n   else :\n    break\n  n=self.nextSibling\n  while n is not None :\n   if n.nodeType in (Node.TEXT_NODE,Node.CDATA_SECTION_NODE):\n    L.append(n.data)\n    n=n.nextSibling\n   else :\n    break\n  return''.join(L)\n  \n def replaceWholeText(self,content):\n \n \n  parent=self.parentNode\n  n=self.previousSibling\n  while n is not None :\n   if n.nodeType in (Node.TEXT_NODE,Node.CDATA_SECTION_NODE):\n    next=n.previousSibling\n    parent.removeChild(n)\n    n=next\n   else :\n    break\n  n=self.nextSibling\n  if not content:\n   parent.removeChild(self)\n  while n is not None :\n   if n.nodeType in (Node.TEXT_NODE,Node.CDATA_SECTION_NODE):\n    next=n.nextSibling\n    parent.removeChild(n)\n    n=next\n   else :\n    break\n  if content:\n   self.data=content\n   return self\n  else :\n   return None\n   \n def _get_isWhitespaceInElementContent(self):\n  if self.data.strip():\n   return False\n  elem=_get_containing_element(self)\n  if elem is None :\n   return False\n  info=self.ownerDocument._get_elem_info(elem)\n  if info is None :\n   return False\n  else :\n   return info.isElementContent()\n   \ndefproperty(Text,\"isWhitespaceInElementContent\",\ndoc=\"True iff this text node contains only whitespace\"\n\" and is in element content.\")\ndefproperty(Text,\"wholeText\",\ndoc=\"The text of all logically-adjacent text nodes.\")\n\n\ndef _get_containing_element(node):\n c=node.parentNode\n while c is not None :\n  if c.nodeType ==Node.ELEMENT_NODE:\n   return c\n  c=c.parentNode\n return None\n \ndef _get_containing_entref(node):\n c=node.parentNode\n while c is not None :\n  if c.nodeType ==Node.ENTITY_REFERENCE_NODE:\n   return c\n  c=c.parentNode\n return None\n \n \nclass Comment(CharacterData):\n nodeType=Node.COMMENT_NODE\n nodeName=\"#comment\"\n \n def __init__(self,data):\n  CharacterData.__init__(self)\n  self._data=data\n  \n def writexml(self,writer,indent=\"\",addindent=\"\",newl=\"\"):\n  if\"--\"in self.data:\n   raise ValueError(\"'--' is not allowed in a comment node\")\n  writer.write(\"%s<!--%s-->%s\"%(indent,self.data,newl))\n  \n  \nclass CDATASection(Text):\n __slots__=()\n \n nodeType=Node.CDATA_SECTION_NODE\n nodeName=\"#cdata-section\"\n \n def writexml(self,writer,indent=\"\",addindent=\"\",newl=\"\"):\n  if self.data.find(\"]]>\")>=0:\n   raise ValueError(\"']]>' not allowed in a CDATA section\")\n  writer.write(\"<![CDATA[%s]]>\"%self.data)\n  \n  \nclass ReadOnlySequentialNamedNodeMap(object):\n __slots__='_seq',\n \n def __init__(self,seq=()):\n \n  self._seq=seq\n  \n def __len__(self):\n  return len(self._seq)\n  \n def _get_length(self):\n  return len(self._seq)\n  \n def getNamedItem(self,name):\n  for n in self._seq:\n   if n.nodeName ==name:\n    return n\n    \n def getNamedItemNS(self,namespaceURI,localName):\n  for n in self._seq:\n   if n.namespaceURI ==namespaceURI and n.localName ==localName:\n    return n\n    \n def __getitem__(self,name_or_tuple):\n  if isinstance(name_or_tuple,tuple):\n   node=self.getNamedItemNS(*name_or_tuple)\n  else :\n   node=self.getNamedItem(name_or_tuple)\n  if node is None :\n   raise KeyError(name_or_tuple)\n  return node\n  \n def item(self,index):\n  if index <0:\n   return None\n  try :\n   return self._seq[index]\n  except IndexError:\n   return None\n   \n def removeNamedItem(self,name):\n  raise xml.dom.NoModificationAllowedErr(\n  \"NamedNodeMap instance is read-only\")\n  \n def removeNamedItemNS(self,namespaceURI,localName):\n  raise xml.dom.NoModificationAllowedErr(\n  \"NamedNodeMap instance is read-only\")\n  \n def setNamedItem(self,node):\n  raise xml.dom.NoModificationAllowedErr(\n  \"NamedNodeMap instance is read-only\")\n  \n def setNamedItemNS(self,node):\n  raise xml.dom.NoModificationAllowedErr(\n  \"NamedNodeMap instance is read-only\")\n  \n def __getstate__(self):\n  return [self._seq]\n  \n def __setstate__(self,state):\n  self._seq=state[0]\n  \ndefproperty(ReadOnlySequentialNamedNodeMap,\"length\",\ndoc=\"Number of entries in the NamedNodeMap.\")\n\n\nclass Identified:\n ''\n \n __slots__='publicId','systemId'\n \n def _identified_mixin_init(self,publicId,systemId):\n  self.publicId=publicId\n  self.systemId=systemId\n  \n def _get_publicId(self):\n  return self.publicId\n  \n def _get_systemId(self):\n  return self.systemId\n  \nclass DocumentType(Identified,Childless,Node):\n nodeType=Node.DOCUMENT_TYPE_NODE\n nodeValue=None\n name=None\n publicId=None\n systemId=None\n internalSubset=None\n \n def __init__(self,qualifiedName):\n  self.entities=ReadOnlySequentialNamedNodeMap()\n  self.notations=ReadOnlySequentialNamedNodeMap()\n  if qualifiedName:\n   prefix,localname=_nssplit(qualifiedName)\n   self.name=localname\n  self.nodeName=self.name\n  \n def _get_internalSubset(self):\n  return self.internalSubset\n  \n def cloneNode(self,deep):\n  if self.ownerDocument is None :\n  \n   clone=DocumentType(None )\n   clone.name=self.name\n   clone.nodeName=self.name\n   operation=xml.dom.UserDataHandler.NODE_CLONED\n   if deep:\n    clone.entities._seq=[]\n    clone.notations._seq=[]\n    for n in self.notations._seq:\n     notation=Notation(n.nodeName,n.publicId,n.systemId)\n     clone.notations._seq.append(notation)\n     n._call_user_data_handler(operation,n,notation)\n    for e in self.entities._seq:\n     entity=Entity(e.nodeName,e.publicId,e.systemId,\n     e.notationName)\n     entity.actualEncoding=e.actualEncoding\n     entity.encoding=e.encoding\n     entity.version=e.version\n     clone.entities._seq.append(entity)\n     e._call_user_data_handler(operation,n,entity)\n   self._call_user_data_handler(operation,self,clone)\n   return clone\n  else :\n   return None\n   \n def writexml(self,writer,indent=\"\",addindent=\"\",newl=\"\"):\n  writer.write(\"<!DOCTYPE \")\n  writer.write(self.name)\n  if self.publicId:\n   writer.write(\"%s  PUBLIC '%s'%s  '%s'\"\n   %(newl,self.publicId,newl,self.systemId))\n  elif self.systemId:\n   writer.write(\"%s  SYSTEM '%s'\"%(newl,self.systemId))\n  if self.internalSubset is not None :\n   writer.write(\" [\")\n   writer.write(self.internalSubset)\n   writer.write(\"]\")\n  writer.write(\">\"+newl)\n  \nclass Entity(Identified,Node):\n attributes=None\n nodeType=Node.ENTITY_NODE\n nodeValue=None\n \n actualEncoding=None\n encoding=None\n version=None\n \n def __init__(self,name,publicId,systemId,notation):\n  self.nodeName=name\n  self.notationName=notation\n  self.childNodes=NodeList()\n  self._identified_mixin_init(publicId,systemId)\n  \n def _get_actualEncoding(self):\n  return self.actualEncoding\n  \n def _get_encoding(self):\n  return self.encoding\n  \n def _get_version(self):\n  return self.version\n  \n def appendChild(self,newChild):\n  raise xml.dom.HierarchyRequestErr(\n  \"cannot append children to an entity node\")\n  \n def insertBefore(self,newChild,refChild):\n  raise xml.dom.HierarchyRequestErr(\n  \"cannot insert children below an entity node\")\n  \n def removeChild(self,oldChild):\n  raise xml.dom.HierarchyRequestErr(\n  \"cannot remove children from an entity node\")\n  \n def replaceChild(self,newChild,oldChild):\n  raise xml.dom.HierarchyRequestErr(\n  \"cannot replace children of an entity node\")\n  \nclass Notation(Identified,Childless,Node):\n nodeType=Node.NOTATION_NODE\n nodeValue=None\n \n def __init__(self,name,publicId,systemId):\n  self.nodeName=name\n  self._identified_mixin_init(publicId,systemId)\n  \n  \nclass DOMImplementation(DOMImplementationLS):\n _features=[(\"core\",\"1.0\"),\n (\"core\",\"2.0\"),\n (\"core\",None ),\n (\"xml\",\"1.0\"),\n (\"xml\",\"2.0\"),\n (\"xml\",None ),\n (\"ls-load\",\"3.0\"),\n (\"ls-load\",None ),\n ]\n \n def hasFeature(self,feature,version):\n  if version ==\"\":\n   version=None\n  return (feature.lower(),version)in self._features\n  \n def createDocument(self,namespaceURI,qualifiedName,doctype):\n  if doctype and doctype.parentNode is not None :\n   raise xml.dom.WrongDocumentErr(\n   \"doctype object owned by another DOM tree\")\n  doc=self._create_document()\n  \n  add_root_element=not (namespaceURI is None\n  and qualifiedName is None\n  and doctype is None )\n  \n  if not qualifiedName and add_root_element:\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n   raise xml.dom.InvalidCharacterErr(\"Element with no name\")\n   \n  if add_root_element:\n   prefix,localname=_nssplit(qualifiedName)\n   if prefix ==\"xml\"   and namespaceURI !=\"http://www.w3.org/XML/1998/namespace\":\n    raise xml.dom.NamespaceErr(\"illegal use of 'xml' prefix\")\n   if prefix and not namespaceURI:\n    raise xml.dom.NamespaceErr(\n    \"illegal use of prefix without namespaces\")\n   element=doc.createElementNS(namespaceURI,qualifiedName)\n   if doctype:\n    doc.appendChild(doctype)\n   doc.appendChild(element)\n   \n  if doctype:\n   doctype.parentNode=doctype.ownerDocument=doc\n   \n  doc.doctype=doctype\n  doc.implementation=self\n  return doc\n  \n def createDocumentType(self,qualifiedName,publicId,systemId):\n  doctype=DocumentType(qualifiedName)\n  doctype.publicId=publicId\n  doctype.systemId=systemId\n  return doctype\n  \n  \n  \n def getInterface(self,feature):\n  if self.hasFeature(feature,None ):\n   return self\n  else :\n   return None\n   \n   \n def _create_document(self):\n  return Document()\n  \nclass ElementInfo(object):\n ''\n\n\n\n\n\n \n \n __slots__='tagName',\n \n def __init__(self,name):\n  self.tagName=name\n  \n def getAttributeType(self,aname):\n  return _no_type\n  \n def getAttributeTypeNS(self,namespaceURI,localName):\n  return _no_type\n  \n def isElementContent(self):\n  return False\n  \n def isEmpty(self):\n  ''\n  \n  return False\n  \n def isId(self,aname):\n  ''\n  return False\n  \n def isIdNS(self,namespaceURI,localName):\n  ''\n  return False\n  \n def __getstate__(self):\n  return self.tagName\n  \n def __setstate__(self,state):\n  self.tagName=state\n  \ndef _clear_id_cache(node):\n if node.nodeType ==Node.DOCUMENT_NODE:\n  node._id_cache.clear()\n  node._id_search_stack=None\n elif _in_document(node):\n  node.ownerDocument._id_cache.clear()\n  node.ownerDocument._id_search_stack=None\n  \nclass Document(Node,DocumentLS):\n __slots__=('_elem_info','doctype',\n '_id_search_stack','childNodes','_id_cache')\n _child_node_types=(Node.ELEMENT_NODE,Node.PROCESSING_INSTRUCTION_NODE,\n Node.COMMENT_NODE,Node.DOCUMENT_TYPE_NODE)\n \n implementation=DOMImplementation()\n nodeType=Node.DOCUMENT_NODE\n nodeName=\"#document\"\n nodeValue=None\n attributes=None\n parentNode=None\n previousSibling=nextSibling=None\n \n \n \n \n actualEncoding=None\n encoding=None\n standalone=None\n version=None\n strictErrorChecking=False\n errorHandler=None\n documentURI=None\n \n _magic_id_count=0\n \n def __init__(self):\n  self.doctype=None\n  self.childNodes=NodeList()\n  \n  \n  self._elem_info={}\n  self._id_cache={}\n  self._id_search_stack=None\n  \n def _get_elem_info(self,element):\n  if element.namespaceURI:\n   key=element.namespaceURI,element.localName\n  else :\n   key=element.tagName\n  return self._elem_info.get(key)\n  \n def _get_actualEncoding(self):\n  return self.actualEncoding\n  \n def _get_doctype(self):\n  return self.doctype\n  \n def _get_documentURI(self):\n  return self.documentURI\n  \n def _get_encoding(self):\n  return self.encoding\n  \n def _get_errorHandler(self):\n  return self.errorHandler\n  \n def _get_standalone(self):\n  return self.standalone\n  \n def _get_strictErrorChecking(self):\n  return self.strictErrorChecking\n  \n def _get_version(self):\n  return self.version\n  \n def appendChild(self,node):\n  if node.nodeType not in self._child_node_types:\n   raise xml.dom.HierarchyRequestErr(\n   \"%s cannot be child of %s\"%(repr(node),repr(self)))\n  if node.parentNode is not None :\n  \n  \n  \n   node.parentNode.removeChild(node)\n   \n  if node.nodeType ==Node.ELEMENT_NODE  and self._get_documentElement():\n   raise xml.dom.HierarchyRequestErr(\n   \"two document elements disallowed\")\n  return Node.appendChild(self,node)\n  \n def removeChild(self,oldChild):\n  try :\n   self.childNodes.remove(oldChild)\n  except ValueError:\n   raise xml.dom.NotFoundErr()\n  oldChild.nextSibling=oldChild.previousSibling=None\n  oldChild.parentNode=None\n  if self.documentElement is oldChild:\n   self.documentElement=None\n   \n  return oldChild\n  \n def _get_documentElement(self):\n  for node in self.childNodes:\n   if node.nodeType ==Node.ELEMENT_NODE:\n    return node\n    \n def unlink(self):\n  if self.doctype is not None :\n   self.doctype.unlink()\n   self.doctype=None\n  Node.unlink(self)\n  \n def cloneNode(self,deep):\n  if not deep:\n   return None\n  clone=self.implementation.createDocument(None ,None ,None )\n  clone.encoding=self.encoding\n  clone.standalone=self.standalone\n  clone.version=self.version\n  for n in self.childNodes:\n   childclone=_clone_node(n,deep,clone)\n   assert childclone.ownerDocument.isSameNode(clone)\n   clone.childNodes.append(childclone)\n   if childclone.nodeType ==Node.DOCUMENT_NODE:\n    assert clone.documentElement is None\n   elif childclone.nodeType ==Node.DOCUMENT_TYPE_NODE:\n    assert clone.doctype is None\n    clone.doctype=childclone\n   childclone.parentNode=clone\n  self._call_user_data_handler(xml.dom.UserDataHandler.NODE_CLONED,\n  self,clone)\n  return clone\n  \n def createDocumentFragment(self):\n  d=DocumentFragment()\n  d.ownerDocument=self\n  return d\n  \n def createElement(self,tagName):\n  e=Element(tagName)\n  e.ownerDocument=self\n  return e\n  \n def createTextNode(self,data):\n  if not isinstance(data,str):\n   raise TypeError(\"node contents must be a string\")\n  t=Text()\n  t.data=data\n  t.ownerDocument=self\n  return t\n  \n def createCDATASection(self,data):\n  if not isinstance(data,str):\n   raise TypeError(\"node contents must be a string\")\n  c=CDATASection()\n  c.data=data\n  c.ownerDocument=self\n  return c\n  \n def createComment(self,data):\n  c=Comment(data)\n  c.ownerDocument=self\n  return c\n  \n def createProcessingInstruction(self,target,data):\n  p=ProcessingInstruction(target,data)\n  p.ownerDocument=self\n  return p\n  \n def createAttribute(self,qName):\n  a=Attr(qName)\n  a.ownerDocument=self\n  a.value=\"\"\n  return a\n  \n def createElementNS(self,namespaceURI,qualifiedName):\n  prefix,localName=_nssplit(qualifiedName)\n  e=Element(qualifiedName,namespaceURI,prefix)\n  e.ownerDocument=self\n  return e\n  \n def createAttributeNS(self,namespaceURI,qualifiedName):\n  prefix,localName=_nssplit(qualifiedName)\n  a=Attr(qualifiedName,namespaceURI,localName,prefix)\n  a.ownerDocument=self\n  a.value=\"\"\n  return a\n  \n  \n  \n  \n def _create_entity(self,name,publicId,systemId,notationName):\n  e=Entity(name,publicId,systemId,notationName)\n  e.ownerDocument=self\n  return e\n  \n def _create_notation(self,name,publicId,systemId):\n  n=Notation(name,publicId,systemId)\n  n.ownerDocument=self\n  return n\n  \n def getElementById(self,id):\n  if id in self._id_cache:\n   return self._id_cache[id]\n  if not (self._elem_info or self._magic_id_count):\n   return None\n   \n  stack=self._id_search_stack\n  if stack is None :\n  \n   stack=[self.documentElement]\n   self._id_search_stack=stack\n  elif not stack:\n  \n  \n   return None\n   \n  result=None\n  while stack:\n   node=stack.pop()\n   \n   stack.extend([child for child in node.childNodes\n   if child.nodeType in _nodeTypes_with_children])\n   \n   info=self._get_elem_info(node)\n   if info:\n   \n   \n   \n    for attr in node.attributes.values():\n     if attr.namespaceURI:\n      if info.isIdNS(attr.namespaceURI,attr.localName):\n       self._id_cache[attr.value]=node\n       if attr.value ==id:\n        result=node\n       elif not node._magic_id_nodes:\n        break\n     elif info.isId(attr.name):\n      self._id_cache[attr.value]=node\n      if attr.value ==id:\n       result=node\n      elif not node._magic_id_nodes:\n       break\n     elif attr._is_id:\n      self._id_cache[attr.value]=node\n      if attr.value ==id:\n       result=node\n      elif node._magic_id_nodes ==1:\n       break\n   elif node._magic_id_nodes:\n    for attr in node.attributes.values():\n     if attr._is_id:\n      self._id_cache[attr.value]=node\n      if attr.value ==id:\n       result=node\n   if result is not None :\n    break\n  return result\n  \n def getElementsByTagName(self,name):\n  return _get_elements_by_tagName_helper(self,name,NodeList())\n  \n def getElementsByTagNameNS(self,namespaceURI,localName):\n  return _get_elements_by_tagName_ns_helper(\n  self,namespaceURI,localName,NodeList())\n  \n def isSupported(self,feature,version):\n  return self.implementation.hasFeature(feature,version)\n  \n def importNode(self,node,deep):\n  if node.nodeType ==Node.DOCUMENT_NODE:\n   raise xml.dom.NotSupportedErr(\"cannot import document nodes\")\n  elif node.nodeType ==Node.DOCUMENT_TYPE_NODE:\n   raise xml.dom.NotSupportedErr(\"cannot import document type nodes\")\n  return _clone_node(node,deep,self)\n  \n def writexml(self,writer,indent=\"\",addindent=\"\",newl=\"\",encoding=None ):\n  if encoding is None :\n   writer.write('<?xml version=\"1.0\" ?>'+newl)\n  else :\n   writer.write('<?xml version=\"1.0\" encoding=\"%s\"?>%s'%(\n   encoding,newl))\n  for node in self.childNodes:\n   node.writexml(writer,indent,addindent,newl)\n   \n   \n   \n def renameNode(self,n,namespaceURI,name):\n  if n.ownerDocument is not self:\n   raise xml.dom.WrongDocumentErr(\n   \"cannot rename nodes from other documents;\\n\"\n   \"expected %s,\\nfound %s\"%(self,n.ownerDocument))\n  if n.nodeType not in (Node.ELEMENT_NODE,Node.ATTRIBUTE_NODE):\n   raise xml.dom.NotSupportedErr(\n   \"renameNode() only applies to element and attribute nodes\")\n  if namespaceURI !=EMPTY_NAMESPACE:\n   if':'in name:\n    prefix,localName=name.split(':',1)\n    if (prefix ==\"xmlns\"\n    and namespaceURI !=xml.dom.XMLNS_NAMESPACE):\n     raise xml.dom.NamespaceErr(\n     \"illegal use of 'xmlns' prefix\")\n   else :\n    if (name ==\"xmlns\"\n    and namespaceURI !=xml.dom.XMLNS_NAMESPACE\n    and n.nodeType ==Node.ATTRIBUTE_NODE):\n     raise xml.dom.NamespaceErr(\n     \"illegal use of the 'xmlns' attribute\")\n    prefix=None\n    localName=name\n  else :\n   prefix=None\n   localName=None\n  if n.nodeType ==Node.ATTRIBUTE_NODE:\n   element=n.ownerElement\n   if element is not None :\n    is_id=n._is_id\n    element.removeAttributeNode(n)\n  else :\n   element=None\n  n.prefix=prefix\n  n._localName=localName\n  n.namespaceURI=namespaceURI\n  n.nodeName=name\n  if n.nodeType ==Node.ELEMENT_NODE:\n   n.tagName=name\n  else :\n  \n   n.name=name\n   if element is not None :\n    element.setAttributeNode(n)\n    if is_id:\n     element.setIdAttributeNode(n)\n     \n     \n     \n     \n     \n  return n\n  \ndefproperty(Document,\"documentElement\",\ndoc=\"Top-level element of this document.\")\n\n\ndef _clone_node(node,deep,newOwnerDocument):\n ''\n\n\n \n if node.ownerDocument.isSameNode(newOwnerDocument):\n  operation=xml.dom.UserDataHandler.NODE_CLONED\n else :\n  operation=xml.dom.UserDataHandler.NODE_IMPORTED\n if node.nodeType ==Node.ELEMENT_NODE:\n  clone=newOwnerDocument.createElementNS(node.namespaceURI,\n  node.nodeName)\n  for attr in node.attributes.values():\n   clone.setAttributeNS(attr.namespaceURI,attr.nodeName,attr.value)\n   a=clone.getAttributeNodeNS(attr.namespaceURI,attr.localName)\n   a.specified=attr.specified\n   \n  if deep:\n   for child in node.childNodes:\n    c=_clone_node(child,deep,newOwnerDocument)\n    clone.appendChild(c)\n    \n elif node.nodeType ==Node.DOCUMENT_FRAGMENT_NODE:\n  clone=newOwnerDocument.createDocumentFragment()\n  if deep:\n   for child in node.childNodes:\n    c=_clone_node(child,deep,newOwnerDocument)\n    clone.appendChild(c)\n    \n elif node.nodeType ==Node.TEXT_NODE:\n  clone=newOwnerDocument.createTextNode(node.data)\n elif node.nodeType ==Node.CDATA_SECTION_NODE:\n  clone=newOwnerDocument.createCDATASection(node.data)\n elif node.nodeType ==Node.PROCESSING_INSTRUCTION_NODE:\n  clone=newOwnerDocument.createProcessingInstruction(node.target,\n  node.data)\n elif node.nodeType ==Node.COMMENT_NODE:\n  clone=newOwnerDocument.createComment(node.data)\n elif node.nodeType ==Node.ATTRIBUTE_NODE:\n  clone=newOwnerDocument.createAttributeNS(node.namespaceURI,\n  node.nodeName)\n  clone.specified=True\n  clone.value=node.value\n elif node.nodeType ==Node.DOCUMENT_TYPE_NODE:\n  assert node.ownerDocument is not newOwnerDocument\n  operation=xml.dom.UserDataHandler.NODE_IMPORTED\n  clone=newOwnerDocument.implementation.createDocumentType(\n  node.name,node.publicId,node.systemId)\n  clone.ownerDocument=newOwnerDocument\n  if deep:\n   clone.entities._seq=[]\n   clone.notations._seq=[]\n   for n in node.notations._seq:\n    notation=Notation(n.nodeName,n.publicId,n.systemId)\n    notation.ownerDocument=newOwnerDocument\n    clone.notations._seq.append(notation)\n    if hasattr(n,'_call_user_data_handler'):\n     n._call_user_data_handler(operation,n,notation)\n   for e in node.entities._seq:\n    entity=Entity(e.nodeName,e.publicId,e.systemId,\n    e.notationName)\n    entity.actualEncoding=e.actualEncoding\n    entity.encoding=e.encoding\n    entity.version=e.version\n    entity.ownerDocument=newOwnerDocument\n    clone.entities._seq.append(entity)\n    if hasattr(e,'_call_user_data_handler'):\n     e._call_user_data_handler(operation,n,entity)\n else :\n \n \n \n  raise xml.dom.NotSupportedErr(\"Cannot clone node %s\"%repr(node))\n  \n  \n  \n  \n if hasattr(node,'_call_user_data_handler'):\n  node._call_user_data_handler(operation,node,clone)\n return clone\n \n \ndef _nssplit(qualifiedName):\n fields=qualifiedName.split(':',1)\n if len(fields)==2:\n  return fields\n else :\n  return (None ,fields[0])\n  \n  \ndef _do_pulldom_parse(func,args,kwargs):\n events=func(*args,**kwargs)\n toktype,rootNode=events.getEvent()\n events.expandNode(rootNode)\n events.clear()\n return rootNode\n \ndef parse(file,parser=None ,bufsize=None ):\n ''\n if parser is None and not bufsize:\n  from xml.dom import expatbuilder\n  return expatbuilder.parse(file)\n else :\n  from xml.dom import pulldom\n  return _do_pulldom_parse(pulldom.parse,(file,),\n  {'parser':parser,'bufsize':bufsize})\n  \ndef parseString(string,parser=None ):\n ''\n if parser is None :\n  from xml.dom import expatbuilder\n  return expatbuilder.parseString(string)\n else :\n  from xml.dom import pulldom\n  return _do_pulldom_parse(pulldom.parseString,(string,),\n  {'parser':parser})\n  \ndef getDOMImplementation(features=None ):\n if features:\n  if isinstance(features,str):\n   features=domreg._parse_feature_string(features)\n  for f,v in features:\n   if not Document.implementation.hasFeature(f,v):\n    return None\n return Document.implementation\n"], "colorsys": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"rgb_to_yiq\",\"yiq_to_rgb\",\"rgb_to_hls\",\"hls_to_rgb\",\n\"rgb_to_hsv\",\"hsv_to_rgb\"]\n\n\n\nONE_THIRD=1.0 /3.0\nONE_SIXTH=1.0 /6.0\nTWO_THIRD=2.0 /3.0\n\n\n\n\n\ndef rgb_to_yiq(r,g,b):\n y=0.30 *r+0.59 *g+0.11 *b\n i=0.60 *r -0.28 *g -0.32 *b\n q=0.21 *r -0.52 *g+0.31 *b\n return (y,i,q)\n \ndef yiq_to_rgb(y,i,q):\n r=y+0.948262 *i+0.624013 *q\n g=y -0.276066 *i -0.639810 *q\n b=y -1.105450 *i+1.729860 *q\n if r <0.0:\n  r=0.0\n if g <0.0:\n  g=0.0\n if b <0.0:\n  b=0.0\n if r >1.0:\n  r=1.0\n if g >1.0:\n  g=1.0\n if b >1.0:\n  b=1.0\n return (r,g,b)\n \n \n \n \n \n \n \ndef rgb_to_hls(r,g,b):\n maxc=max(r,g,b)\n minc=min(r,g,b)\n \n l=(minc+maxc)/2.0\n if minc ==maxc:\n  return 0.0,l,0.0\n if l <=0.5:\n  s=(maxc -minc)/(maxc+minc)\n else :\n  s=(maxc -minc)/(2.0 -maxc -minc)\n rc=(maxc -r)/(maxc -minc)\n gc=(maxc -g)/(maxc -minc)\n bc=(maxc -b)/(maxc -minc)\n if r ==maxc:\n  h=bc -gc\n elif g ==maxc:\n  h=2.0+rc -bc\n else :\n  h=4.0+gc -rc\n h=(h /6.0)%1.0\n return h,l,s\n \ndef hls_to_rgb(h,l,s):\n if s ==0.0:\n  return l,l,l\n if l <=0.5:\n  m2=l *(1.0+s)\n else :\n  m2=l+s -(l *s)\n m1=2.0 *l -m2\n return (_v(m1,m2,h+ONE_THIRD),_v(m1,m2,h),_v(m1,m2,h -ONE_THIRD))\n \ndef _v(m1,m2,hue):\n hue=hue %1.0\n if hue <ONE_SIXTH:\n  return m1+(m2 -m1)*hue *6.0\n if hue <0.5:\n  return m2\n if hue <TWO_THIRD:\n  return m1+(m2 -m1)*(TWO_THIRD -hue)*6.0\n return m1\n \n \n \n \n \n \n \ndef rgb_to_hsv(r,g,b):\n maxc=max(r,g,b)\n minc=min(r,g,b)\n v=maxc\n if minc ==maxc:\n  return 0.0,0.0,v\n s=(maxc -minc)/maxc\n rc=(maxc -r)/(maxc -minc)\n gc=(maxc -g)/(maxc -minc)\n bc=(maxc -b)/(maxc -minc)\n if r ==maxc:\n  h=bc -gc\n elif g ==maxc:\n  h=2.0+rc -bc\n else :\n  h=4.0+gc -rc\n h=(h /6.0)%1.0\n return h,s,v\n \ndef hsv_to_rgb(h,s,v):\n if s ==0.0:\n  return v,v,v\n i=int(h *6.0)\n f=(h *6.0)-i\n p=v *(1.0 -s)\n q=v *(1.0 -s *f)\n t=v *(1.0 -s *(1.0 -f))\n i=i %6\n if i ==0:\n  return v,t,p\n if i ==1:\n  return q,v,p\n if i ==2:\n  return p,v,t\n if i ==3:\n  return p,q,v\n if i ==4:\n  return t,p,v\n if i ==5:\n  return v,p,q\n  \n"], "encodings": [".py", "", 1], "collections.abc": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) for collections, according to PEP 3119.\n\nUnit tests are in test_collections.\n\"\"\"\n\nfrom abc import ABCMeta,abstractmethod\nimport sys\n\n__all__=[\"Hashable\",\"Iterable\",\"Iterator\",\n\"Sized\",\"Container\",\"Callable\",\n\"Set\",\"MutableSet\",\n\"Mapping\",\"MutableMapping\",\n\"MappingView\",\"KeysView\",\"ItemsView\",\"ValuesView\",\n\"Sequence\",\"MutableSequence\",\n\"ByteString\",\n]\n\n\n\n\n\n\n\n\nbytes_iterator=type(iter(b''))\nbytearray_iterator=type(iter(bytearray()))\n\ndict_keyiterator=type(iter({}.keys()))\ndict_valueiterator=type(iter({}.values()))\ndict_itemiterator=type(iter({}.items()))\nlist_iterator=type(iter([]))\nlist_reverseiterator=type(iter(reversed([])))\nrange_iterator=type(iter(range(0)))\nset_iterator=type(iter(set()))\nstr_iterator=type(iter(\"\"))\ntuple_iterator=type(iter(()))\nzip_iterator=type(iter(zip()))\n\ndict_keys=type({}.keys())\ndict_values=type({}.values())\ndict_items=type({}.items())\n\nmappingproxy=type(type.__dict__)\n\n\n\n\nclass Hashable(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __hash__(self):\n  return 0\n  \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Hashable:\n   for B in C.__mro__:\n    if\"__hash__\"in B.__dict__:\n     if B.__dict__[\"__hash__\"]:\n      return True\n     break\n  return NotImplemented\n  \n  \nclass Iterable(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __iter__(self):\n  while False :\n   yield None\n   \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Iterable:\n   if any(\"__iter__\"in B.__dict__ for B in C.__mro__):\n    return True\n  return NotImplemented\n  \n  \nclass Iterator(Iterable):\n\n __slots__=()\n \n @abstractmethod\n def __next__(self):\n  raise StopIteration\n  \n def __iter__(self):\n  return self\n  \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Iterator:\n   if (any(\"__next__\"in B.__dict__ for B in C.__mro__)and\n   any(\"__iter__\"in B.__dict__ for B in C.__mro__)):\n    return True\n  return NotImplemented\n  \nIterator.register(bytes_iterator)\nIterator.register(bytearray_iterator)\n\nIterator.register(dict_keyiterator)\nIterator.register(dict_valueiterator)\nIterator.register(dict_itemiterator)\nIterator.register(list_iterator)\nIterator.register(list_reverseiterator)\nIterator.register(range_iterator)\nIterator.register(set_iterator)\nIterator.register(str_iterator)\nIterator.register(tuple_iterator)\nIterator.register(zip_iterator)\n\nclass Sized(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __len__(self):\n  return 0\n  \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Sized:\n   if any(\"__len__\"in B.__dict__ for B in C.__mro__):\n    return True\n  return NotImplemented\n  \n  \nclass Container(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __contains__(self,x):\n  return False\n  \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Container:\n   if any(\"__contains__\"in B.__dict__ for B in C.__mro__):\n    return True\n  return NotImplemented\n  \n  \nclass Callable(metaclass=ABCMeta):\n\n __slots__=()\n \n @abstractmethod\n def __call__(self,*args,**kwds):\n  return False\n  \n @classmethod\n def __subclasshook__(cls,C):\n  if cls is Callable:\n   if any(\"__call__\"in B.__dict__ for B in C.__mro__):\n    return True\n  return NotImplemented\n  \n  \n  \n  \n  \nclass Set(Sized,Iterable,Container):\n\n ''\n\n\n\n\n\n\n\n \n \n __slots__=()\n \n def __le__(self,other):\n  if not isinstance(other,Set):\n   return NotImplemented\n  if len(self)>len(other):\n   return False\n  for elem in self:\n   if elem not in other:\n    return False\n  return True\n  \n def __lt__(self,other):\n  if not isinstance(other,Set):\n   return NotImplemented\n  return len(self)<len(other)and self.__le__(other)\n  \n def __gt__(self,other):\n  if not isinstance(other,Set):\n   return NotImplemented\n  return other <self\n  \n def __ge__(self,other):\n  if not isinstance(other,Set):\n   return NotImplemented\n  return other <=self\n  \n def __eq__(self,other):\n  if not isinstance(other,Set):\n   return NotImplemented\n  return len(self)==len(other)and self.__le__(other)\n  \n def __ne__(self,other):\n  return not (self ==other)\n  \n @classmethod\n def _from_iterable(cls,it):\n  ''\n\n\n\n  \n  return cls(it)\n  \n def __and__(self,other):\n  if not isinstance(other,Iterable):\n   return NotImplemented\n  return self._from_iterable(value for value in other if value in self)\n  \n def isdisjoint(self,other):\n  for value in other:\n   if value in self:\n    return False\n  return True\n  \n def __or__(self,other):\n  if not isinstance(other,Iterable):\n   return NotImplemented\n  chain=(e for s in (self,other)for e in s)\n  return self._from_iterable(chain)\n  \n def __sub__(self,other):\n  if not isinstance(other,Set):\n   if not isinstance(other,Iterable):\n    return NotImplemented\n   other=self._from_iterable(other)\n  return self._from_iterable(value for value in self\n  if value not in other)\n  \n def __xor__(self,other):\n  if not isinstance(other,Set):\n   if not isinstance(other,Iterable):\n    return NotImplemented\n   other=self._from_iterable(other)\n  return (self -other)|(other -self)\n  \n def _hash(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  MAX=sys.maxsize\n  MASK=2 *MAX+1\n  n=len(self)\n  h=1927868237 *(n+1)\n  h &=MASK\n  for x in self:\n   hx=hash(x)\n   h ^=(hx ^(hx <<16)^89869747)*3644798167\n   h &=MASK\n  h=h *69069+907133923\n  h &=MASK\n  if h >MAX:\n   h -=MASK+1\n  if h ==-1:\n   h=590923713\n  return h\n  \nSet.register(frozenset)\n\n\nclass MutableSet(Set):\n\n __slots__=()\n \n @abstractmethod\n def add(self,value):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def discard(self,value):\n  ''\n  raise NotImplementedError\n  \n def remove(self,value):\n  ''\n  if value not in self:\n   raise KeyError(value)\n  self.discard(value)\n  \n def pop(self):\n  ''\n  it=iter(self)\n  try :\n   value=next(it)\n  except StopIteration:\n   raise KeyError\n  self.discard(value)\n  return value\n  \n def clear(self):\n  ''\n  try :\n   while True :\n    self.pop()\n  except KeyError:\n   pass\n   \n def __ior__(self,it):\n  for value in it:\n   self.add(value)\n  return self\n  \n def __iand__(self,it):\n  for value in (self -it):\n   self.discard(value)\n  return self\n  \n def __ixor__(self,it):\n  if it is self:\n   self.clear()\n  else :\n   if not isinstance(it,Set):\n    it=self._from_iterable(it)\n   for value in it:\n    if value in self:\n     self.discard(value)\n    else :\n     self.add(value)\n  return self\n  \n def __isub__(self,it):\n  if it is self:\n   self.clear()\n  else :\n   for value in it:\n    self.discard(value)\n  return self\n  \nMutableSet.register(set)\n\n\n\n\n\nclass Mapping(Sized,Iterable,Container):\n\n __slots__=()\n \n @abstractmethod\n def __getitem__(self,key):\n  raise KeyError\n  \n def get(self,key,default=None ):\n  try :\n   return self[key]\n  except KeyError:\n   return default\n   \n def __contains__(self,key):\n  try :\n   self[key]\n  except KeyError:\n   return False\n  else :\n   return True\n   \n def keys(self):\n  return KeysView(self)\n  \n def items(self):\n  return ItemsView(self)\n  \n def values(self):\n  return ValuesView(self)\n  \n def __eq__(self,other):\n  if not isinstance(other,Mapping):\n   return NotImplemented\n  return dict(self.items())==dict(other.items())\n  \n def __ne__(self,other):\n  return not (self ==other)\n  \nMapping.register(mappingproxy)\n\n\nclass MappingView(Sized):\n\n def __init__(self,mapping):\n  self._mapping=mapping\n  \n def __len__(self):\n  return len(self._mapping)\n  \n def __repr__(self):\n  return'{0.__class__.__name__}({0._mapping!r})'.format(self)\n  \n  \nclass KeysView(MappingView,Set):\n\n @classmethod\n def _from_iterable(self,it):\n  return set(it)\n  \n def __contains__(self,key):\n  return key in self._mapping\n  \n def __iter__(self):\n  for key in self._mapping:\n   yield key\n   \nKeysView.register(dict_keys)\n\n\nclass ItemsView(MappingView,Set):\n\n @classmethod\n def _from_iterable(self,it):\n  return set(it)\n  \n def __contains__(self,item):\n  key,value=item\n  try :\n   v=self._mapping[key]\n  except KeyError:\n   return False\n  else :\n   return v ==value\n   \n def __iter__(self):\n  for key in self._mapping:\n   yield (key,self._mapping[key])\n   \nItemsView.register(dict_items)\n\n\nclass ValuesView(MappingView):\n\n def __contains__(self,value):\n  for key in self._mapping:\n   if value ==self._mapping[key]:\n    return True\n  return False\n  \n def __iter__(self):\n  for key in self._mapping:\n   yield self._mapping[key]\n   \nValuesView.register(dict_values)\n\n\nclass MutableMapping(Mapping):\n\n __slots__=()\n \n @abstractmethod\n def __setitem__(self,key,value):\n  raise KeyError\n  \n @abstractmethod\n def __delitem__(self,key):\n  raise KeyError\n  \n __marker=object()\n \n def pop(self,key,default=__marker):\n  try :\n   value=self[key]\n  except KeyError:\n   if default is self.__marker:\n    raise\n   return default\n  else :\n   del self[key]\n   return value\n   \n def popitem(self):\n  try :\n   key=next(iter(self))\n  except StopIteration:\n   raise KeyError\n  value=self[key]\n  del self[key]\n  return key,value\n  \n def clear(self):\n  try :\n   while True :\n    self.popitem()\n  except KeyError:\n   pass\n   \n def update(*args,**kwds):\n  if len(args)>2:\n   raise TypeError(\"update() takes at most 2 positional \"\n   \"arguments ({} given)\".format(len(args)))\n  elif not args:\n   raise TypeError(\"update() takes at least 1 argument (0 given)\")\n  self=args[0]\n  other=args[1]if len(args)>=2 else ()\n  \n  if isinstance(other,Mapping):\n   for key in other:\n    self[key]=other[key]\n  elif hasattr(other,\"keys\"):\n   for key in other.keys():\n    self[key]=other[key]\n  else :\n   for key,value in other:\n    self[key]=value\n  for key,value in kwds.items():\n   self[key]=value\n   \n def setdefault(self,key,default=None ):\n  try :\n   return self[key]\n  except KeyError:\n   self[key]=default\n  return default\n  \nMutableMapping.register(dict)\n\n\n\n\n\nclass Sequence(Sized,Iterable,Container):\n\n ''\n\n\n\n \n \n __slots__=()\n \n @abstractmethod\n def __getitem__(self,index):\n  raise IndexError\n  \n def __iter__(self):\n  i=0\n  try :\n   while True :\n    v=self[i]\n    yield v\n    i +=1\n  except IndexError:\n   return\n   \n def __contains__(self,value):\n  for v in self:\n   if v ==value:\n    return True\n  return False\n  \n def __reversed__(self):\n  for i in reversed(range(len(self))):\n   yield self[i]\n   \n def index(self,value):\n  for i,v in enumerate(self):\n   if v ==value:\n    return i\n  raise ValueError\n  \n def count(self,value):\n  return sum(1 for v in self if v ==value)\n  \nSequence.register(tuple)\nSequence.register(str)\nSequence.register(range)\n\n\nclass ByteString(Sequence):\n\n ''\n\n\n \n \n __slots__=()\n \nByteString.register(bytes)\nByteString.register(bytearray)\n\n\nclass MutableSequence(Sequence):\n\n __slots__=()\n \n @abstractmethod\n def __setitem__(self,index,value):\n  raise IndexError\n  \n @abstractmethod\n def __delitem__(self,index):\n  raise IndexError\n  \n @abstractmethod\n def insert(self,index,value):\n  raise IndexError\n  \n def append(self,value):\n  self.insert(len(self),value)\n  \n def clear(self):\n  try :\n   while True :\n    self.pop()\n  except IndexError:\n   pass\n   \n def reverse(self):\n  n=len(self)\n  for i in range(n //2):\n   self[i],self[n -i -1]=self[n -i -1],self[i]\n   \n def extend(self,values):\n  for v in values:\n   self.append(v)\n   \n def pop(self,index=-1):\n  v=self[index]\n  del self[index]\n  return v\n  \n def remove(self,value):\n  del self[self.index(value)]\n  \n def __iadd__(self,values):\n  self.extend(values)\n  return self\n  \nMutableSequence.register(list)\nMutableSequence.register(bytearray)\n"], "decimal": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\"\"\"\nThis is an implementation of decimal floating point arithmetic based on\nthe General Decimal Arithmetic Specification:\n\n    http://speleotrove.com/decimal/decarith.html\n\nand IEEE standard 854-1987:\n\n    http://en.wikipedia.org/wiki/IEEE_854-1987\n\nDecimal floating point has finite precision with arbitrarily large bounds.\n\nThe purpose of this module is to support arithmetic using familiar\n\"schoolhouse\" rules and to avoid some of the tricky representation\nissues associated with binary floating point.  The package is especially\nuseful for financial applications or for contexts where users have\nexpectations that are at odds with binary floating point (for instance,\nin binary floating point, 1.00 % 0.1 gives 0.09999999999999995 instead\nof 0.0; Decimal('1.00') % Decimal('0.1') returns the expected\nDecimal('0.00')).\n\nHere are some examples of using the decimal module:\n\n>>> from decimal import *\n>>> setcontext(ExtendedContext)\n>>> Decimal(0)\nDecimal('0')\n>>> Decimal('1')\nDecimal('1')\n>>> Decimal('-.0123')\nDecimal('-0.0123')\n>>> Decimal(123456)\nDecimal('123456')\n>>> Decimal('123.45e12345678')\nDecimal('1.2345E+12345680')\n>>> Decimal('1.33') + Decimal('1.27')\nDecimal('2.60')\n>>> Decimal('12.34') + Decimal('3.87') - Decimal('18.41')\nDecimal('-2.20')\n>>> dig = Decimal(1)\n>>> print(dig / Decimal(3))\n0.333333333\n>>> getcontext().prec = 18\n>>> print(dig / Decimal(3))\n0.333333333333333333\n>>> print(dig.sqrt())\n1\n>>> print(Decimal(3).sqrt())\n1.73205080756887729\n>>> print(Decimal(3) ** 123)\n4.85192780976896427E+58\n>>> inf = Decimal(1) / Decimal(0)\n>>> print(inf)\nInfinity\n>>> neginf = Decimal(-1) / Decimal(0)\n>>> print(neginf)\n-Infinity\n>>> print(neginf + inf)\nNaN\n>>> print(neginf * inf)\n-Infinity\n>>> print(dig / 0)\nInfinity\n>>> getcontext().traps[DivisionByZero] = 1\n>>> print(dig / 0)\nTraceback (most recent call last):\n  ...\n  ...\n  ...\ndecimal.DivisionByZero: x / 0\n>>> c = Context()\n>>> c.traps[InvalidOperation] = 0\n>>> print(c.flags[InvalidOperation])\n0\n>>> c.divide(Decimal(0), Decimal(0))\nDecimal('NaN')\n>>> c.traps[InvalidOperation] = 1\n>>> print(c.flags[InvalidOperation])\n1\n>>> c.flags[InvalidOperation] = 0\n>>> print(c.flags[InvalidOperation])\n0\n>>> print(c.divide(Decimal(0), Decimal(0)))\nTraceback (most recent call last):\n  ...\n  ...\n  ...\ndecimal.InvalidOperation: 0 / 0\n>>> print(c.flags[InvalidOperation])\n1\n>>> c.flags[InvalidOperation] = 0\n>>> c.traps[InvalidOperation] = 0\n>>> print(c.divide(Decimal(0), Decimal(0)))\nNaN\n>>> print(c.flags[InvalidOperation])\n1\n>>>\n\"\"\"\n\n__all__=[\n\n'Decimal','Context',\n\n\n'DefaultContext','BasicContext','ExtendedContext',\n\n\n'DecimalException','Clamped','InvalidOperation','DivisionByZero',\n'Inexact','Rounded','Subnormal','Overflow','Underflow',\n'FloatOperation',\n\n\n'ROUND_DOWN','ROUND_HALF_UP','ROUND_HALF_EVEN','ROUND_CEILING',\n'ROUND_FLOOR','ROUND_UP','ROUND_HALF_DOWN','ROUND_05UP',\n\n\n'setcontext','getcontext','localcontext',\n\n\n'MAX_PREC','MAX_EMAX','MIN_EMIN','MIN_ETINY',\n\n\n'HAVE_THREADS'\n]\n\n__version__='1.70'\n\n\nimport copy as _copy\nimport math as _math\nimport numbers as _numbers\nimport sys\n\ntry :\n from collections import namedtuple as _namedtuple\n DecimalTuple=_namedtuple('DecimalTuple','sign digits exponent')\nexcept ImportError:\n DecimalTuple=lambda *args:args\n \n \nROUND_DOWN='ROUND_DOWN'\nROUND_HALF_UP='ROUND_HALF_UP'\nROUND_HALF_EVEN='ROUND_HALF_EVEN'\nROUND_CEILING='ROUND_CEILING'\nROUND_FLOOR='ROUND_FLOOR'\nROUND_UP='ROUND_UP'\nROUND_HALF_DOWN='ROUND_HALF_DOWN'\nROUND_05UP='ROUND_05UP'\n\n\nHAVE_THREADS=True\nif sys.maxsize ==2 **63 -1:\n MAX_PREC=999999999999999999\n MAX_EMAX=999999999999999999\n MIN_EMIN=-999999999999999999\nelse :\n MAX_PREC=425000000\n MAX_EMAX=425000000\n MIN_EMIN=-425000000\n \nMIN_ETINY=MIN_EMIN -(MAX_PREC -1)\n\n\n\nclass DecimalException(ArithmeticError):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def handle(self,context,*args):\n  pass\n  \n  \nclass Clamped(DecimalException):\n ''\n\n\n\n\n\n\n\n\n \n \n \n pass\n \nclass InvalidOperation(DecimalException):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def handle(self,context,*args):\n  if args:\n   ans=_dec_from_triple(args[0]._sign,args[0]._int,'n',True )\n   return ans._fix_nan(context)\n  return _NaN\n  \nclass ConversionSyntax(InvalidOperation):\n ''\n\n\n\n\n \n def handle(self,context,*args):\n  return _NaN\n  \nclass DivisionByZero(DecimalException,ZeroDivisionError):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def handle(self,context,sign,*args):\n  return _SignedInfinity[sign]\n  \nclass DivisionImpossible(InvalidOperation):\n ''\n\n\n\n\n \n \n def handle(self,context,*args):\n  return _NaN\n  \nclass DivisionUndefined(InvalidOperation,ZeroDivisionError):\n ''\n\n\n\n\n \n \n def handle(self,context,*args):\n  return _NaN\n  \nclass Inexact(DecimalException):\n ''\n\n\n\n\n\n\n\n\n \n \n \n pass\n \nclass InvalidContext(InvalidOperation):\n ''\n\n\n\n\n\n\n\n \n \n def handle(self,context,*args):\n  return _NaN\n  \nclass Rounded(DecimalException):\n ''\n\n\n\n\n\n\n\n\n \n \n pass\n \nclass Subnormal(DecimalException):\n ''\n\n\n\n\n\n\n\n \n \n pass\n \nclass Overflow(Inexact,Rounded):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def handle(self,context,sign,*args):\n  if context.rounding in (ROUND_HALF_UP,ROUND_HALF_EVEN,\n  ROUND_HALF_DOWN,ROUND_UP):\n   return _SignedInfinity[sign]\n  if sign ==0:\n   if context.rounding ==ROUND_CEILING:\n    return _SignedInfinity[sign]\n   return _dec_from_triple(sign,'9'*context.prec,\n   context.Emax -context.prec+1)\n  if sign ==1:\n   if context.rounding ==ROUND_FLOOR:\n    return _SignedInfinity[sign]\n   return _dec_from_triple(sign,'9'*context.prec,\n   context.Emax -context.prec+1)\n   \n   \nclass Underflow(Inexact,Rounded,Subnormal):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n pass\n \nclass FloatOperation(DecimalException,TypeError):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n pass\n \n \n_signals=[Clamped,DivisionByZero,Inexact,Overflow,Rounded,\nUnderflow,InvalidOperation,Subnormal,FloatOperation]\n\n\n_condition_map={ConversionSyntax:InvalidOperation,\nDivisionImpossible:InvalidOperation,\nDivisionUndefined:InvalidOperation,\nInvalidContext:InvalidOperation}\n\n\n_rounding_modes=(ROUND_DOWN,ROUND_HALF_UP,ROUND_HALF_EVEN,ROUND_CEILING,\nROUND_FLOOR,ROUND_UP,ROUND_HALF_DOWN,ROUND_05UP)\n\n\n\n\n\n\n\n\n\ntry :\n import threading\nexcept ImportError:\n\n class MockThreading(object):\n  def local(self,sys=sys):\n   return sys.modules[__name__]\n threading=MockThreading()\n del MockThreading\n \ntry :\n threading.local\n \nexcept AttributeError:\n\n\n\n if hasattr(threading.current_thread(),'__decimal_context__'):\n  del threading.current_thread().__decimal_context__\n  \n def setcontext(context):\n  ''\n  if context in (DefaultContext,BasicContext,ExtendedContext):\n   context=context.copy()\n   context.clear_flags()\n  threading.current_thread().__decimal_context__=context\n  \n def getcontext():\n  ''\n\n\n\n\n  \n  try :\n   return threading.current_thread().__decimal_context__\n  except AttributeError:\n   context=Context()\n   threading.current_thread().__decimal_context__=context\n   return context\n   \nelse :\n\n local=threading.local()\n if hasattr(local,'__decimal_context__'):\n  del local.__decimal_context__\n  \n def getcontext(_local=local):\n  ''\n\n\n\n\n  \n  try :\n   return _local.__decimal_context__\n  except AttributeError:\n   context=Context()\n   _local.__decimal_context__=context\n   return context\n   \n def setcontext(context,_local=local):\n  ''\n  if context in (DefaultContext,BasicContext,ExtendedContext):\n   context=context.copy()\n   context.clear_flags()\n  _local.__decimal_context__=context\n  \n del threading,local\n \ndef localcontext(ctx=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if ctx is None :ctx=getcontext()\n return _ContextManager(ctx)\n \n \n \n \n \n \n \n \nclass Decimal(object):\n ''\n \n __slots__=('_exp','_int','_sign','_is_special')\n \n \n \n \n \n def __new__(cls,value=\"0\",context=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  self=object.__new__(cls)\n  \n  \n  \n  if isinstance(value,str):\n   value=value.strip().lower()\n   \n   if value.startswith(\"-\"):\n    self._sign=1\n    value=value[1:]\n   else :\n    self._sign=0\n    \n   if value in ('','nan'):\n    self._is_special=True\n    self._int=''\n    \n    \n    \n    \n    self._exp='n'\n    return self\n    \n   if value in ('inf','infinity'):\n    self._int='0'\n    self._exp='F'\n    self._is_special=True\n    return self\n    \n   import _jsre as re\n   _m=re.match(\"^\\d*\\.?\\d*(e\\+?\\d*)?$\",value)\n   if not _m:\n    self._is_special=True\n    self._int=''\n    self._exp='n'\n    return self\n    \n   if'.'in value:\n    intpart,fracpart=value.split('.')\n    if'e'in fracpart:\n     fracpart,exp=fracpart.split('e')\n     exp=int(exp)\n    else :\n     exp=0\n     \n     \n    self._int=intpart+fracpart\n    self._exp=exp -len(fracpart)\n    self._is_special=False\n    return self\n   else :\n   \n    self._is_special=False\n    if'e'in value:\n     self._int,_exp=value.split('e')\n     self._exp=int(_exp)\n     \n    else :\n     self._int=value\n     self._exp=0\n    return self\n    \n    \n    \n   if context is None :\n    context=getcontext()\n   return context._raise_error(ConversionSyntax,\n   \"Invalid literal for Decimal: %r\"%value)\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n  if isinstance(value,int):\n   if value >=0:\n    self._sign=0\n   else :\n    self._sign=1\n   self._exp=0\n   self._int=str(abs(value))\n   self._is_special=False\n   return self\n   \n   \n  if isinstance(value,Decimal):\n   self._exp=value._exp\n   self._sign=value._sign\n   self._int=value._int\n   self._is_special=value._is_special\n   return self\n   \n   \n  if isinstance(value,_WorkRep):\n   self._sign=value.sign\n   self._int=str(value.int)\n   self._exp=int(value.exp)\n   self._is_special=False\n   return self\n   \n   \n  if isinstance(value,(list,tuple)):\n   if len(value)!=3:\n    raise ValueError('Invalid tuple size in creation of Decimal '\n    'from list or tuple.  The list or tuple '\n    'should have exactly three elements.')\n    \n   if not (isinstance(value[0],int)and value[0]in (0,1)):\n    raise ValueError(\"Invalid sign.  The first value in the tuple \"\n    \"should be an integer; either 0 for a \"\n    \"positive number or 1 for a negative number.\")\n   self._sign=value[0]\n   if value[2]=='F':\n   \n    self._int='0'\n    self._exp=value[2]\n    self._is_special=True\n   else :\n   \n    digits=[]\n    for digit in value[1]:\n     if isinstance(digit,int)and 0 <=digit <=9:\n     \n      if digits or digit !=0:\n       digits.append(digit)\n     else :\n      raise ValueError(\"The second value in the tuple must \"\n      \"be composed of integers in the range \"\n      \"0 through 9.\")\n    if value[2]in ('n','N'):\n    \n     self._int=''.join(map(str,digits))\n     self._exp=value[2]\n     self._is_special=True\n    elif isinstance(value[2],int):\n    \n     self._int=''.join(map(str,digits or [0]))\n     self._exp=value[2]\n     self._is_special=False\n    else :\n     raise ValueError(\"The third value in the tuple must \"\n     \"be an integer, or one of the \"\n     \"strings 'F', 'n', 'N'.\")\n   return self\n   \n  if isinstance(value,float):\n   if context is None :\n    context=getcontext()\n   context._raise_error(FloatOperation,\n   \"strict semantics for mixing floats and Decimals are \"\n   \"enabled\")\n   value=Decimal.from_float(value)\n   self._exp=value._exp\n   self._sign=value._sign\n   self._int=value._int\n   self._is_special=value._is_special\n   return self\n   \n  raise TypeError(\"Cannot convert %r to Decimal\"%value)\n  \n  \n  \n def from_float(cls,f):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if isinstance(f,int):\n   return cls(f)\n  if not isinstance(f,float):\n   raise TypeError(\"argument must be int or float.\")\n  if _math.isinf(f)or _math.isnan(f):\n   return cls(repr(f))\n  if _math.copysign(1.0,f)==1.0:\n   sign=0\n  else :\n   sign=1\n  n,d=abs(f).as_integer_ratio()\n  k=d.bit_length()-1\n  result=_dec_from_triple(sign,str(n *5 **k),-k)\n  if cls is Decimal:\n   return result\n  else :\n   return cls(result)\n from_float=classmethod(from_float)\n \n def _isnan(self):\n  ''\n\n\n\n\n  \n  if self._is_special:\n   exp=self._exp\n   if exp =='n':\n    return 1\n   elif exp =='N':\n    return 2\n  return 0\n  \n def _isinfinity(self):\n  ''\n\n\n\n\n  \n  if self._exp =='F':\n   if self._sign:\n    return -1\n   return 1\n  return 0\n  \n def _check_nans(self,other=None ,context=None ):\n  ''\n\n\n\n\n\n\n  \n  \n  self_is_nan=self._isnan()\n  if other is None :\n   other_is_nan=False\n  else :\n   other_is_nan=other._isnan()\n   \n  if self_is_nan or other_is_nan:\n   if context is None :\n    context=getcontext()\n    \n   if self_is_nan ==2:\n    return context._raise_error(InvalidOperation,'sNaN',\n    self)\n   if other_is_nan ==2:\n    return context._raise_error(InvalidOperation,'sNaN',\n    other)\n   if self_is_nan:\n    return self._fix_nan(context)\n    \n   return other._fix_nan(context)\n  return 0\n  \n def _compare_check_nans(self,other,context):\n  ''\n\n\n\n\n\n\n\n\n  \n  if context is None :\n   context=getcontext()\n   \n  if self._is_special or other._is_special:\n   if self.is_snan():\n    return context._raise_error(InvalidOperation,\n    'comparison involving sNaN',\n    self)\n   elif other.is_snan():\n    return context._raise_error(InvalidOperation,\n    'comparison involving sNaN',\n    other)\n   elif self.is_qnan():\n    return context._raise_error(InvalidOperation,\n    'comparison involving NaN',\n    self)\n   elif other.is_qnan():\n    return context._raise_error(InvalidOperation,\n    'comparison involving NaN',\n    other)\n  return 0\n  \n def __bool__(self):\n  ''\n\n\n  \n  return self._is_special or self._int !='0'\n  \n def _cmp(self,other):\n  ''\n\n\n  \n  \n  if self._is_special or other._is_special:\n   self_inf=self._isinfinity()\n   other_inf=other._isinfinity()\n   if self_inf ==other_inf:\n    return 0\n   elif self_inf <other_inf:\n    return -1\n   else :\n    return 1\n    \n    \n  if not self:\n   if not other:\n    return 0\n   else :\n    return -((-1)**other._sign)\n  if not other:\n   return (-1)**self._sign\n   \n   \n  if other._sign <self._sign:\n   return -1\n  if self._sign <other._sign:\n   return 1\n   \n  self_adjusted=self.adjusted()\n  other_adjusted=other.adjusted()\n  if self_adjusted ==other_adjusted:\n   self_padded=self._int+'0'*(self._exp -other._exp)\n   other_padded=other._int+'0'*(other._exp -self._exp)\n   if self_padded ==other_padded:\n    return 0\n   elif self_padded <other_padded:\n    return -(-1)**self._sign\n   else :\n    return (-1)**self._sign\n  elif self_adjusted >other_adjusted:\n   return (-1)**self._sign\n  else :\n   return -((-1)**self._sign)\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n def __eq__(self,other,context=None ):\n  self,other=_convert_for_comparison(self,other,equality_op=True )\n  if other is NotImplemented:\n   return other\n  if self._check_nans(other,context):\n   return False\n  return self._cmp(other)==0\n  \n def __ne__(self,other,context=None ):\n  self,other=_convert_for_comparison(self,other,equality_op=True )\n  if other is NotImplemented:\n   return other\n  if self._check_nans(other,context):\n   return True\n  return self._cmp(other)!=0\n  \n  \n def __lt__(self,other,context=None ):\n  self,other=_convert_for_comparison(self,other)\n  if other is NotImplemented:\n   return other\n  ans=self._compare_check_nans(other,context)\n  if ans:\n   return False\n  return self._cmp(other)<0\n  \n def __le__(self,other,context=None ):\n  self,other=_convert_for_comparison(self,other)\n  if other is NotImplemented:\n   return other\n  ans=self._compare_check_nans(other,context)\n  if ans:\n   return False\n  return self._cmp(other)<=0\n  \n def __gt__(self,other,context=None ):\n  self,other=_convert_for_comparison(self,other)\n  if other is NotImplemented:\n   return other\n  ans=self._compare_check_nans(other,context)\n  if ans:\n   return False\n  return self._cmp(other)>0\n  \n def __ge__(self,other,context=None ):\n  self,other=_convert_for_comparison(self,other)\n  if other is NotImplemented:\n   return other\n  ans=self._compare_check_nans(other,context)\n  if ans:\n   return False\n  return self._cmp(other)>=0\n  \n def compare(self,other,context=None ):\n  ''\n\n\n\n\n\n\n  \n  other=_convert_other(other,raiseit=True )\n  \n  \n  if (self._is_special or other and other._is_special):\n   ans=self._check_nans(other,context)\n   if ans:\n    return ans\n    \n  return Decimal(self._cmp(other))\n  \n def __hash__(self):\n  ''\n  \n  \n  \n  \n  \n  if self._is_special:\n   if self.is_snan():\n    raise TypeError('Cannot hash a signaling NaN value.')\n   elif self.is_nan():\n    return _PyHASH_NAN\n   else :\n    if self._sign:\n     return -_PyHASH_INF\n    else :\n     return _PyHASH_INF\n     \n  if self._exp >=0:\n   exp_hash=pow(10,self._exp,_PyHASH_MODULUS)\n  else :\n   exp_hash=pow(_PyHASH_10INV,-self._exp,_PyHASH_MODULUS)\n  hash_=int(self._int)*exp_hash %_PyHASH_MODULUS\n  ans=hash_ if self >=0 else -hash_\n  return -2 if ans ==-1 else ans\n  \n def as_tuple(self):\n  ''\n\n\n  \n  return DecimalTuple(self._sign,tuple(map(int,self._int)),self._exp)\n  \n def __repr__(self):\n  ''\n  \n  return\"Decimal('%s')\"%str(self)\n  \n def __str__(self,eng=False ,context=None ):\n  ''\n\n\n  \n  \n  sign=['','-'][self._sign]\n  if self._is_special:\n   if self._exp =='F':\n    return sign+'Infinity'\n   elif self._exp =='n':\n    return sign+'NaN'+self._int\n   else :\n    return sign+'sNaN'+self._int\n    \n    \n  leftdigits=self._exp+len(self._int)\n  \n  \n  \n  \n  if self._exp <=0 and leftdigits >-6:\n  \n   dotplace=leftdigits\n  elif not eng:\n  \n   dotplace=1\n  elif self._int =='0':\n  \n   dotplace=(leftdigits+1)%3 -1\n  else :\n  \n   dotplace=(leftdigits -1)%3+1\n   \n  if dotplace <=0:\n   intpart='0'\n   fracpart='.'+'0'*(-dotplace)+self._int\n  elif dotplace >=len(self._int):\n   intpart=self._int+'0'*(dotplace -len(self._int))\n   fracpart=''\n  else :\n   intpart=self._int[:dotplace]\n   fracpart='.'+self._int[dotplace:]\n  if leftdigits ==dotplace:\n   exp=''\n  else :\n   if context is None :\n    context=getcontext()\n   exp=['e','E'][context.capitals]+\"%+d\"%(leftdigits -dotplace)\n   \n  return sign+intpart+fracpart+exp\n  \n def to_eng_string(self,context=None ):\n  ''\n\n\n\n\n\n  \n  return self.__str__(eng=True ,context=context)\n  \n def __neg__(self,context=None ):\n  ''\n\n\n  \n  if self._is_special:\n   ans=self._check_nans(context=context)\n   if ans:\n    return ans\n    \n  if context is None :\n   context=getcontext()\n   \n  if not self and context.rounding !=ROUND_FLOOR:\n  \n  \n   ans=self.copy_abs()\n  else :\n   ans=self.copy_negate()\n   \n  return ans._fix(context)\n  \n def __pos__(self,context=None ):\n  ''\n\n\n  \n  if self._is_special:\n   ans=self._check_nans(context=context)\n   if ans:\n    return ans\n    \n  if context is None :\n   context=getcontext()\n   \n  if not self and context.rounding !=ROUND_FLOOR:\n  \n   ans=self.copy_abs()\n  else :\n   ans=Decimal(self)\n   \n  return ans._fix(context)\n  \n def __abs__(self,round=True ,context=None ):\n  ''\n\n\n\n\n  \n  if not round:\n   return self.copy_abs()\n   \n  if self._is_special:\n   ans=self._check_nans(context=context)\n   if ans:\n    return ans\n    \n  if self._sign:\n   ans=self.__neg__(context=context)\n  else :\n   ans=self.__pos__(context=context)\n   \n  return ans\n  \n def __add__(self,other,context=None ):\n  ''\n\n\n  \n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n   \n  if context is None :\n   context=getcontext()\n   \n  if self._is_special or other._is_special:\n   ans=self._check_nans(other,context)\n   if ans:\n    return ans\n    \n   if self._isinfinity():\n   \n    if self._sign !=other._sign and other._isinfinity():\n     return context._raise_error(InvalidOperation,'-INF + INF')\n    return Decimal(self)\n   if other._isinfinity():\n    return Decimal(other)\n    \n  exp=min(self._exp,other._exp)\n  negativezero=0\n  if context.rounding ==ROUND_FLOOR and self._sign !=other._sign:\n  \n   negativezero=1\n   \n  if not self and not other:\n   sign=min(self._sign,other._sign)\n   if negativezero:\n    sign=1\n   ans=_dec_from_triple(sign,'0',exp)\n   ans=ans._fix(context)\n   return ans\n  if not self:\n   exp=max(exp,other._exp -context.prec -1)\n   ans=other._rescale(exp,context.rounding)\n   ans=ans._fix(context)\n   return ans\n  if not other:\n   exp=max(exp,self._exp -context.prec -1)\n   ans=self._rescale(exp,context.rounding)\n   ans=ans._fix(context)\n   return ans\n   \n  op1=_WorkRep(self)\n  op2=_WorkRep(other)\n  op1,op2=_normalize(op1,op2,context.prec)\n  \n  result=_WorkRep()\n  if op1.sign !=op2.sign:\n  \n   if op1.int ==op2.int:\n    ans=_dec_from_triple(negativezero,'0',exp)\n    ans=ans._fix(context)\n    return ans\n   if op1.int <op2.int:\n    op1,op2=op2,op1\n    \n   if op1.sign ==1:\n    result.sign=1\n    op1.sign,op2.sign=op2.sign,op1.sign\n   else :\n    result.sign=0\n    \n  elif op1.sign ==1:\n   result.sign=1\n   op1.sign,op2.sign=(0,0)\n  else :\n   result.sign=0\n   \n   \n  if op2.sign ==0:\n   result.int=op1.int+op2.int\n  else :\n   result.int=op1.int -op2.int\n   \n  result.exp=op1.exp\n  ans=Decimal(result)\n  ans=ans._fix(context)\n  return ans\n  \n __radd__=__add__\n \n def __sub__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n   \n  if self._is_special or other._is_special:\n   ans=self._check_nans(other,context=context)\n   if ans:\n    return ans\n    \n    \n  return self.__add__(other.copy_negate(),context=context)\n  \n def __rsub__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n   \n  return other.__sub__(self,context=context)\n  \n def __mul__(self,other,context=None ):\n  ''\n\n\n  \n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n   \n  if context is None :\n   context=getcontext()\n   \n  resultsign=self._sign ^other._sign\n  \n  if self._is_special or other._is_special:\n   ans=self._check_nans(other,context)\n   if ans:\n    return ans\n    \n   if self._isinfinity():\n    if not other:\n     return context._raise_error(InvalidOperation,'(+-)INF * 0')\n    return _SignedInfinity[resultsign]\n    \n   if other._isinfinity():\n    if not self:\n     return context._raise_error(InvalidOperation,'0 * (+-)INF')\n    return _SignedInfinity[resultsign]\n    \n  resultexp=self._exp+other._exp\n  \n  \n  if not self or not other:\n   ans=_dec_from_triple(resultsign,'0',resultexp)\n   \n   ans=ans._fix(context)\n   return ans\n   \n   \n  if self._int =='1':\n   ans=_dec_from_triple(resultsign,other._int,resultexp)\n   ans=ans._fix(context)\n   return ans\n  if other._int =='1':\n   ans=_dec_from_triple(resultsign,self._int,resultexp)\n   ans=ans._fix(context)\n   return ans\n   \n  op1=_WorkRep(self)\n  op2=_WorkRep(other)\n  \n  ans=_dec_from_triple(resultsign,str(op1.int *op2.int),resultexp)\n  ans=ans._fix(context)\n  \n  return ans\n __rmul__=__mul__\n \n def __truediv__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return NotImplemented\n   \n  if context is None :\n   context=getcontext()\n   \n  sign=self._sign ^other._sign\n  \n  if self._is_special or other._is_special:\n   ans=self._check_nans(other,context)\n   if ans:\n    return ans\n    \n   if self._isinfinity()and other._isinfinity():\n    return context._raise_error(InvalidOperation,'(+-)INF/(+-)INF')\n    \n   if self._isinfinity():\n    return _SignedInfinity[sign]\n    \n   if other._isinfinity():\n    context._raise_error(Clamped,'Division by infinity')\n    return _dec_from_triple(sign,'0',context.Etiny())\n    \n    \n  if not other:\n   if not self:\n    return context._raise_error(DivisionUndefined,'0 / 0')\n   return context._raise_error(DivisionByZero,'x / 0',sign)\n   \n  if not self:\n   exp=self._exp -other._exp\n   coeff=0\n  else :\n  \n   shift=len(other._int)-len(self._int)+context.prec+1\n   exp=self._exp -other._exp -shift\n   op1=_WorkRep(self)\n   op2=_WorkRep(other)\n   if shift >=0:\n    coeff,remainder=divmod(op1.int *10 **shift,op2.int)\n   else :\n    coeff,remainder=divmod(op1.int,op2.int *10 **-shift)\n   if remainder:\n   \n    if coeff %5 ==0:\n     coeff +=1\n   else :\n   \n    ideal_exp=self._exp -other._exp\n    while exp <ideal_exp and coeff %10 ==0:\n     coeff //=10\n     exp +=1\n     \n  ans=_dec_from_triple(sign,str(coeff),exp)\n  return ans._fix(context)\n  \n def _divide(self,other,context):\n  ''\n\n\n\n  \n  sign=self._sign ^other._sign\n  if other._isinfinity():\n   ideal_exp=self._exp\n  else :\n   ideal_exp=min(self._exp,other._exp)\n   \n  expdiff=self.adjusted()-other.adjusted()\n  if not self or other._isinfinity()or expdiff <=-2:\n   return (_dec_from_triple(sign,'0',0),\n   self._rescale(ideal_exp,context.rounding))\n  if expdiff <=context.prec:\n   op1=_WorkRep(self)\n   op2=_WorkRep(other)\n   if op1.exp >=op2.exp:\n    op1.int *=10 **(op1.exp -op2.exp)\n   else :\n    op2.int *=10 **(op2.exp -op1.exp)\n   q,r=divmod(op1.int,op2.int)\n   if q <10 **context.prec:\n    return (_dec_from_triple(sign,str(q),0),\n    _dec_from_triple(self._sign,str(r),ideal_exp))\n    \n    \n  ans=context._raise_error(DivisionImpossible,\n  'quotient too large in //, % or divmod')\n  return ans,ans\n  \n def __rtruediv__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n  return other.__truediv__(self,context=context)\n  \n def __divmod__(self,other,context=None ):\n  ''\n\n  \n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n   \n  if context is None :\n   context=getcontext()\n   \n  ans=self._check_nans(other,context)\n  if ans:\n   return (ans,ans)\n   \n  sign=self._sign ^other._sign\n  if self._isinfinity():\n   if other._isinfinity():\n    ans=context._raise_error(InvalidOperation,'divmod(INF, INF)')\n    return ans,ans\n   else :\n    return (_SignedInfinity[sign],\n    context._raise_error(InvalidOperation,'INF % x'))\n    \n  if not other:\n   if not self:\n    ans=context._raise_error(DivisionUndefined,'divmod(0, 0)')\n    return ans,ans\n   else :\n    return (context._raise_error(DivisionByZero,'x // 0',sign),\n    context._raise_error(InvalidOperation,'x % 0'))\n    \n  quotient,remainder=self._divide(other,context)\n  remainder=remainder._fix(context)\n  return quotient,remainder\n  \n def __rdivmod__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n  return other.__divmod__(self,context=context)\n  \n def __mod__(self,other,context=None ):\n  ''\n\n  \n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n   \n  if context is None :\n   context=getcontext()\n   \n  ans=self._check_nans(other,context)\n  if ans:\n   return ans\n   \n  if self._isinfinity():\n   return context._raise_error(InvalidOperation,'INF % x')\n  elif not other:\n   if self:\n    return context._raise_error(InvalidOperation,'x % 0')\n   else :\n    return context._raise_error(DivisionUndefined,'0 % 0')\n    \n  remainder=self._divide(other,context)[1]\n  remainder=remainder._fix(context)\n  return remainder\n  \n def __rmod__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n  return other.__mod__(self,context=context)\n  \n def remainder_near(self,other,context=None ):\n  ''\n\n  \n  if context is None :\n   context=getcontext()\n   \n  other=_convert_other(other,raiseit=True )\n  \n  ans=self._check_nans(other,context)\n  if ans:\n   return ans\n   \n   \n  if self._isinfinity():\n   return context._raise_error(InvalidOperation,\n   'remainder_near(infinity, x)')\n   \n   \n  if not other:\n   if self:\n    return context._raise_error(InvalidOperation,\n    'remainder_near(x, 0)')\n   else :\n    return context._raise_error(DivisionUndefined,\n    'remainder_near(0, 0)')\n    \n    \n  if other._isinfinity():\n   ans=Decimal(self)\n   return ans._fix(context)\n   \n   \n  ideal_exponent=min(self._exp,other._exp)\n  if not self:\n   ans=_dec_from_triple(self._sign,'0',ideal_exponent)\n   return ans._fix(context)\n   \n   \n  expdiff=self.adjusted()-other.adjusted()\n  if expdiff >=context.prec+1:\n  \n   return context._raise_error(DivisionImpossible)\n  if expdiff <=-2:\n  \n   ans=self._rescale(ideal_exponent,context.rounding)\n   return ans._fix(context)\n   \n   \n  op1=_WorkRep(self)\n  op2=_WorkRep(other)\n  if op1.exp >=op2.exp:\n   op1.int *=10 **(op1.exp -op2.exp)\n  else :\n   op2.int *=10 **(op2.exp -op1.exp)\n  q,r=divmod(op1.int,op2.int)\n  \n  \n  \n  if 2 *r+(q&1)>op2.int:\n   r -=op2.int\n   q +=1\n   \n  if q >=10 **context.prec:\n   return context._raise_error(DivisionImpossible)\n   \n   \n  sign=self._sign\n  if r <0:\n   sign=1 -sign\n   r=-r\n   \n  ans=_dec_from_triple(sign,str(r),ideal_exponent)\n  return ans._fix(context)\n  \n def __floordiv__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n   \n  if context is None :\n   context=getcontext()\n   \n  ans=self._check_nans(other,context)\n  if ans:\n   return ans\n   \n  if self._isinfinity():\n   if other._isinfinity():\n    return context._raise_error(InvalidOperation,'INF // INF')\n   else :\n    return _SignedInfinity[self._sign ^other._sign]\n    \n  if not other:\n   if self:\n    return context._raise_error(DivisionByZero,'x // 0',\n    self._sign ^other._sign)\n   else :\n    return context._raise_error(DivisionUndefined,'0 // 0')\n    \n  return self._divide(other,context)[0]\n  \n def __rfloordiv__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n  return other.__floordiv__(self,context=context)\n  \n def __float__(self):\n  ''\n  if self._isnan():\n   if self.is_snan():\n    raise ValueError(\"Cannot convert signaling NaN to float\")\n   s=\"-nan\"if self._sign else\"nan\"\n  else :\n   s=str(self)\n  return float(s)\n  \n def __int__(self):\n  ''\n  if self._is_special:\n   if self._isnan():\n    raise ValueError(\"Cannot convert NaN to integer\")\n   elif self._isinfinity():\n    raise OverflowError(\"Cannot convert infinity to integer\")\n  s=(-1)**self._sign\n  if self._exp >=0:\n   return s *int(self._int)*10 **self._exp\n  else :\n   return s *int(self._int[:self._exp]or'0')\n   \n __trunc__=__int__\n \n def real(self):\n  return self\n real=property(real)\n \n def imag(self):\n  return Decimal(0)\n imag=property(imag)\n \n def conjugate(self):\n  return self\n  \n def __complex__(self):\n  return complex(float(self))\n  \n def _fix_nan(self,context):\n  ''\n  payload=self._int\n  \n  \n  \n  max_payload_len=context.prec -context.clamp\n  if len(payload)>max_payload_len:\n   payload=payload[len(payload)-max_payload_len:].lstrip('0')\n   return _dec_from_triple(self._sign,payload,self._exp,True )\n  return Decimal(self)\n  \n def _fix(self,context):\n  ''\n\n\n\n\n\n\n  \n  \n  if self._is_special:\n   if self._isnan():\n   \n    return self._fix_nan(context)\n   else :\n   \n    return Decimal(self)\n    \n    \n    \n  Etiny=context.Etiny()\n  Etop=context.Etop()\n  if not self:\n   exp_max=[context.Emax,Etop][context.clamp]\n   new_exp=min(max(self._exp,Etiny),exp_max)\n   if new_exp !=self._exp:\n    context._raise_error(Clamped)\n    return _dec_from_triple(self._sign,'0',new_exp)\n   else :\n    return Decimal(self)\n    \n    \n    \n  exp_min=len(self._int)+self._exp -context.prec\n  if exp_min >Etop:\n  \n   ans=context._raise_error(Overflow,'above Emax',self._sign)\n   context._raise_error(Inexact)\n   context._raise_error(Rounded)\n   return ans\n   \n  self_is_subnormal=exp_min <Etiny\n  if self_is_subnormal:\n   exp_min=Etiny\n   \n   \n  if self._exp <exp_min:\n   digits=len(self._int)+self._exp -exp_min\n   if digits <0:\n    self=_dec_from_triple(self._sign,'1',exp_min -1)\n    digits=0\n   rounding_method=self._pick_rounding_function[context.rounding]\n   changed=rounding_method(self,digits)\n   coeff=self._int[:digits]or'0'\n   if changed >0:\n    coeff=str(int(coeff)+1)\n    if len(coeff)>context.prec:\n     coeff=coeff[:-1]\n     exp_min +=1\n     \n     \n   if exp_min >Etop:\n    ans=context._raise_error(Overflow,'above Emax',self._sign)\n   else :\n    ans=_dec_from_triple(self._sign,coeff,exp_min)\n    \n    \n    \n   if changed and self_is_subnormal:\n    context._raise_error(Underflow)\n   if self_is_subnormal:\n    context._raise_error(Subnormal)\n   if changed:\n    context._raise_error(Inexact)\n   context._raise_error(Rounded)\n   if not ans:\n   \n    context._raise_error(Clamped)\n   return ans\n   \n  if self_is_subnormal:\n   context._raise_error(Subnormal)\n   \n   \n  if context.clamp ==1 and self._exp >Etop:\n   context._raise_error(Clamped)\n   self_padded=self._int+'0'*(self._exp -Etop)\n   return _dec_from_triple(self._sign,self_padded,Etop)\n   \n   \n  return Decimal(self)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def _round_down(self,prec):\n  ''\n  if _all_zeros(self._int,prec):\n   return 0\n  else :\n   return -1\n   \n def _round_up(self,prec):\n  ''\n  return -self._round_down(prec)\n  \n def _round_half_up(self,prec):\n  ''\n  if self._int[prec]in'56789':\n   return 1\n  elif _all_zeros(self._int,prec):\n   return 0\n  else :\n   return -1\n   \n def _round_half_down(self,prec):\n  ''\n  if _exact_half(self._int,prec):\n   return -1\n  else :\n   return self._round_half_up(prec)\n   \n def _round_half_even(self,prec):\n  ''\n  if _exact_half(self._int,prec)and  (prec ==0 or self._int[prec -1]in'02468'):\n   return -1\n  else :\n   return self._round_half_up(prec)\n   \n def _round_ceiling(self,prec):\n  ''\n  if self._sign:\n   return self._round_down(prec)\n  else :\n   return -self._round_down(prec)\n   \n def _round_floor(self,prec):\n  ''\n  if not self._sign:\n   return self._round_down(prec)\n  else :\n   return -self._round_down(prec)\n   \n def _round_05up(self,prec):\n  ''\n  if prec and self._int[prec -1]not in'05':\n   return self._round_down(prec)\n  else :\n   return -self._round_down(prec)\n   \n _pick_rounding_function=dict(\n ROUND_DOWN=_round_down,\n ROUND_UP=_round_up,\n ROUND_HALF_UP=_round_half_up,\n ROUND_HALF_DOWN=_round_half_down,\n ROUND_HALF_EVEN=_round_half_even,\n ROUND_CEILING=_round_ceiling,\n ROUND_FLOOR=_round_floor,\n ROUND_05UP=_round_05up,\n )\n \n def __round__(self,n=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if n is not None :\n  \n   if not isinstance(n,int):\n    raise TypeError('Second argument to round should be integral')\n   exp=_dec_from_triple(0,'1',-n)\n   return self.quantize(exp)\n   \n   \n  if self._is_special:\n   if self.is_nan():\n    raise ValueError(\"cannot round a NaN\")\n   else :\n    raise OverflowError(\"cannot round an infinity\")\n  return int(self._rescale(0,ROUND_HALF_EVEN))\n  \n def __floor__(self):\n  ''\n\n\n\n\n\n  \n  if self._is_special:\n   if self.is_nan():\n    raise ValueError(\"cannot round a NaN\")\n   else :\n    raise OverflowError(\"cannot round an infinity\")\n  return int(self._rescale(0,ROUND_FLOOR))\n  \n def __ceil__(self):\n  ''\n\n\n\n\n\n  \n  if self._is_special:\n   if self.is_nan():\n    raise ValueError(\"cannot round a NaN\")\n   else :\n    raise OverflowError(\"cannot round an infinity\")\n  return int(self._rescale(0,ROUND_CEILING))\n  \n def fma(self,other,third,context=None ):\n  ''\n\n\n\n\n\n\n\n  \n  \n  other=_convert_other(other,raiseit=True )\n  third=_convert_other(third,raiseit=True )\n  \n  \n  \n  if self._is_special or other._is_special:\n   if context is None :\n    context=getcontext()\n   if self._exp =='N':\n    return context._raise_error(InvalidOperation,'sNaN',self)\n   if other._exp =='N':\n    return context._raise_error(InvalidOperation,'sNaN',other)\n   if self._exp =='n':\n    product=self\n   elif other._exp =='n':\n    product=other\n   elif self._exp =='F':\n    if not other:\n     return context._raise_error(InvalidOperation,\n     'INF * 0 in fma')\n    product=_SignedInfinity[self._sign ^other._sign]\n   elif other._exp =='F':\n    if not self:\n     return context._raise_error(InvalidOperation,\n     '0 * INF in fma')\n    product=_SignedInfinity[self._sign ^other._sign]\n  else :\n   product=_dec_from_triple(self._sign ^other._sign,\n   str(int(self._int)*int(other._int)),\n   self._exp+other._exp)\n   \n  return product.__add__(third,context)\n  \n def _power_modulo(self,other,modulo,context=None ):\n  ''\n  \n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n  modulo=_convert_other(modulo)\n  if modulo is NotImplemented:\n   return modulo\n   \n  if context is None :\n   context=getcontext()\n   \n   \n   \n  self_is_nan=self._isnan()\n  other_is_nan=other._isnan()\n  modulo_is_nan=modulo._isnan()\n  if self_is_nan or other_is_nan or modulo_is_nan:\n   if self_is_nan ==2:\n    return context._raise_error(InvalidOperation,'sNaN',\n    self)\n   if other_is_nan ==2:\n    return context._raise_error(InvalidOperation,'sNaN',\n    other)\n   if modulo_is_nan ==2:\n    return context._raise_error(InvalidOperation,'sNaN',\n    modulo)\n   if self_is_nan:\n    return self._fix_nan(context)\n   if other_is_nan:\n    return other._fix_nan(context)\n   return modulo._fix_nan(context)\n   \n   \n  if not (self._isinteger()and\n  other._isinteger()and\n  modulo._isinteger()):\n   return context._raise_error(InvalidOperation,\n   'pow() 3rd argument not allowed '\n   'unless all arguments are integers')\n  if other <0:\n   return context._raise_error(InvalidOperation,\n   'pow() 2nd argument cannot be '\n   'negative when 3rd argument specified')\n  if not modulo:\n   return context._raise_error(InvalidOperation,\n   'pow() 3rd argument cannot be 0')\n   \n   \n   \n  if modulo.adjusted()>=context.prec:\n   return context._raise_error(InvalidOperation,\n   'insufficient precision: pow() 3rd '\n   'argument must not have more than '\n   'precision digits')\n   \n   \n   \n  if not other and not self:\n   return context._raise_error(InvalidOperation,\n   'at least one of pow() 1st argument '\n   'and 2nd argument must be nonzero ;'\n   '0**0 is not defined')\n   \n   \n  if other._iseven():\n   sign=0\n  else :\n   sign=self._sign\n   \n   \n   \n  modulo=abs(int(modulo))\n  base=_WorkRep(self.to_integral_value())\n  exponent=_WorkRep(other.to_integral_value())\n  \n  \n  base=(base.int %modulo *pow(10,base.exp,modulo))%modulo\n  for i in range(exponent.exp):\n   base=pow(base,10,modulo)\n  base=pow(base,exponent.int,modulo)\n  \n  return _dec_from_triple(sign,str(base),0)\n  \n def _power_exact(self,other,p):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  x=_WorkRep(self)\n  xc,xe=x.int,x.exp\n  while xc %10 ==0:\n   xc //=10\n   xe +=1\n   \n  y=_WorkRep(other)\n  yc,ye=y.int,y.exp\n  while yc %10 ==0:\n   yc //=10\n   ye +=1\n   \n   \n   \n  if xc ==1:\n   xe *=yc\n   \n   while xe %10 ==0:\n    xe //=10\n    ye +=1\n   if ye <0:\n    return None\n   exponent=xe *10 **ye\n   if y.sign ==1:\n    exponent=-exponent\n    \n   if other._isinteger()and other._sign ==0:\n    ideal_exponent=self._exp *int(other)\n    zeros=min(exponent -ideal_exponent,p -1)\n   else :\n    zeros=0\n   return _dec_from_triple(0,'1'+'0'*zeros,exponent -zeros)\n   \n   \n   \n  if y.sign ==1:\n   last_digit=xc %10\n   if last_digit in (2,4,6,8):\n   \n    if xc&-xc !=xc:\n     return None\n     \n    e=_nbits(xc)-1\n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    emax=p *93 //65\n    if ye >=len(str(emax)):\n     return None\n     \n     \n    e=_decimal_lshift_exact(e *yc,ye)\n    xe=_decimal_lshift_exact(xe *yc,ye)\n    if e is None or xe is None :\n     return None\n     \n    if e >emax:\n     return None\n    xc=5 **e\n    \n   elif last_digit ==5:\n   \n   \n    e=_nbits(xc)*28 //65\n    xc,remainder=divmod(5 **e,xc)\n    if remainder:\n     return None\n    while xc %5 ==0:\n     xc //=5\n     e -=1\n     \n     \n     \n     \n    emax=p *10 //3\n    if ye >=len(str(emax)):\n     return None\n     \n    e=_decimal_lshift_exact(e *yc,ye)\n    xe=_decimal_lshift_exact(xe *yc,ye)\n    if e is None or xe is None :\n     return None\n     \n    if e >emax:\n     return None\n    xc=2 **e\n   else :\n    return None\n    \n   if xc >=10 **p:\n    return None\n   xe=-e -xe\n   return _dec_from_triple(0,str(xc),xe)\n   \n   \n  if ye >=0:\n   m,n=yc *10 **ye,1\n  else :\n   if xe !=0 and len(str(abs(yc *xe)))<=-ye:\n    return None\n   xc_bits=_nbits(xc)\n   if xc !=1 and len(str(abs(yc)*xc_bits))<=-ye:\n    return None\n   m,n=yc,10 **(-ye)\n   while m %2 ==n %2 ==0:\n    m //=2\n    n //=2\n   while m %5 ==n %5 ==0:\n    m //=5\n    n //=5\n    \n    \n  if n >1:\n  \n   if xc !=1 and xc_bits <=n:\n    return None\n    \n   xe,rem=divmod(xe,n)\n   if rem !=0:\n    return None\n    \n    \n   a=1 <<-(-_nbits(xc)//n)\n   while True :\n    q,r=divmod(xc,a **(n -1))\n    if a <=q:\n     break\n    else :\n     a=(a *(n -1)+q)//n\n   if not (a ==q and r ==0):\n    return None\n   xc=a\n   \n   \n   \n   \n   \n   \n  if xc >1 and m >p *100 //_log10_lb(xc):\n   return None\n  xc=xc **m\n  xe *=m\n  if xc >10 **p:\n   return None\n   \n   \n   \n   \n  str_xc=str(xc)\n  if other._isinteger()and other._sign ==0:\n   ideal_exponent=self._exp *int(other)\n   zeros=min(xe -ideal_exponent,p -len(str_xc))\n  else :\n   zeros=0\n  return _dec_from_triple(0,str_xc+'0'*zeros,xe -zeros)\n  \n def __pow__(self,other,modulo=None ,context=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if modulo is not None :\n   return self._power_modulo(other,modulo,context)\n   \n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n   \n  if context is None :\n   context=getcontext()\n   \n   \n  ans=self._check_nans(other,context)\n  if ans:\n   return ans\n   \n   \n  if not other:\n   if not self:\n    return context._raise_error(InvalidOperation,'0 ** 0')\n   else :\n    return _One\n    \n    \n  result_sign=0\n  if self._sign ==1:\n   if other._isinteger():\n    if not other._iseven():\n     result_sign=1\n   else :\n   \n   \n    if self:\n     return context._raise_error(InvalidOperation,\n     'x ** y with x negative and y not an integer')\n     \n   self=self.copy_negate()\n   \n   \n  if not self:\n   if other._sign ==0:\n    return _dec_from_triple(result_sign,'0',0)\n   else :\n    return _SignedInfinity[result_sign]\n    \n    \n  if self._isinfinity():\n   if other._sign ==0:\n    return _SignedInfinity[result_sign]\n   else :\n    return _dec_from_triple(result_sign,'0',0)\n    \n    \n    \n    \n  if self ==_One:\n   if other._isinteger():\n   \n   \n   \n   \n    if other._sign ==1:\n     multiplier=0\n    elif other >context.prec:\n     multiplier=context.prec\n    else :\n     multiplier=int(other)\n     \n    exp=self._exp *multiplier\n    if exp <1 -context.prec:\n     exp=1 -context.prec\n     context._raise_error(Rounded)\n   else :\n    context._raise_error(Inexact)\n    context._raise_error(Rounded)\n    exp=1 -context.prec\n    \n   return _dec_from_triple(result_sign,'1'+'0'*-exp,exp)\n   \n   \n  self_adj=self.adjusted()\n  \n  \n  \n  if other._isinfinity():\n   if (other._sign ==0)==(self_adj <0):\n    return _dec_from_triple(result_sign,'0',0)\n   else :\n    return _SignedInfinity[result_sign]\n    \n    \n    \n  ans=None\n  exact=False\n  \n  \n  \n  \n  \n  \n  bound=self._log10_exp_bound()+other.adjusted()\n  if (self_adj >=0)==(other._sign ==0):\n  \n  \n   if bound >=len(str(context.Emax)):\n    ans=_dec_from_triple(result_sign,'1',context.Emax+1)\n  else :\n  \n  \n   Etiny=context.Etiny()\n   if bound >=len(str(-Etiny)):\n    ans=_dec_from_triple(result_sign,'1',Etiny -1)\n    \n    \n  if ans is None :\n   ans=self._power_exact(other,context.prec+1)\n   if ans is not None :\n    if result_sign ==1:\n     ans=_dec_from_triple(1,ans._int,ans._exp)\n    exact=True\n    \n    \n  if ans is None :\n   p=context.prec\n   x=_WorkRep(self)\n   xc,xe=x.int,x.exp\n   y=_WorkRep(other)\n   yc,ye=y.int,y.exp\n   if y.sign ==1:\n    yc=-yc\n    \n    \n    \n   extra=3\n   while True :\n    coeff,exp=_dpower(xc,xe,yc,ye,p+extra)\n    if coeff %(5 *10 **(len(str(coeff))-p -1)):\n     break\n    extra +=3\n    \n   ans=_dec_from_triple(result_sign,str(coeff),exp)\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n  if exact and not other._isinteger():\n  \n  \n   if len(ans._int)<=context.prec:\n    expdiff=context.prec+1 -len(ans._int)\n    ans=_dec_from_triple(ans._sign,ans._int+'0'*expdiff,\n    ans._exp -expdiff)\n    \n    \n   newcontext=context.copy()\n   newcontext.clear_flags()\n   for exception in _signals:\n    newcontext.traps[exception]=0\n    \n    \n   ans=ans._fix(newcontext)\n   \n   \n   newcontext._raise_error(Inexact)\n   if newcontext.flags[Subnormal]:\n    newcontext._raise_error(Underflow)\n    \n    \n    \n    \n    \n    \n   if newcontext.flags[Overflow]:\n    context._raise_error(Overflow,'above Emax',ans._sign)\n   for exception in Underflow,Subnormal,Inexact,Rounded,Clamped:\n    if newcontext.flags[exception]:\n     context._raise_error(exception)\n     \n  else :\n   ans=ans._fix(context)\n   \n  return ans\n  \n def __rpow__(self,other,context=None ):\n  ''\n  other=_convert_other(other)\n  if other is NotImplemented:\n   return other\n  return other.__pow__(self,context=context)\n  \n def normalize(self,context=None ):\n  ''\n  \n  if context is None :\n   context=getcontext()\n   \n  if self._is_special:\n   ans=self._check_nans(context=context)\n   if ans:\n    return ans\n    \n  dup=self._fix(context)\n  if dup._isinfinity():\n   return dup\n   \n  if not dup:\n   return _dec_from_triple(dup._sign,'0',0)\n  exp_max=[context.Emax,context.Etop()][context.clamp]\n  end=len(dup._int)\n  exp=dup._exp\n  while dup._int[end -1]=='0'and exp <exp_max:\n   exp +=1\n   end -=1\n  return _dec_from_triple(dup._sign,dup._int[:end],exp)\n  \n def quantize(self,exp,rounding=None ,context=None ,watchexp=True ):\n  ''\n\n\n  \n  exp=_convert_other(exp,raiseit=True )\n  \n  if context is None :\n   context=getcontext()\n  if rounding is None :\n   rounding=context.rounding\n   \n  if self._is_special or exp._is_special:\n   ans=self._check_nans(exp,context)\n   if ans:\n    return ans\n    \n   if exp._isinfinity()or self._isinfinity():\n    if exp._isinfinity()and self._isinfinity():\n     return Decimal(self)\n    return context._raise_error(InvalidOperation,\n    'quantize with one INF')\n    \n    \n  if not watchexp:\n   ans=self._rescale(exp._exp,rounding)\n   \n   if ans._exp >self._exp:\n    context._raise_error(Rounded)\n    if ans !=self:\n     context._raise_error(Inexact)\n   return ans\n   \n   \n  if not (context.Etiny()<=exp._exp <=context.Emax):\n   return context._raise_error(InvalidOperation,\n   'target exponent out of bounds in quantize')\n   \n  if not self:\n   ans=_dec_from_triple(self._sign,'0',exp._exp)\n   return ans._fix(context)\n   \n  self_adjusted=self.adjusted()\n  if self_adjusted >context.Emax:\n   return context._raise_error(InvalidOperation,\n   'exponent of quantize result too large for current context')\n  if self_adjusted -exp._exp+1 >context.prec:\n   return context._raise_error(InvalidOperation,\n   'quantize result has too many digits for current context')\n   \n  ans=self._rescale(exp._exp,rounding)\n  if ans.adjusted()>context.Emax:\n   return context._raise_error(InvalidOperation,\n   'exponent of quantize result too large for current context')\n  if len(ans._int)>context.prec:\n   return context._raise_error(InvalidOperation,\n   'quantize result has too many digits for current context')\n   \n   \n  if ans and ans.adjusted()<context.Emin:\n   context._raise_error(Subnormal)\n  if ans._exp >self._exp:\n   if ans !=self:\n    context._raise_error(Inexact)\n   context._raise_error(Rounded)\n   \n   \n   \n  ans=ans._fix(context)\n  return ans\n  \n def same_quantum(self,other,context=None ):\n  ''\n\n\n\n\n\n\n  \n  other=_convert_other(other,raiseit=True )\n  if self._is_special or other._is_special:\n   return (self.is_nan()and other.is_nan()or\n   self.is_infinite()and other.is_infinite())\n  return self._exp ==other._exp\n  \n def _rescale(self,exp,rounding):\n  ''\n\n\n\n\n\n\n\n\n  \n  if self._is_special:\n   return Decimal(self)\n  if not self:\n   return _dec_from_triple(self._sign,'0',exp)\n   \n  if self._exp >=exp:\n  \n   return _dec_from_triple(self._sign,\n   self._int+'0'*(self._exp -exp),exp)\n   \n   \n   \n  digits=len(self._int)+self._exp -exp\n  if digits <0:\n   self=_dec_from_triple(self._sign,'1',exp -1)\n   digits=0\n  this_function=self._pick_rounding_function[rounding]\n  changed=this_function(self,digits)\n  coeff=self._int[:digits]or'0'\n  if changed ==1:\n   coeff=str(int(coeff)+1)\n  return _dec_from_triple(self._sign,coeff,exp)\n  \n def _round(self,places,rounding):\n  ''\n\n\n\n\n\n\n\n  \n  if places <=0:\n   raise ValueError(\"argument should be at least 1 in _round\")\n  if self._is_special or not self:\n   return Decimal(self)\n  ans=self._rescale(self.adjusted()+1 -places,rounding)\n  \n  \n  \n  \n  if ans.adjusted()!=self.adjusted():\n   ans=ans._rescale(ans.adjusted()+1 -places,rounding)\n  return ans\n  \n def to_integral_exact(self,rounding=None ,context=None ):\n  ''\n\n\n\n\n\n\n\n  \n  if self._is_special:\n   ans=self._check_nans(context=context)\n   if ans:\n    return ans\n   return Decimal(self)\n  if self._exp >=0:\n   return Decimal(self)\n  if not self:\n   return _dec_from_triple(self._sign,'0',0)\n  if context is None :\n   context=getcontext()\n  if rounding is None :\n   rounding=context.rounding\n  ans=self._rescale(0,rounding)\n  if ans !=self:\n   context._raise_error(Inexact)\n  context._raise_error(Rounded)\n  return ans\n  \n def to_integral_value(self,rounding=None ,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n  if rounding is None :\n   rounding=context.rounding\n  if self._is_special:\n   ans=self._check_nans(context=context)\n   if ans:\n    return ans\n   return Decimal(self)\n  if self._exp >=0:\n   return Decimal(self)\n  else :\n   return self._rescale(0,rounding)\n   \n   \n to_integral=to_integral_value\n \n def sqrt(self,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  if self._is_special:\n   ans=self._check_nans(context=context)\n   if ans:\n    return ans\n    \n   if self._isinfinity()and self._sign ==0:\n    return Decimal(self)\n    \n  if not self:\n  \n   ans=_dec_from_triple(self._sign,'0',self._exp //2)\n   return ans._fix(context)\n   \n  if self._sign ==1:\n   return context._raise_error(InvalidOperation,'sqrt(-x), x > 0')\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n  prec=context.prec+1\n  \n  \n  \n  \n  \n  op=_WorkRep(self)\n  e=op.exp >>1\n  if op.exp&1:\n   c=op.int *10\n   l=(len(self._int)>>1)+1\n  else :\n   c=op.int\n   l=len(self._int)+1 >>1\n   \n   \n  shift=prec -l\n  if shift >=0:\n   c *=100 **shift\n   exact=True\n  else :\n   c,remainder=divmod(c,100 **-shift)\n   exact=not remainder\n  e -=shift\n  \n  \n  n=10 **prec\n  while True :\n   q=c //n\n   if n <=q:\n    break\n   else :\n    n=n+q >>1\n  exact=exact and n *n ==c\n  \n  if exact:\n  \n   if shift >=0:\n   \n    n //=10 **shift\n   else :\n    n *=10 **-shift\n   e +=shift\n  else :\n  \n   if n %5 ==0:\n    n +=1\n    \n  ans=_dec_from_triple(0,str(n),e)\n  \n  \n  context=context._shallow_copy()\n  rounding=context._set_rounding(ROUND_HALF_EVEN)\n  ans=ans._fix(context)\n  context.rounding=rounding\n  \n  return ans\n  \n def max(self,other,context=None ):\n  ''\n\n\n\n  \n  other=_convert_other(other,raiseit=True )\n  \n  if context is None :\n   context=getcontext()\n   \n  if self._is_special or other._is_special:\n  \n  \n   sn=self._isnan()\n   on=other._isnan()\n   if sn or on:\n    if on ==1 and sn ==0:\n     return self._fix(context)\n    if sn ==1 and on ==0:\n     return other._fix(context)\n    return self._check_nans(other,context)\n    \n  c=self._cmp(other)\n  if c ==0:\n  \n  \n  \n  \n  \n  \n  \n  \n   c=self.compare_total(other)\n   \n  if c ==-1:\n   ans=other\n  else :\n   ans=self\n   \n  return ans._fix(context)\n  \n def min(self,other,context=None ):\n  ''\n\n\n\n  \n  other=_convert_other(other,raiseit=True )\n  \n  if context is None :\n   context=getcontext()\n   \n  if self._is_special or other._is_special:\n  \n  \n   sn=self._isnan()\n   on=other._isnan()\n   if sn or on:\n    if on ==1 and sn ==0:\n     return self._fix(context)\n    if sn ==1 and on ==0:\n     return other._fix(context)\n    return self._check_nans(other,context)\n    \n  c=self._cmp(other)\n  if c ==0:\n   c=self.compare_total(other)\n   \n  if c ==-1:\n   ans=self\n  else :\n   ans=other\n   \n  return ans._fix(context)\n  \n def _isinteger(self):\n  ''\n  if self._is_special:\n   return False\n  if self._exp >=0:\n   return True\n  rest=self._int[self._exp:]\n  return rest =='0'*len(rest)\n  \n def _iseven(self):\n  ''\n  if not self or self._exp >0:\n   return True\n  return self._int[-1+self._exp]in'02468'\n  \n def adjusted(self):\n  ''\n  try :\n   return self._exp+len(self._int)-1\n   \n  except TypeError:\n   return 0\n   \n def canonical(self):\n  ''\n\n\n\n  \n  return self\n  \n def compare_signal(self,other,context=None ):\n  ''\n\n\n\n  \n  other=_convert_other(other,raiseit=True )\n  ans=self._compare_check_nans(other,context)\n  if ans:\n   return ans\n  return self.compare(other,context=context)\n  \n def compare_total(self,other,context=None ):\n  ''\n\n\n\n\n  \n  other=_convert_other(other,raiseit=True )\n  \n  \n  if self._sign and not other._sign:\n   return _NegativeOne\n  if not self._sign and other._sign:\n   return _One\n  sign=self._sign\n  \n  \n  self_nan=self._isnan()\n  other_nan=other._isnan()\n  if self_nan or other_nan:\n   if self_nan ==other_nan:\n   \n    self_key=len(self._int),self._int\n    other_key=len(other._int),other._int\n    if self_key <other_key:\n     if sign:\n      return _One\n     else :\n      return _NegativeOne\n    if self_key >other_key:\n     if sign:\n      return _NegativeOne\n     else :\n      return _One\n    return _Zero\n    \n   if sign:\n    if self_nan ==1:\n     return _NegativeOne\n    if other_nan ==1:\n     return _One\n    if self_nan ==2:\n     return _NegativeOne\n    if other_nan ==2:\n     return _One\n   else :\n    if self_nan ==1:\n     return _One\n    if other_nan ==1:\n     return _NegativeOne\n    if self_nan ==2:\n     return _One\n    if other_nan ==2:\n     return _NegativeOne\n     \n  if self <other:\n   return _NegativeOne\n  if self >other:\n   return _One\n   \n  if self._exp <other._exp:\n   if sign:\n    return _One\n   else :\n    return _NegativeOne\n  if self._exp >other._exp:\n   if sign:\n    return _NegativeOne\n   else :\n    return _One\n  return _Zero\n  \n  \n def compare_total_mag(self,other,context=None ):\n  ''\n\n\n  \n  other=_convert_other(other,raiseit=True )\n  \n  s=self.copy_abs()\n  o=other.copy_abs()\n  return s.compare_total(o)\n  \n def copy_abs(self):\n  ''\n  return _dec_from_triple(0,self._int,self._exp,self._is_special)\n  \n def copy_negate(self):\n  ''\n  if self._sign:\n   return _dec_from_triple(0,self._int,self._exp,self._is_special)\n  else :\n   return _dec_from_triple(1,self._int,self._exp,self._is_special)\n   \n def copy_sign(self,other,context=None ):\n  ''\n  other=_convert_other(other,raiseit=True )\n  return _dec_from_triple(other._sign,self._int,\n  self._exp,self._is_special)\n  \n def exp(self,context=None ):\n  ''\n  \n  if context is None :\n   context=getcontext()\n   \n   \n  ans=self._check_nans(context=context)\n  if ans:\n   return ans\n   \n   \n  if self._isinfinity()==-1:\n   return _Zero\n   \n   \n  if not self:\n   return _One\n   \n   \n  if self._isinfinity()==1:\n   return Decimal(self)\n   \n   \n   \n   \n   \n  p=context.prec\n  adj=self.adjusted()\n  \n  \n  \n  \n  \n  \n  if self._sign ==0 and adj >len(str((context.Emax+1)*3)):\n  \n   ans=_dec_from_triple(0,'1',context.Emax+1)\n  elif self._sign ==1 and adj >len(str((-context.Etiny()+1)*3)):\n  \n   ans=_dec_from_triple(0,'1',context.Etiny()-1)\n  elif self._sign ==0 and adj <-p:\n  \n   ans=_dec_from_triple(0,'1'+'0'*(p -1)+'1',-p)\n  elif self._sign ==1 and adj <-p -1:\n  \n   ans=_dec_from_triple(0,'9'*(p+1),-p -1)\n   \n  else :\n   op=_WorkRep(self)\n   c,e=op.int,op.exp\n   if op.sign ==1:\n    c=-c\n    \n    \n    \n    \n   extra=3\n   while True :\n    coeff,exp=_dexp(c,e,p+extra)\n    if coeff %(5 *10 **(len(str(coeff))-p -1)):\n     break\n    extra +=3\n    \n   ans=_dec_from_triple(0,str(coeff),exp)\n   \n   \n   \n  context=context._shallow_copy()\n  rounding=context._set_rounding(ROUND_HALF_EVEN)\n  ans=ans._fix(context)\n  context.rounding=rounding\n  \n  return ans\n  \n def is_canonical(self):\n  ''\n\n\n\n  \n  return True\n  \n def is_finite(self):\n  ''\n\n\n\n  \n  return not self._is_special\n  \n def is_infinite(self):\n  ''\n  return self._exp =='F'\n  \n def is_nan(self):\n  ''\n  return self._exp in ('n','N')\n  \n def is_normal(self,context=None ):\n  ''\n  if self._is_special or not self:\n   return False\n  if context is None :\n   context=getcontext()\n  return context.Emin <=self.adjusted()\n  \n def is_qnan(self):\n  ''\n  return self._exp =='n'\n  \n def is_signed(self):\n  ''\n  return self._sign ==1\n  \n def is_snan(self):\n  ''\n  return self._exp =='N'\n  \n def is_subnormal(self,context=None ):\n  ''\n  if self._is_special or not self:\n   return False\n  if context is None :\n   context=getcontext()\n  return self.adjusted()<context.Emin\n  \n def is_zero(self):\n  ''\n  return not self._is_special and self._int =='0'\n  \n def _ln_exp_bound(self):\n  ''\n\n\n  \n  \n  \n  adj=self._exp+len(self._int)-1\n  if adj >=1:\n  \n   return len(str(adj *23 //10))-1\n  if adj <=-2:\n  \n   return len(str((-1 -adj)*23 //10))-1\n  op=_WorkRep(self)\n  c,e=op.int,op.exp\n  if adj ==0:\n  \n   num=str(c -10 **-e)\n   den=str(c)\n   return len(num)-len(den)-(num <den)\n   \n  return e+len(str(10 **-e -c))-1\n  \n  \n def ln(self,context=None ):\n  ''\n  \n  if context is None :\n   context=getcontext()\n   \n   \n  ans=self._check_nans(context=context)\n  if ans:\n   return ans\n   \n   \n  if not self:\n   return _NegativeInfinity\n   \n   \n  if self._isinfinity()==1:\n   return _Infinity\n   \n   \n  if self ==_One:\n   return _Zero\n   \n   \n  if self._sign ==1:\n   return context._raise_error(InvalidOperation,\n   'ln of a negative value')\n   \n   \n  op=_WorkRep(self)\n  c,e=op.int,op.exp\n  p=context.prec\n  \n  \n  \n  places=p -self._ln_exp_bound()+2\n  while True :\n   coeff=_dlog(c,e,places)\n   \n   if coeff %(5 *10 **(len(str(abs(coeff)))-p -1)):\n    break\n   places +=3\n  ans=_dec_from_triple(int(coeff <0),str(abs(coeff)),-places)\n  \n  context=context._shallow_copy()\n  rounding=context._set_rounding(ROUND_HALF_EVEN)\n  ans=ans._fix(context)\n  context.rounding=rounding\n  return ans\n  \n def _log10_exp_bound(self):\n  ''\n\n\n  \n  \n  \n  \n  \n  \n  \n  \n  adj=self._exp+len(self._int)-1\n  if adj >=1:\n  \n   return len(str(adj))-1\n  if adj <=-2:\n  \n   return len(str(-1 -adj))-1\n  op=_WorkRep(self)\n  c,e=op.int,op.exp\n  if adj ==0:\n  \n   num=str(c -10 **-e)\n   den=str(231 *c)\n   return len(num)-len(den)-(num <den)+2\n   \n  num=str(10 **-e -c)\n  return len(num)+e -(num <\"231\")-1\n  \n def log10(self,context=None ):\n  ''\n  \n  if context is None :\n   context=getcontext()\n   \n   \n  ans=self._check_nans(context=context)\n  if ans:\n   return ans\n   \n   \n  if not self:\n   return _NegativeInfinity\n   \n   \n  if self._isinfinity()==1:\n   return _Infinity\n   \n   \n  if self._sign ==1:\n   return context._raise_error(InvalidOperation,\n   'log10 of a negative value')\n   \n   \n  if self._int[0]=='1'and self._int[1:]=='0'*(len(self._int)-1):\n  \n   ans=Decimal(self._exp+len(self._int)-1)\n  else :\n  \n   op=_WorkRep(self)\n   c,e=op.int,op.exp\n   p=context.prec\n   \n   \n   \n   places=p -self._log10_exp_bound()+2\n   while True :\n    coeff=_dlog10(c,e,places)\n    \n    if coeff %(5 *10 **(len(str(abs(coeff)))-p -1)):\n     break\n    places +=3\n   ans=_dec_from_triple(int(coeff <0),str(abs(coeff)),-places)\n   \n  context=context._shallow_copy()\n  rounding=context._set_rounding(ROUND_HALF_EVEN)\n  ans=ans._fix(context)\n  context.rounding=rounding\n  return ans\n  \n def logb(self,context=None ):\n  ''\n\n\n\n\n\n  \n  \n  ans=self._check_nans(context=context)\n  if ans:\n   return ans\n   \n  if context is None :\n   context=getcontext()\n   \n   \n  if self._isinfinity():\n   return _Infinity\n   \n   \n  if not self:\n   return context._raise_error(DivisionByZero,'logb(0)',1)\n   \n   \n   \n   \n  ans=Decimal(self.adjusted())\n  return ans._fix(context)\n  \n def _islogical(self):\n  ''\n\n\n\n\n  \n  if self._sign !=0 or self._exp !=0:\n   return False\n  for dig in self._int:\n   if dig not in'01':\n    return False\n  return True\n  \n def _fill_logical(self,context,opa,opb):\n  dif=context.prec -len(opa)\n  if dif >0:\n   opa='0'*dif+opa\n  elif dif <0:\n   opa=opa[-context.prec:]\n  dif=context.prec -len(opb)\n  if dif >0:\n   opb='0'*dif+opb\n  elif dif <0:\n   opb=opb[-context.prec:]\n  return opa,opb\n  \n def logical_and(self,other,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  other=_convert_other(other,raiseit=True )\n  \n  if not self._islogical()or not other._islogical():\n   return context._raise_error(InvalidOperation)\n   \n   \n  (opa,opb)=self._fill_logical(context,self._int,other._int)\n  \n  \n  result=\"\".join([str(int(a)&int(b))for a,b in zip(opa,opb)])\n  return _dec_from_triple(0,result.lstrip('0')or'0',0)\n  \n def logical_invert(self,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n  return self.logical_xor(_dec_from_triple(0,'1'*context.prec,0),\n  context)\n  \n def logical_or(self,other,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  other=_convert_other(other,raiseit=True )\n  \n  if not self._islogical()or not other._islogical():\n   return context._raise_error(InvalidOperation)\n   \n   \n  (opa,opb)=self._fill_logical(context,self._int,other._int)\n  \n  \n  result=\"\".join([str(int(a)|int(b))for a,b in zip(opa,opb)])\n  return _dec_from_triple(0,result.lstrip('0')or'0',0)\n  \n def logical_xor(self,other,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  other=_convert_other(other,raiseit=True )\n  \n  if not self._islogical()or not other._islogical():\n   return context._raise_error(InvalidOperation)\n   \n   \n  (opa,opb)=self._fill_logical(context,self._int,other._int)\n  \n  \n  result=\"\".join([str(int(a)^int(b))for a,b in zip(opa,opb)])\n  return _dec_from_triple(0,result.lstrip('0')or'0',0)\n  \n def max_mag(self,other,context=None ):\n  ''\n  other=_convert_other(other,raiseit=True )\n  \n  if context is None :\n   context=getcontext()\n   \n  if self._is_special or other._is_special:\n  \n  \n   sn=self._isnan()\n   on=other._isnan()\n   if sn or on:\n    if on ==1 and sn ==0:\n     return self._fix(context)\n    if sn ==1 and on ==0:\n     return other._fix(context)\n    return self._check_nans(other,context)\n    \n  c=self.copy_abs()._cmp(other.copy_abs())\n  if c ==0:\n   c=self.compare_total(other)\n   \n  if c ==-1:\n   ans=other\n  else :\n   ans=self\n   \n  return ans._fix(context)\n  \n def min_mag(self,other,context=None ):\n  ''\n  other=_convert_other(other,raiseit=True )\n  \n  if context is None :\n   context=getcontext()\n   \n  if self._is_special or other._is_special:\n  \n  \n   sn=self._isnan()\n   on=other._isnan()\n   if sn or on:\n    if on ==1 and sn ==0:\n     return self._fix(context)\n    if sn ==1 and on ==0:\n     return other._fix(context)\n    return self._check_nans(other,context)\n    \n  c=self.copy_abs()._cmp(other.copy_abs())\n  if c ==0:\n   c=self.compare_total(other)\n   \n  if c ==-1:\n   ans=self\n  else :\n   ans=other\n   \n  return ans._fix(context)\n  \n def next_minus(self,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  ans=self._check_nans(context=context)\n  if ans:\n   return ans\n   \n  if self._isinfinity()==-1:\n   return _NegativeInfinity\n  if self._isinfinity()==1:\n   return _dec_from_triple(0,'9'*context.prec,context.Etop())\n   \n  context=context.copy()\n  context._set_rounding(ROUND_FLOOR)\n  context._ignore_all_flags()\n  new_self=self._fix(context)\n  if new_self !=self:\n   return new_self\n  return self.__sub__(_dec_from_triple(0,'1',context.Etiny()-1),\n  context)\n  \n def next_plus(self,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  ans=self._check_nans(context=context)\n  if ans:\n   return ans\n   \n  if self._isinfinity()==1:\n   return _Infinity\n  if self._isinfinity()==-1:\n   return _dec_from_triple(1,'9'*context.prec,context.Etop())\n   \n  context=context.copy()\n  context._set_rounding(ROUND_CEILING)\n  context._ignore_all_flags()\n  new_self=self._fix(context)\n  if new_self !=self:\n   return new_self\n  return self.__add__(_dec_from_triple(0,'1',context.Etiny()-1),\n  context)\n  \n def next_toward(self,other,context=None ):\n  ''\n\n\n\n\n\n\n  \n  other=_convert_other(other,raiseit=True )\n  \n  if context is None :\n   context=getcontext()\n   \n  ans=self._check_nans(other,context)\n  if ans:\n   return ans\n   \n  comparison=self._cmp(other)\n  if comparison ==0:\n   return self.copy_sign(other)\n   \n  if comparison ==-1:\n   ans=self.next_plus(context)\n  else :\n   ans=self.next_minus(context)\n   \n   \n  if ans._isinfinity():\n   context._raise_error(Overflow,\n   'Infinite result from next_toward',\n   ans._sign)\n   context._raise_error(Inexact)\n   context._raise_error(Rounded)\n  elif ans.adjusted()<context.Emin:\n   context._raise_error(Underflow)\n   context._raise_error(Subnormal)\n   context._raise_error(Inexact)\n   context._raise_error(Rounded)\n   \n   \n   if not ans:\n    context._raise_error(Clamped)\n    \n  return ans\n  \n def number_class(self,context=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if self.is_snan():\n   return\"sNaN\"\n  if self.is_qnan():\n   return\"NaN\"\n  inf=self._isinfinity()\n  if inf ==1:\n   return\"+Infinity\"\n  if inf ==-1:\n   return\"-Infinity\"\n  if self.is_zero():\n   if self._sign:\n    return\"-Zero\"\n   else :\n    return\"+Zero\"\n  if context is None :\n   context=getcontext()\n  if self.is_subnormal(context=context):\n   if self._sign:\n    return\"-Subnormal\"\n   else :\n    return\"+Subnormal\"\n    \n  if self._sign:\n   return\"-Normal\"\n  else :\n   return\"+Normal\"\n   \n def radix(self):\n  ''\n  return Decimal(10)\n  \n def rotate(self,other,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  other=_convert_other(other,raiseit=True )\n  \n  ans=self._check_nans(other,context)\n  if ans:\n   return ans\n   \n  if other._exp !=0:\n   return context._raise_error(InvalidOperation)\n  if not (-context.prec <=int(other)<=context.prec):\n   return context._raise_error(InvalidOperation)\n   \n  if self._isinfinity():\n   return Decimal(self)\n   \n   \n  torot=int(other)\n  rotdig=self._int\n  topad=context.prec -len(rotdig)\n  if topad >0:\n   rotdig='0'*topad+rotdig\n  elif topad <0:\n   rotdig=rotdig[-topad:]\n   \n   \n  rotated=rotdig[torot:]+rotdig[:torot]\n  return _dec_from_triple(self._sign,\n  rotated.lstrip('0')or'0',self._exp)\n  \n def scaleb(self,other,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  other=_convert_other(other,raiseit=True )\n  \n  ans=self._check_nans(other,context)\n  if ans:\n   return ans\n   \n  if other._exp !=0:\n   return context._raise_error(InvalidOperation)\n  liminf=-2 *(context.Emax+context.prec)\n  limsup=2 *(context.Emax+context.prec)\n  if not (liminf <=int(other)<=limsup):\n   return context._raise_error(InvalidOperation)\n   \n  if self._isinfinity():\n   return Decimal(self)\n   \n  d=_dec_from_triple(self._sign,self._int,self._exp+int(other))\n  d=d._fix(context)\n  return d\n  \n def shift(self,other,context=None ):\n  ''\n  if context is None :\n   context=getcontext()\n   \n  other=_convert_other(other,raiseit=True )\n  \n  ans=self._check_nans(other,context)\n  if ans:\n   return ans\n   \n  if other._exp !=0:\n   return context._raise_error(InvalidOperation)\n  if not (-context.prec <=int(other)<=context.prec):\n   return context._raise_error(InvalidOperation)\n   \n  if self._isinfinity():\n   return Decimal(self)\n   \n   \n  torot=int(other)\n  rotdig=self._int\n  topad=context.prec -len(rotdig)\n  if topad >0:\n   rotdig='0'*topad+rotdig\n  elif topad <0:\n   rotdig=rotdig[-topad:]\n   \n   \n  if torot <0:\n   shifted=rotdig[:torot]\n  else :\n   shifted=rotdig+'0'*torot\n   shifted=shifted[-context.prec:]\n   \n  return _dec_from_triple(self._sign,\n  shifted.lstrip('0')or'0',self._exp)\n  \n  \n def __reduce__(self):\n  return (self.__class__,(str(self),))\n  \n def __copy__(self):\n  if type(self)is Decimal:\n   return self\n  return self.__class__(str(self))\n  \n def __deepcopy__(self,memo):\n  if type(self)is Decimal:\n   return self\n  return self.__class__(str(self))\n  \n  \n  \n def __format__(self,specifier,context=None ,_localeconv=None ):\n  ''\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  if context is None :\n   context=getcontext()\n   \n  spec=_parse_format_specifier(specifier,_localeconv=_localeconv)\n  \n  \n  if self._is_special:\n   sign=_format_sign(self._sign,spec)\n   body=str(self.copy_abs())\n   return _format_align(sign,body,spec)\n   \n   \n  if spec['type']is None :\n   spec['type']=['g','G'][context.capitals]\n   \n   \n  if spec['type']=='%':\n   self=_dec_from_triple(self._sign,self._int,self._exp+2)\n   \n   \n  rounding=context.rounding\n  precision=spec['precision']\n  if precision is not None :\n   if spec['type']in'eE':\n    self=self._round(precision+1,rounding)\n   elif spec['type']in'fF%':\n    self=self._rescale(-precision,rounding)\n   elif spec['type']in'gG'and len(self._int)>precision:\n    self=self._round(precision,rounding)\n    \n    \n  if not self and self._exp >0 and spec['type']in'fF%':\n   self=self._rescale(0,rounding)\n   \n   \n  leftdigits=self._exp+len(self._int)\n  if spec['type']in'eE':\n   if not self and precision is not None :\n    dotplace=1 -precision\n   else :\n    dotplace=1\n  elif spec['type']in'fF%':\n   dotplace=leftdigits\n  elif spec['type']in'gG':\n   if self._exp <=0 and leftdigits >-6:\n    dotplace=leftdigits\n   else :\n    dotplace=1\n    \n    \n  if dotplace <0:\n   intpart='0'\n   fracpart='0'*(-dotplace)+self._int\n  elif dotplace >len(self._int):\n   intpart=self._int+'0'*(dotplace -len(self._int))\n   fracpart=''\n  else :\n   intpart=self._int[:dotplace]or'0'\n   fracpart=self._int[dotplace:]\n  exp=leftdigits -dotplace\n  \n  \n  \n  return _format_number(self._sign,intpart,fracpart,exp,spec)\n  \ndef _dec_from_triple(sign,coefficient,exponent,special=False ):\n ''\n\n\n\n\n \n \n self=object.__new__(Decimal)\n self._sign=sign\n self._int=coefficient\n self._exp=exponent\n self._is_special=special\n \n return self\n \n \n \n \n_numbers.Number.register(Decimal)\n\n\n\n\nclass _ContextManager(object):\n ''\n\n\n\n \n def __init__(self,new_context):\n  self.new_context=new_context.copy()\n def __enter__(self):\n  self.saved_context=getcontext()\n  setcontext(self.new_context)\n  return self.new_context\n def __exit__(self,t,v,tb):\n  setcontext(self.saved_context)\n  \nclass Context(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,prec=None ,rounding=None ,Emin=None ,Emax=None ,\n capitals=None ,clamp=None ,flags=None ,traps=None ,\n _ignored_flags=None ):\n \n \n  try :\n   dc=DefaultContext\n  except NameError:\n   pass\n   \n  self.prec=prec if prec is not None else dc.prec\n  self.rounding=rounding if rounding is not None else dc.rounding\n  self.Emin=Emin if Emin is not None else dc.Emin\n  self.Emax=Emax if Emax is not None else dc.Emax\n  self.capitals=capitals if capitals is not None else dc.capitals\n  self.clamp=clamp if clamp is not None else dc.clamp\n  \n  if _ignored_flags is None :\n   self._ignored_flags=[]\n  else :\n   self._ignored_flags=_ignored_flags\n   \n  if traps is None :\n   self.traps=dc.traps.copy()\n  elif not isinstance(traps,dict):\n   self.traps=dict((s,int(s in traps))for s in _signals+traps)\n  else :\n   self.traps=traps\n   \n  if flags is None :\n   self.flags=dict.fromkeys(_signals,0)\n  elif not isinstance(flags,dict):\n   self.flags=dict((s,int(s in flags))for s in _signals+flags)\n  else :\n   self.flags=flags\n   \n def _set_integer_check(self,name,value,vmin,vmax):\n  if not isinstance(value,int):\n   raise TypeError(\"%s must be an integer\"%name)\n  if vmin =='-inf':\n   if value >vmax:\n    raise ValueError(\"%s must be in [%s, %d]. got: %s\"%(name,vmin,vmax,value))\n  elif vmax =='inf':\n   if value <vmin:\n    raise ValueError(\"%s must be in [%d, %s]. got: %s\"%(name,vmin,vmax,value))\n  else :\n   if value <vmin or value >vmax:\n    raise ValueError(\"%s must be in [%d, %d]. got %s\"%(name,vmin,vmax,value))\n  return object.__setattr__(self,name,value)\n  \n def _set_signal_dict(self,name,d):\n  if not isinstance(d,dict):\n   raise TypeError(\"%s must be a signal dict\"%d)\n  for key in d:\n   if not key in _signals:\n    raise KeyError(\"%s is not a valid signal dict\"%d)\n  for key in _signals:\n   if not key in d:\n    raise KeyError(\"%s is not a valid signal dict\"%d)\n  return object.__setattr__(self,name,d)\n  \n def __setattr__(self,name,value):\n  if name =='prec':\n   return self._set_integer_check(name,value,1,'inf')\n  elif name =='Emin':\n   return self._set_integer_check(name,value,'-inf',0)\n  elif name =='Emax':\n   return self._set_integer_check(name,value,0,'inf')\n  elif name =='capitals':\n   return self._set_integer_check(name,value,0,1)\n  elif name =='clamp':\n   return self._set_integer_check(name,value,0,1)\n  elif name =='rounding':\n   if not value in _rounding_modes:\n   \n   \n    raise TypeError(\"%s: invalid rounding mode\"%value)\n   return object.__setattr__(self,name,value)\n  elif name =='flags'or name =='traps':\n   return self._set_signal_dict(name,value)\n  elif name =='_ignored_flags':\n   return object.__setattr__(self,name,value)\n  else :\n   raise AttributeError(\n   \"'decimal.Context' object has no attribute '%s'\"%name)\n   \n def __delattr__(self,name):\n  raise AttributeError(\"%s cannot be deleted\"%name)\n  \n  \n def __reduce__(self):\n  flags=[sig for sig,v in self.flags.items()if v]\n  traps=[sig for sig,v in self.traps.items()if v]\n  return (self.__class__,\n  (self.prec,self.rounding,self.Emin,self.Emax,\n  self.capitals,self.clamp,flags,traps))\n  \n def __repr__(self):\n  ''\n  s=[]\n  s.append('Context(prec=%(prec)d, rounding=%(rounding)s, '\n  'Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d, '\n  'clamp=%(clamp)d'\n  %vars(self))\n  names=[f.__name__ for f,v in self.flags.items()if v]\n  s.append('flags=['+', '.join(names)+']')\n  names=[t.__name__ for t,v in self.traps.items()if v]\n  s.append('traps=['+', '.join(names)+']')\n  return', '.join(s)+')'\n  \n def clear_flags(self):\n  ''\n  for flag in self.flags:\n   self.flags[flag]=0\n   \n def clear_traps(self):\n  ''\n  for flag in self.traps:\n   self.traps[flag]=0\n   \n def _shallow_copy(self):\n  ''\n  nc=Context(self.prec,self.rounding,self.Emin,self.Emax,\n  self.capitals,self.clamp,self.flags,self.traps,\n  self._ignored_flags)\n  return nc\n  \n def copy(self):\n  ''\n  nc=Context(self.prec,self.rounding,self.Emin,self.Emax,\n  self.capitals,self.clamp,\n  self.flags.copy(),self.traps.copy(),\n  self._ignored_flags)\n  return nc\n __copy__=copy\n \n def _raise_error(self,condition,explanation=None ,*args):\n  ''\n\n\n\n\n\n  \n  error=_condition_map.get(condition,condition)\n  if error in self._ignored_flags:\n  \n   return error().handle(self,*args)\n   \n  self.flags[error]=1\n  if not self.traps[error]:\n  \n   return condition().handle(self,*args)\n   \n   \n   \n  raise error(explanation)\n  \n def _ignore_all_flags(self):\n  ''\n  return self._ignore_flags(*_signals)\n  \n def _ignore_flags(self,*flags):\n  ''\n  \n  \n  self._ignored_flags=(self._ignored_flags+list(flags))\n  return list(flags)\n  \n def _regard_flags(self,*flags):\n  ''\n  if flags and isinstance(flags[0],(tuple,list)):\n   flags=flags[0]\n  for flag in flags:\n   self._ignored_flags.remove(flag)\n   \n   \n __hash__=None\n \n def Etiny(self):\n  ''\n  return int(self.Emin -self.prec+1)\n  \n def Etop(self):\n  ''\n  return int(self.Emax -self.prec+1)\n  \n def _set_rounding(self,type):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  rounding=self.rounding\n  self.rounding=type\n  return rounding\n  \n def create_decimal(self,num='0'):\n  ''\n\n\n  \n  \n  if isinstance(num,str)and num !=num.strip():\n   return self._raise_error(ConversionSyntax,\n   \"no trailing or leading whitespace is \"\n   \"permitted.\")\n   \n  d=Decimal(num,context=self)\n  if d._isnan()and len(d._int)>self.prec -self.clamp:\n   return self._raise_error(ConversionSyntax,\n   \"diagnostic info too long in NaN\")\n  return d._fix(self)\n  \n def create_decimal_from_float(self,f):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  d=Decimal.from_float(f)\n  return d._fix(self)\n  \n  \n def abs(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.__abs__(context=self)\n  \n def add(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  r=a.__add__(b,context=self)\n  if r is NotImplemented:\n   raise TypeError(\"Unable to convert %s to Decimal\"%b)\n  else :\n   return r\n   \n def _apply(self,a):\n  return str(a._fix(self))\n  \n def canonical(self,a):\n  ''\n\n\n\n\n\n\n  \n  if not isinstance(a,Decimal):\n   raise TypeError(\"canonical requires a Decimal as an argument.\")\n  return a.canonical()\n  \n def compare(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.compare(b,context=self)\n  \n def compare_signal(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.compare_signal(b,context=self)\n  \n def compare_total(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.compare_total(b)\n  \n def compare_total_mag(self,a,b):\n  ''\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.compare_total_mag(b)\n  \n def copy_abs(self,a):\n  ''\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.copy_abs()\n  \n def copy_decimal(self,a):\n  ''\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return Decimal(a)\n  \n def copy_negate(self,a):\n  ''\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.copy_negate()\n  \n def copy_sign(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.copy_sign(b)\n  \n def divide(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  r=a.__truediv__(b,context=self)\n  if r is NotImplemented:\n   raise TypeError(\"Unable to convert %s to Decimal\"%b)\n  else :\n   return r\n   \n def divide_int(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  r=a.__floordiv__(b,context=self)\n  if r is NotImplemented:\n   raise TypeError(\"Unable to convert %s to Decimal\"%b)\n  else :\n   return r\n   \n def divmod(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  r=a.__divmod__(b,context=self)\n  if r is NotImplemented:\n   raise TypeError(\"Unable to convert %s to Decimal\"%b)\n  else :\n   return r\n   \n def exp(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.exp(context=self)\n  \n def fma(self,a,b,c):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.fma(b,c,context=self)\n  \n def is_canonical(self,a):\n  ''\n\n\n\n\n\n\n  \n  if not isinstance(a,Decimal):\n   raise TypeError(\"is_canonical requires a Decimal as an argument.\")\n  return a.is_canonical()\n  \n def is_finite(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_finite()\n  \n def is_infinite(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_infinite()\n  \n def is_nan(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_nan()\n  \n def is_normal(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_normal(context=self)\n  \n def is_qnan(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_qnan()\n  \n def is_signed(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_signed()\n  \n def is_snan(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_snan()\n  \n def is_subnormal(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_subnormal(context=self)\n  \n def is_zero(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.is_zero()\n  \n def ln(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.ln(context=self)\n  \n def log10(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.log10(context=self)\n  \n def logb(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.logb(context=self)\n  \n def logical_and(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.logical_and(b,context=self)\n  \n def logical_invert(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.logical_invert(context=self)\n  \n def logical_or(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.logical_or(b,context=self)\n  \n def logical_xor(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.logical_xor(b,context=self)\n  \n def max(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.max(b,context=self)\n  \n def max_mag(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.max_mag(b,context=self)\n  \n def min(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.min(b,context=self)\n  \n def min_mag(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.min_mag(b,context=self)\n  \n def minus(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.__neg__(context=self)\n  \n def multiply(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  r=a.__mul__(b,context=self)\n  if r is NotImplemented:\n   raise TypeError(\"Unable to convert %s to Decimal\"%b)\n  else :\n   return r\n   \n def next_minus(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.next_minus(context=self)\n  \n def next_plus(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.next_plus(context=self)\n  \n def next_toward(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.next_toward(b,context=self)\n  \n def normalize(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.normalize(context=self)\n  \n def number_class(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.number_class(context=self)\n  \n def plus(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.__pos__(context=self)\n  \n def power(self,a,b,modulo=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  r=a.__pow__(b,modulo,context=self)\n  if r is NotImplemented:\n   raise TypeError(\"Unable to convert %s to Decimal\"%b)\n  else :\n   return r\n   \n def quantize(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.quantize(b,context=self)\n  \n def radix(self):\n  ''\n\n\n\n  \n  return Decimal(10)\n  \n def remainder(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  r=a.__mod__(b,context=self)\n  if r is NotImplemented:\n   raise TypeError(\"Unable to convert %s to Decimal\"%b)\n  else :\n   return r\n   \n def remainder_near(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.remainder_near(b,context=self)\n  \n def rotate(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.rotate(b,context=self)\n  \n def same_quantum(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.same_quantum(b)\n  \n def scaleb(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.scaleb(b,context=self)\n  \n def shift(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.shift(b,context=self)\n  \n def sqrt(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.sqrt(context=self)\n  \n def subtract(self,a,b):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  r=a.__sub__(b,context=self)\n  if r is NotImplemented:\n   raise TypeError(\"Unable to convert %s to Decimal\"%b)\n  else :\n   return r\n   \n def to_eng_string(self,a):\n  ''\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.to_eng_string(context=self)\n  \n def to_sci_string(self,a):\n  ''\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.__str__(context=self)\n  \n def to_integral_exact(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.to_integral_exact(context=self)\n  \n def to_integral_value(self,a):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  a=_convert_other(a,raiseit=True )\n  return a.to_integral_value(context=self)\n  \n  \n to_integral=to_integral_value\n \nclass _WorkRep(object):\n __slots__=('sign','int','exp')\n \n \n \n \n def __init__(self,value=None ):\n  if value is None :\n   self.sign=None\n   self.int=0\n   self.exp=None\n  elif isinstance(value,Decimal):\n   self.sign=value._sign\n   self.int=int(value._int)\n   self.exp=value._exp\n  else :\n  \n   self.sign=value[0]\n   self.int=value[1]\n   self.exp=value[2]\n   \n def __repr__(self):\n  return\"(%r, %r, %r)\"%(self.sign,self.int,self.exp)\n  \n __str__=__repr__\n \n \n \ndef _normalize(op1,op2,prec=0):\n ''\n\n\n \n if op1.exp <op2.exp:\n  tmp=op2\n  other=op1\n else :\n  tmp=op1\n  other=op2\n  \n  \n  \n  \n  \n  \n tmp_len=len(str(tmp.int))\n other_len=len(str(other.int))\n exp=tmp.exp+min(-1,tmp_len -prec -2)\n if other_len+other.exp -1 <exp:\n  other.int=1\n  other.exp=exp\n  \n tmp.int *=10 **(tmp.exp -other.exp)\n tmp.exp=other.exp\n return op1,op2\n \n \n \n_nbits=int.bit_length\n\ndef _decimal_lshift_exact(n,e):\n ''\n\n\n\n\n\n\n\n\n \n if n ==0:\n  return 0\n elif e >=0:\n  return n *10 **e\n else :\n \n  str_n=str(abs(n))\n  val_n=len(str_n)-len(str_n.rstrip('0'))\n  return None if val_n <-e else n //10 **-e\n  \ndef _sqrt_nearest(n,a):\n ''\n\n\n\n\n \n if n <=0 or a <=0:\n  raise ValueError(\"Both arguments to _sqrt_nearest should be positive.\")\n  \n b=0\n while a !=b:\n  b,a=a,a --n //a >>1\n return a\n \ndef _rshift_nearest(x,shift):\n ''\n\n\n \n b,q=1 <<shift,x >>shift\n return q+(2 *(x&(b -1))+(q&1)>b)\n \ndef _div_nearest(a,b):\n ''\n\n\n \n q,r=divmod(a,b)\n return q+(2 *r+(q&1)>b)\n \ndef _ilog(x,M,L=8):\n ''\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n y=x -M\n \n R=0\n while (R <=L and abs(y)<<L -R >=M or\n R >L and abs(y)>>R -L >=M):\n  y=_div_nearest((M *y)<<1,\n  M+_sqrt_nearest(M *(M+_rshift_nearest(y,R)),M))\n  R +=1\n  \n  \n T=-int(-10 *len(str(M))//(3 *L))\n yshift=_rshift_nearest(y,R)\n w=_div_nearest(M,T)\n for k in range(T -1,0,-1):\n  w=_div_nearest(M,k)-_div_nearest(yshift *w,M)\n  \n return _div_nearest(w *y,M)\n \ndef _dlog10(c,e,p):\n ''\n\n \n \n \n \n p +=2\n \n \n \n \n \n l=len(str(c))\n f=e+l -(e+l >=1)\n \n if p >0:\n  M=10 **p\n  k=e+p -f\n  if k >=0:\n   c *=10 **k\n  else :\n   c=_div_nearest(c,10 **-k)\n   \n  log_d=_ilog(c,M)\n  log_10=_log10_digits(p)\n  log_d=_div_nearest(log_d *M,log_10)\n  log_tenpower=f *M\n else :\n  log_d=0\n  log_tenpower=_div_nearest(f,10 **-p)\n  \n return _div_nearest(log_tenpower+log_d,100)\n \ndef _dlog(c,e,p):\n ''\n\n \n \n \n \n p +=2\n \n \n \n \n l=len(str(c))\n f=e+l -(e+l >=1)\n \n \n if p >0:\n  k=e+p -f\n  if k >=0:\n   c *=10 **k\n  else :\n   c=_div_nearest(c,10 **-k)\n   \n   \n  log_d=_ilog(c,10 **p)\n else :\n \n  log_d=0\n  \n  \n if f:\n  extra=len(str(abs(f)))-1\n  if p+extra >=0:\n  \n  \n   f_log_ten=_div_nearest(f *_log10_digits(p+extra),10 **extra)\n  else :\n   f_log_ten=0\n else :\n  f_log_ten=0\n  \n  \n return _div_nearest(f_log_ten+log_d,100)\n \nclass _Log10Memoize(object):\n ''\n\n \n def __init__(self):\n  self.digits=\"23025850929940456840179914546843642076011014886\"\n  \n def getdigits(self,p):\n  ''\n\n\n  \n  \n  \n  \n  \n  if p <0:\n   raise ValueError(\"p should be nonnegative\")\n   \n  if p >=len(self.digits):\n  \n  \n   extra=3\n   while True :\n   \n    M=10 **(p+extra+2)\n    digits=str(_div_nearest(_ilog(10 *M,M),100))\n    if digits[-extra:]!='0'*extra:\n     break\n    extra +=3\n    \n    \n   self.digits=digits.rstrip('0')[:-1]\n  return int(self.digits[:p+1])\n  \n_log10_digits=_Log10Memoize().getdigits\n\ndef _iexp(x,M,L=8):\n ''\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n R=_nbits((x <<L)//M)\n \n \n T=-int(-10 *len(str(M))//(3 *L))\n y=_div_nearest(x,T)\n Mshift=M <<R\n for i in range(T -1,0,-1):\n  y=_div_nearest(x *(Mshift+y),Mshift *i)\n  \n  \n for k in range(R -1,-1,-1):\n  Mshift=M <<(k+2)\n  y=_div_nearest(y *(y+Mshift),Mshift)\n  \n return M+y\n \ndef _dexp(c,e,p):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n p +=2\n \n \n extra=max(0,e+len(str(c))-1)\n q=p+extra\n \n \n \n shift=e+q\n if shift >=0:\n  cshift=c *10 **shift\n else :\n  cshift=c //10 **-shift\n quot,rem=divmod(cshift,_log10_digits(q))\n \n \n rem=_div_nearest(rem,10 **extra)\n \n \n return _div_nearest(_iexp(rem,10 **p),1000),quot -p+3\n \ndef _dpower(xc,xe,yc,ye,p):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n b=len(str(abs(yc)))+ye\n \n \n lxc=_dlog(xc,xe,p+b+1)\n \n \n shift=ye -b\n if shift >=0:\n  pc=lxc *yc *10 **shift\n else :\n  pc=_div_nearest(lxc *yc,10 **-shift)\n  \n if pc ==0:\n \n \n  if ((len(str(xc))+xe >=1)==(yc >0)):\n   coeff,exp=10 **(p -1)+1,1 -p\n  else :\n   coeff,exp=10 **p -1,-p\n else :\n  coeff,exp=_dexp(pc,-(p+1),p+1)\n  coeff=_div_nearest(coeff,10)\n  exp +=1\n  \n return coeff,exp\n \ndef _log10_lb(c,correction={\n'1':100,'2':70,'3':53,'4':40,'5':31,\n'6':23,'7':16,'8':10,'9':5}):\n ''\n if c <=0:\n  raise ValueError(\"The argument to _log10_lb should be nonnegative.\")\n str_c=str(c)\n return 100 *len(str_c)-correction[str_c[0]]\n \n \n \ndef _convert_other(other,raiseit=False ,allow_float=False ):\n ''\n\n\n\n\n\n \n if isinstance(other,Decimal):\n  return other\n if isinstance(other,int):\n  return Decimal(other)\n if allow_float and isinstance(other,float):\n  return Decimal.from_float(other)\n  \n if raiseit:\n  raise TypeError(\"Unable to convert %s to Decimal\"%other)\n return NotImplemented\n \ndef _convert_for_comparison(self,other,equality_op=False ):\n ''\n\n\n\n\n \n if isinstance(other,Decimal):\n  return self,other\n  \n  \n  \n  \n  \n if isinstance(other,_numbers.Rational):\n  if not self._is_special:\n   self=_dec_from_triple(self._sign,\n   str(int(self._int)*other.denominator),\n   self._exp)\n  return self,Decimal(other.numerator)\n  \n  \n  \n  \n if equality_op and isinstance(other,_numbers.Complex)and other.imag ==0:\n  other=other.real\n if isinstance(other,float):\n  context=getcontext()\n  if equality_op:\n   context.flags[FloatOperation]=1\n  else :\n   context._raise_error(FloatOperation,\n   \"strict semantics for mixing floats and Decimals are enabled\")\n  return self,Decimal.from_float(other)\n return NotImplemented,NotImplemented\n \n \n \n \n \n \n \nDefaultContext=Context(\nprec=17,rounding=ROUND_HALF_EVEN,\ntraps=[DivisionByZero,Overflow,InvalidOperation],\nflags=[],\nEmax=308,\nEmin=-324,\ncapitals=1,\nclamp=0\n)\n\n\n\n\n\n\nBasicContext=Context(\nprec=9,rounding=ROUND_HALF_UP,\ntraps=[DivisionByZero,Overflow,InvalidOperation,Clamped,Underflow],\nflags=[],\n)\n\nExtendedContext=Context(\nprec=9,rounding=ROUND_HALF_EVEN,\ntraps=[],\nflags=[],\n)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport _jsre as re\n_all_zeros=re.compile('0*$').match\n_exact_half=re.compile('50*$').match\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndel re\n\n\n\n\ntry :\n import locale as _locale\nexcept ImportError:\n pass\n \ndef _parse_format_specifier(format_spec,_localeconv=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n m=_parse_format_specifier_regex.match(format_spec)\n if m is None :\n  raise ValueError(\"Invalid format specifier: \"+format_spec)\n  \n  \n format_dict=m.groupdict()\n \n \n \n fill=format_dict['fill']\n align=format_dict['align']\n format_dict['zeropad']=(format_dict['zeropad']is not None )\n if format_dict['zeropad']:\n  if fill is not None :\n   raise ValueError(\"Fill character conflicts with '0'\"\n   \" in format specifier: \"+format_spec)\n  if align is not None :\n   raise ValueError(\"Alignment conflicts with '0' in \"\n   \"format specifier: \"+format_spec)\n format_dict['fill']=fill or' '\n \n \n \n format_dict['align']=align or'>'\n \n \n if format_dict['sign']is None :\n  format_dict['sign']='-'\n  \n  \n format_dict['minimumwidth']=int(format_dict['minimumwidth']or'0')\n if format_dict['precision']is not None :\n  format_dict['precision']=int(format_dict['precision'])\n  \n  \n  \n if format_dict['precision']==0:\n  if format_dict['type']is None or format_dict['type']in'gGn':\n   format_dict['precision']=1\n   \n   \n   \n if format_dict['type']=='n':\n \n  format_dict['type']='g'\n  if _localeconv is None :\n   _localeconv=_locale.localeconv()\n  if format_dict['thousands_sep']is not None :\n   raise ValueError(\"Explicit thousands separator conflicts with \"\n   \"'n' type in format specifier: \"+format_spec)\n  format_dict['thousands_sep']=_localeconv['thousands_sep']\n  format_dict['grouping']=_localeconv['grouping']\n  format_dict['decimal_point']=_localeconv['decimal_point']\n else :\n  if format_dict['thousands_sep']is None :\n   format_dict['thousands_sep']=''\n  format_dict['grouping']=[3,0]\n  format_dict['decimal_point']='.'\n  \n return format_dict\n \ndef _format_align(sign,body,spec):\n ''\n\n\n\n\n \n \n minimumwidth=spec['minimumwidth']\n fill=spec['fill']\n padding=fill *(minimumwidth -len(sign)-len(body))\n \n align=spec['align']\n if align =='<':\n  result=sign+body+padding\n elif align =='>':\n  result=padding+sign+body\n elif align =='=':\n  result=sign+padding+body\n elif align =='^':\n  half=len(padding)//2\n  result=padding[:half]+sign+body+padding[half:]\n else :\n  raise ValueError('Unrecognised alignment field')\n  \n return result\n \ndef _group_lengths(grouping):\n ''\n\n\n \n \n \n \n \n \n \n \n \n from itertools import chain,repeat\n if not grouping:\n  return []\n elif grouping[-1]==0 and len(grouping)>=2:\n  return chain(grouping[:-1],repeat(grouping[-2]))\n elif grouping[-1]==_locale.CHAR_MAX:\n  return grouping[:-1]\n else :\n  raise ValueError('unrecognised format for grouping')\n  \ndef _insert_thousands_sep(digits,spec,min_width=1):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n sep=spec['thousands_sep']\n grouping=spec['grouping']\n \n groups=[]\n for l in _group_lengths(grouping):\n  if l <=0:\n   raise ValueError(\"group length should be positive\")\n   \n  l=min(max(len(digits),min_width,1),l)\n  groups.append('0'*(l -len(digits))+digits[-l:])\n  digits=digits[:-l]\n  min_width -=l\n  if not digits and min_width <=0:\n   break\n  min_width -=len(sep)\n else :\n  l=max(len(digits),min_width,1)\n  groups.append('0'*(l -len(digits))+digits[-l:])\n return sep.join(reversed(groups))\n \ndef _format_sign(is_negative,spec):\n ''\n \n if is_negative:\n  return'-'\n elif spec['sign']in' +':\n  return spec['sign']\n else :\n  return''\n  \ndef _format_number(is_negative,intpart,fracpart,exp,spec):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n sign=_format_sign(is_negative,spec)\n \n if fracpart or spec['alt']:\n  fracpart=spec['decimal_point']+fracpart\n  \n if exp !=0 or spec['type']in'eE':\n  echar={'E':'E','e':'e','G':'E','g':'e'}[spec['type']]\n  fracpart +=\"{0}{1:+}\".format(echar,exp)\n if spec['type']=='%':\n  fracpart +='%'\n  \n if spec['zeropad']:\n  min_width=spec['minimumwidth']-len(fracpart)-len(sign)\n else :\n  min_width=0\n intpart=_insert_thousands_sep(intpart,spec,min_width)\n \n return _format_align(sign,intpart+fracpart,spec)\n \n \n \n \n \n_Infinity=Decimal('Inf')\n_NegativeInfinity=Decimal('-Inf')\n_NaN=Decimal('NaN')\n_Zero=Decimal(0)\n_One=Decimal(1)\n_NegativeOne=Decimal(-1)\n\n\n_SignedInfinity=(_Infinity,_NegativeInfinity)\n\n\n\n_PyHASH_MODULUS=sys.hash_info.modulus\n\n_PyHASH_INF=sys.hash_info.inf\n_PyHASH_NAN=sys.hash_info.nan\n\n\n_PyHASH_10INV=pow(10,_PyHASH_MODULUS -2,_PyHASH_MODULUS)\ndel sys\n\ntry :\n import _decimal\nexcept ImportError:\n pass\nelse :\n s1=set(dir())\n s2=set(dir(_decimal))\n for name in s1 -s2:\n  del globals()[name]\n del s1,s2,name\n from _decimal import *\n \nif __name__ =='__main__':\n import doctest,decimal\n doctest.testmod(decimal)\n"], "numbers": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) for numbers, according to PEP 3141.\n\nTODO: Fill out more detailed documentation on the operators.\"\"\"\n\nfrom abc import ABCMeta,abstractmethod\n\n__all__=[\"Number\",\"Complex\",\"Real\",\"Rational\",\"Integral\"]\n\nclass Number(metaclass=ABCMeta):\n ''\n\n\n\n \n __slots__=()\n \n \n __hash__=None\n \n \n \n \n \n \n \n \n \n \nclass Complex(Number):\n ''\n\n\n\n\n\n\n\n \n \n __slots__=()\n \n @abstractmethod\n def __complex__(self):\n  ''\n  \n def __bool__(self):\n  ''\n  return self !=0\n  \n @property\n @abstractmethod\n def real(self):\n  ''\n\n\n  \n  raise NotImplementedError\n  \n @property\n @abstractmethod\n def imag(self):\n  ''\n\n\n  \n  raise NotImplementedError\n  \n @abstractmethod\n def __add__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __radd__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __neg__(self):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __pos__(self):\n  ''\n  raise NotImplementedError\n  \n def __sub__(self,other):\n  ''\n  return self+-other\n  \n def __rsub__(self,other):\n  ''\n  return -self+other\n  \n @abstractmethod\n def __mul__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rmul__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __truediv__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rtruediv__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __pow__(self,exponent):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rpow__(self,base):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __abs__(self):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def conjugate(self):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __eq__(self,other):\n  ''\n  raise NotImplementedError\n  \n def __ne__(self,other):\n  ''\n  \n  return not (self ==other)\n  \nComplex.register(complex)\n\n\nclass Real(Complex):\n ''\n\n\n\n\n\n \n \n __slots__=()\n \n @abstractmethod\n def __float__(self):\n  ''\n\n  \n  raise NotImplementedError\n  \n @abstractmethod\n def __trunc__(self):\n  ''\n\n\n\n\n\n\n\n  \n  raise NotImplementedError\n  \n @abstractmethod\n def __floor__(self):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __ceil__(self):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __round__(self,ndigits=None ):\n  ''\n\n\n\n  \n  raise NotImplementedError\n  \n def __divmod__(self,other):\n  ''\n\n\n\n  \n  return (self //other,self %other)\n  \n def __rdivmod__(self,other):\n  ''\n\n\n\n  \n  return (other //self,other %self)\n  \n @abstractmethod\n def __floordiv__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rfloordiv__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __mod__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rmod__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __lt__(self,other):\n  ''\n\n  \n  raise NotImplementedError\n  \n @abstractmethod\n def __le__(self,other):\n  ''\n  raise NotImplementedError\n  \n  \n def __complex__(self):\n  ''\n  return complex(float(self))\n  \n @property\n def real(self):\n  ''\n  return +self\n  \n @property\n def imag(self):\n  ''\n  return 0\n  \n def conjugate(self):\n  ''\n  return +self\n  \nReal.register(float)\n\n\nclass Rational(Real):\n ''\n \n __slots__=()\n \n @property\n @abstractmethod\n def numerator(self):\n  raise NotImplementedError\n  \n @property\n @abstractmethod\n def denominator(self):\n  raise NotImplementedError\n  \n  \n def __float__(self):\n  ''\n\n\n\n\n\n  \n  return self.numerator /self.denominator\n  \n  \nclass Integral(Rational):\n ''\n \n __slots__=()\n \n @abstractmethod\n def __int__(self):\n  ''\n  raise NotImplementedError\n  \n def __index__(self):\n  ''\n  return int(self)\n  \n @abstractmethod\n def __pow__(self,exponent,modulus=None ):\n  ''\n\n\n\n\n\n  \n  raise NotImplementedError\n  \n @abstractmethod\n def __lshift__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rlshift__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rshift__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rrshift__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __and__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rand__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __xor__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __rxor__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __or__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __ror__(self,other):\n  ''\n  raise NotImplementedError\n  \n @abstractmethod\n def __invert__(self):\n  ''\n  raise NotImplementedError\n  \n  \n def __float__(self):\n  ''\n  return float(int(self))\n  \n @property\n def numerator(self):\n  ''\n  return +self\n  \n @property\n def denominator(self):\n  ''\n  return 1\n  \nIntegral.register(int)\n"], "encodings.cp860": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp860',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e3,\n0x0085:0x00e0,\n0x0086:0x00c1,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00ca,\n0x008a:0x00e8,\n0x008b:0x00cd,\n0x008c:0x00d4,\n0x008d:0x00ec,\n0x008e:0x00c3,\n0x008f:0x00c2,\n0x0090:0x00c9,\n0x0091:0x00c0,\n0x0092:0x00c8,\n0x0093:0x00f4,\n0x0094:0x00f5,\n0x0095:0x00f2,\n0x0096:0x00da,\n0x0097:0x00f9,\n0x0098:0x00cc,\n0x0099:0x00d5,\n0x009a:0x00dc,\n0x009b:0x00a2,\n0x009c:0x00a3,\n0x009d:0x00d9,\n0x009e:0x20a7,\n0x009f:0x00d3,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x00d2,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe3'\n'\\xe0'\n'\\xc1'\n'\\xe7'\n'\\xea'\n'\\xca'\n'\\xe8'\n'\\xcd'\n'\\xd4'\n'\\xec'\n'\\xc3'\n'\\xc2'\n'\\xc9'\n'\\xc0'\n'\\xc8'\n'\\xf4'\n'\\xf5'\n'\\xf2'\n'\\xda'\n'\\xf9'\n'\\xcc'\n'\\xd5'\n'\\xdc'\n'\\xa2'\n'\\xa3'\n'\\xd9'\n'\\u20a7'\n'\\xd3'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\xd2'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x009b,\n0x00a3:0x009c,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00c0:0x0091,\n0x00c1:0x0086,\n0x00c2:0x008f,\n0x00c3:0x008e,\n0x00c7:0x0080,\n0x00c8:0x0092,\n0x00c9:0x0090,\n0x00ca:0x0089,\n0x00cc:0x0098,\n0x00cd:0x008b,\n0x00d1:0x00a5,\n0x00d2:0x00a9,\n0x00d3:0x009f,\n0x00d4:0x008c,\n0x00d5:0x0099,\n0x00d9:0x009d,\n0x00da:0x0096,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x0084,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x0094,\n0x00f7:0x00f6,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fc:0x0081,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "_markupbase": [".py", "''\n\n\n\n\n\n\nimport re\n\n_declname_match=re.compile(r'[a-zA-Z][-_.a-zA-Z0-9]*\\s*').match\n_declstringlit_match=re.compile(r'(\\'[^\\']*\\'|\"[^\"]*\")\\s*').match\n_commentclose=re.compile(r'--\\s*>')\n_markedsectionclose=re.compile(r']\\s*]\\s*>')\n\n\n\n\n_msmarkedsectionclose=re.compile(r']\\s*>')\n\ndel re\n\n\nclass ParserBase:\n ''\n \n \n def __init__(self):\n  if self.__class__ is ParserBase:\n   raise RuntimeError(\n   \"_markupbase.ParserBase must be subclassed\")\n   \n def error(self,message):\n  raise NotImplementedError(\n  \"subclasses of ParserBase must override error()\")\n  \n def reset(self):\n  self.lineno=1\n  self.offset=0\n  \n def getpos(self):\n  ''\n  return self.lineno,self.offset\n  \n  \n  \n  \n  \n def updatepos(self,i,j):\n  if i >=j:\n   return j\n  rawdata=self.rawdata\n  nlines=rawdata.count(\"\\n\",i,j)\n  if nlines:\n   self.lineno=self.lineno+nlines\n   pos=rawdata.rindex(\"\\n\",i,j)\n   self.offset=j -(pos+1)\n  else :\n   self.offset=self.offset+j -i\n  return j\n  \n _decl_otherchars=''\n \n \n def parse_declaration(self,i):\n \n \n \n \n \n \n \n \n \n \n  rawdata=self.rawdata\n  j=i+2\n  assert rawdata[i:j]==\"<!\",\"unexpected call to parse_declaration\"\n  if rawdata[j:j+1]==\">\":\n  \n   return j+1\n  if rawdata[j:j+1]in (\"-\",\"\"):\n  \n  \n   return -1\n   \n  n=len(rawdata)\n  if rawdata[j:j+2]=='--':\n  \n   return self.parse_comment(i)\n  elif rawdata[j]=='[':\n  \n  \n  \n  \n   return self.parse_marked_section(i)\n  else :\n   decltype,j=self._scan_name(j,i)\n  if j <0:\n   return j\n  if decltype ==\"doctype\":\n   self._decl_otherchars=''\n  while j <n:\n   c=rawdata[j]\n   if c ==\">\":\n   \n    data=rawdata[i+2:j]\n    if decltype ==\"doctype\":\n     self.handle_decl(data)\n    else :\n    \n    \n    \n    \n     self.unknown_decl(data)\n    return j+1\n   if c in\"\\\"'\":\n    m=_declstringlit_match(rawdata,j)\n    if not m:\n     return -1\n    j=m.end()\n   elif c in\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\":\n    name,j=self._scan_name(j,i)\n   elif c in self._decl_otherchars:\n    j=j+1\n   elif c ==\"[\":\n   \n    if decltype ==\"doctype\":\n     j=self._parse_doctype_subset(j+1,i)\n    elif decltype in {\"attlist\",\"linktype\",\"link\",\"element\"}:\n    \n    \n    \n    \n     self.error(\"unsupported '[' char in %s declaration\"%decltype)\n    else :\n     self.error(\"unexpected '[' char in declaration\")\n   else :\n    self.error(\n    \"unexpected %r char in declaration\"%rawdata[j])\n   if j <0:\n    return j\n  return -1\n  \n  \n  \n def parse_marked_section(self,i,report=1):\n  rawdata=self.rawdata\n  assert rawdata[i:i+3]=='<![',\"unexpected call to parse_marked_section()\"\n  sectName,j=self._scan_name(i+3,i)\n  if j <0:\n   return j\n  if sectName in {\"temp\",\"cdata\",\"ignore\",\"include\",\"rcdata\"}:\n  \n   match=_markedsectionclose.search(rawdata,i+3)\n  elif sectName in {\"if\",\"else\",\"endif\"}:\n  \n   match=_msmarkedsectionclose.search(rawdata,i+3)\n  else :\n   self.error('unknown status keyword %r in marked section'%rawdata[i+3:j])\n  if not match:\n   return -1\n  if report:\n   j=match.start(0)\n   self.unknown_decl(rawdata[i+3:j])\n  return match.end(0)\n  \n  \n def parse_comment(self,i,report=1):\n  rawdata=self.rawdata\n  if rawdata[i:i+4]!='<!--':\n   self.error('unexpected call to parse_comment()')\n  match=_commentclose.search(rawdata,i+4)\n  if not match:\n   return -1\n  if report:\n   j=match.start(0)\n   self.handle_comment(rawdata[i+4:j])\n  return match.end(0)\n  \n  \n  \n def _parse_doctype_subset(self,i,declstartpos):\n  rawdata=self.rawdata\n  n=len(rawdata)\n  j=i\n  while j <n:\n   c=rawdata[j]\n   if c ==\"<\":\n    s=rawdata[j:j+2]\n    if s ==\"<\":\n    \n     return -1\n    if s !=\"<!\":\n     self.updatepos(declstartpos,j+1)\n     self.error(\"unexpected char in internal subset (in %r)\"%s)\n    if (j+2)==n:\n    \n     return -1\n    if (j+4)>n:\n    \n     return -1\n    if rawdata[j:j+4]==\"<!--\":\n     j=self.parse_comment(j,report=0)\n     if j <0:\n      return j\n     continue\n    name,j=self._scan_name(j+2,declstartpos)\n    if j ==-1:\n     return -1\n    if name not in {\"attlist\",\"element\",\"entity\",\"notation\"}:\n     self.updatepos(declstartpos,j+2)\n     self.error(\n     \"unknown declaration %r in internal subset\"%name)\n     \n    meth=getattr(self,\"_parse_doctype_\"+name)\n    j=meth(j,declstartpos)\n    if j <0:\n     return j\n   elif c ==\"%\":\n   \n    if (j+1)==n:\n    \n     return -1\n    s,j=self._scan_name(j+1,declstartpos)\n    if j <0:\n     return j\n    if rawdata[j]==\";\":\n     j=j+1\n   elif c ==\"]\":\n    j=j+1\n    while j <n and rawdata[j].isspace():\n     j=j+1\n    if j <n:\n     if rawdata[j]==\">\":\n      return j\n     self.updatepos(declstartpos,j)\n     self.error(\"unexpected char after internal subset\")\n    else :\n     return -1\n   elif c.isspace():\n    j=j+1\n   else :\n    self.updatepos(declstartpos,j)\n    self.error(\"unexpected char %r in internal subset\"%c)\n    \n  return -1\n  \n  \n def _parse_doctype_element(self,i,declstartpos):\n  name,j=self._scan_name(i,declstartpos)\n  if j ==-1:\n   return -1\n   \n  rawdata=self.rawdata\n  if'>'in rawdata[j:]:\n   return rawdata.find(\">\",j)+1\n  return -1\n  \n  \n def _parse_doctype_attlist(self,i,declstartpos):\n  rawdata=self.rawdata\n  name,j=self._scan_name(i,declstartpos)\n  c=rawdata[j:j+1]\n  if c ==\"\":\n   return -1\n  if c ==\">\":\n   return j+1\n  while 1:\n  \n  \n   name,j=self._scan_name(j,declstartpos)\n   if j <0:\n    return j\n   c=rawdata[j:j+1]\n   if c ==\"\":\n    return -1\n   if c ==\"(\":\n   \n    if\")\"in rawdata[j:]:\n     j=rawdata.find(\")\",j)+1\n    else :\n     return -1\n    while rawdata[j:j+1].isspace():\n     j=j+1\n    if not rawdata[j:]:\n    \n     return -1\n   else :\n    name,j=self._scan_name(j,declstartpos)\n   c=rawdata[j:j+1]\n   if not c:\n    return -1\n   if c in\"'\\\"\":\n    m=_declstringlit_match(rawdata,j)\n    if m:\n     j=m.end()\n    else :\n     return -1\n    c=rawdata[j:j+1]\n    if not c:\n     return -1\n   if c ==\"#\":\n    if rawdata[j:]==\"#\":\n    \n     return -1\n    name,j=self._scan_name(j+1,declstartpos)\n    if j <0:\n     return j\n    c=rawdata[j:j+1]\n    if not c:\n     return -1\n   if c =='>':\n   \n    return j+1\n    \n    \n def _parse_doctype_notation(self,i,declstartpos):\n  name,j=self._scan_name(i,declstartpos)\n  if j <0:\n   return j\n  rawdata=self.rawdata\n  while 1:\n   c=rawdata[j:j+1]\n   if not c:\n   \n    return -1\n   if c =='>':\n    return j+1\n   if c in\"'\\\"\":\n    m=_declstringlit_match(rawdata,j)\n    if not m:\n     return -1\n    j=m.end()\n   else :\n    name,j=self._scan_name(j,declstartpos)\n    if j <0:\n     return j\n     \n     \n def _parse_doctype_entity(self,i,declstartpos):\n  rawdata=self.rawdata\n  if rawdata[i:i+1]==\"%\":\n   j=i+1\n   while 1:\n    c=rawdata[j:j+1]\n    if not c:\n     return -1\n    if c.isspace():\n     j=j+1\n    else :\n     break\n  else :\n   j=i\n  name,j=self._scan_name(j,declstartpos)\n  if j <0:\n   return j\n  while 1:\n   c=self.rawdata[j:j+1]\n   if not c:\n    return -1\n   if c in\"'\\\"\":\n    m=_declstringlit_match(rawdata,j)\n    if m:\n     j=m.end()\n    else :\n     return -1\n   elif c ==\">\":\n    return j+1\n   else :\n    name,j=self._scan_name(j,declstartpos)\n    if j <0:\n     return j\n     \n     \n     \n def _scan_name(self,i,declstartpos):\n  rawdata=self.rawdata\n  n=len(rawdata)\n  if i ==n:\n   return None ,-1\n  m=_declname_match(rawdata,i)\n  if m:\n   s=m.group()\n   name=s.strip()\n   if (i+len(s))==n:\n    return None ,-1\n   return name.lower(),m.end()\n  else :\n   self.updatepos(declstartpos,i)\n   self.error(\"expected name token at %r\"\n   %rawdata[declstartpos:declstartpos+20])\n   \n   \n def unknown_decl(self,data):\n  pass\n"], "encodings.iso8859_13": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-13',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u201d'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\u201e'\n'\\xa6'\n'\\xa7'\n'\\xd8'\n'\\xa9'\n'\\u0156'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xc6'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\u201c'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xf8'\n'\\xb9'\n'\\u0157'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xe6'\n'\\u0104'\n'\\u012e'\n'\\u0100'\n'\\u0106'\n'\\xc4'\n'\\xc5'\n'\\u0118'\n'\\u0112'\n'\\u010c'\n'\\xc9'\n'\\u0179'\n'\\u0116'\n'\\u0122'\n'\\u0136'\n'\\u012a'\n'\\u013b'\n'\\u0160'\n'\\u0143'\n'\\u0145'\n'\\xd3'\n'\\u014c'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\u0172'\n'\\u0141'\n'\\u015a'\n'\\u016a'\n'\\xdc'\n'\\u017b'\n'\\u017d'\n'\\xdf'\n'\\u0105'\n'\\u012f'\n'\\u0101'\n'\\u0107'\n'\\xe4'\n'\\xe5'\n'\\u0119'\n'\\u0113'\n'\\u010d'\n'\\xe9'\n'\\u017a'\n'\\u0117'\n'\\u0123'\n'\\u0137'\n'\\u012b'\n'\\u013c'\n'\\u0161'\n'\\u0144'\n'\\u0146'\n'\\xf3'\n'\\u014d'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\u0173'\n'\\u0142'\n'\\u015b'\n'\\u016b'\n'\\xfc'\n'\\u017c'\n'\\u017e'\n'\\u2019'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "keyword": [".py", "#! /usr/bin/env python3\n\n\"\"\"Keywords (from \"graminit.c\")\n\nThis file is automatically generated; please don't muck it up!\n\nTo update the symbols in this file, 'cd' to the top directory of\nthe python source tree after building the interpreter and run:\n\n    ./python Lib/keyword.py\n\"\"\"\n\n__all__=[\"iskeyword\",\"kwlist\"]\n\nkwlist=[\n\n'False',\n'None',\n'True',\n'and',\n'as',\n'assert',\n'break',\n'class',\n'continue',\n'def',\n'del',\n'elif',\n'else',\n'except',\n'finally',\n'for',\n'from',\n'global',\n'if',\n'import',\n'in',\n'is',\n'lambda',\n'nonlocal',\n'not',\n'or',\n'pass',\n'raise',\n'return',\n'try',\n'while',\n'with',\n'yield',\n\n]\n\niskeyword=frozenset(kwlist).__contains__\n\ndef main():\n import sys,re\n \n args=sys.argv[1:]\n iptfile=args and args[0]or\"Python/graminit.c\"\n if len(args)>1:optfile=args[1]\n else :optfile=\"Lib/keyword.py\"\n \n \n with open(iptfile)as fp:\n  strprog=re.compile('\"([^\"]+)\"')\n  lines=[]\n  for line in fp:\n   if'{1, \"'in line:\n    match=strprog.search(line)\n    if match:\n     lines.append(\"        '\"+match.group(1)+\"',\\n\")\n lines.sort()\n \n \n with open(optfile)as fp:\n  format=fp.readlines()\n  \n  \n try :\n  start=format.index(\"#--start keywords--\\n\")+1\n  end=format.index(\"#--end keywords--\\n\")\n  format[start:end]=lines\n except ValueError:\n  sys.stderr.write(\"target does not contain format markers\\n\")\n  sys.exit(1)\n  \n  \n fp=open(optfile,'w')\n fp.write(''.join(format))\n fp.close()\n \nif __name__ ==\"__main__\":\n main()\n"], "_html": [".js", "// creation of an HTML element\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\nvar $TagSumDict = $B.$TagSum.$dict\n\nfunction makeTagDict(tagName){\n    // return the dictionary for the class associated with tagName\n    var dict = {__class__:$B.$type,\n        __name__:tagName\n        }\n\n    dict.__init__ = function(){\n        var $ns=$B.args('__init__',1,{self:null},['self'],\n            arguments,{},'args','kw')\n        var self = $ns['self']\n        var args = $ns['args']\n        if(args.length==1){\n            var first=args[0]\n            if(_b_.isinstance(first,[_b_.str,_b_.int,_b_.float])){\n                self.elt.appendChild(document.createTextNode(_b_.str(first)))\n            } else if(first.__class__===$TagSumDict){\n                for(var i=0, _len_i = first.children.length; i < _len_i;i++){\n                    self.elt.appendChild(first.children[i].elt)\n                }\n            } else { // argument is another DOMNode instance\n                try{self.elt.appendChild(first.elt)}\n                catch(err){throw _b_.ValueError('wrong element '+first)}\n            }\n        }\n\n        // attributes\n        var items = _b_.list(_b_.dict.$dict.items($ns['kw']))\n        for(var i=0, _len_i = items.length; i < _len_i;i++){\n            // keyword arguments\n            var arg = items[i][0]\n            var value = items[i][1]\n            if(arg.toLowerCase().substr(0,2)===\"on\"){ \n                // Event binding passed as argument \"onclick\", \"onfocus\"...\n                // Better use method bind of DOMNode objects\n                var js = '$B.DOMNodeDict.bind(self,\"'\n                js += arg.toLowerCase().substr(2)+'\",function(){eval(\"'+value+'\")})'\n                eval(js)\n            }else if(arg.toLowerCase()==\"style\"){\n                $B.DOMNodeDict.set_style(self,value)\n            } else {\n                if(value!==false){\n                    // option.selected=false sets it to true :-)\n                    try{\n                        arg = arg.toLowerCase().replace('_','-')\n                        self.elt.setAttribute(arg,value)\n                    }catch(err){\n                        throw _b_.ValueError(\"can't set attribute \"+arg)\n                    }\n                }\n            }\n        }\n    }\n\n    dict.__mro__ = [dict,$B.DOMNodeDict,$B.builtins.object.$dict]\n\n    dict.__new__ = function(cls){\n        // __new__ must be defined explicitely : it returns an instance of\n        // DOMNode for the specified tagName\n        var res = $B.DOMNode(document.createElement(tagName))\n        res.__class__ = cls.$dict\n        return res\n    }\n\n    return dict\n}\n\n\n// the classes used for tag sums, $TagSum and $TagSumClass \n// are defined in py_dom.js\n\nfunction makeFactory(tagName){\n    var factory = function(){\n        var res = $B.DOMNode(document.createElement(tagName))\n        res.__class__ = dicts[tagName]\n        // apply __init__\n        var args = [res].concat(Array.prototype.slice.call(arguments))\n        dicts[tagName].__init__.apply(null,args)\n        return res\n    }\n    factory.__class__=$B.$factory\n    factory.$dict = dicts[tagName]\n    return factory\n}\n\n// All HTML 4, 5.x extracted from\n// https://w3c.github.io/elements-of-html/\n// HTML4.01 tags\nvar $tags = ['A','ABBR','ACRONYM','ADDRESS','APPLET','AREA','B','BASE',\n            'BASEFONT','BDO','BIG','BLOCKQUOTE','BODY','BR','BUTTON',\n            'CAPTION','CENTER','CITE','CODE','COL','COLGROUP','DD',\n            'DEL','DFN','DIR','DIV','DL','DT','EM','FIELDSET','FONT',\n            'FORM','FRAME','FRAMESET','H1','H2','H3','H4','H5','H6',\n            'HEAD','HR','HTML','I','IFRAME','IMG','INPUT','INS',\n            'ISINDEX','KBD','LABEL','LEGEND','LI','LINK','MAP','MENU',\n            'META','NOFRAMES','NOSCRIPT','OBJECT','OL','OPTGROUP',\n            'OPTION','P','PARAM','PRE','Q','S','SAMP','SCRIPT','SELECT',\n            'SMALL','SPAN','STRIKE','STRONG','STYLE','SUB','SUP',\n            'TABLE','TBODY','TD','TEXTAREA','TFOOT','TH','THEAD',\n            'TITLE','TR','TT','U','UL','VAR',\n            // HTML5 tags\n            'ARTICLE','ASIDE','AUDIO','BDI','CANVAS','COMMAND','DATA',\n            'DATALIST','EMBED','FIGCAPTION','FIGURE','FOOTER','HEADER',\n            'KEYGEN','MAIN','MARK','MATH','METER','NAV','OUTPUT',\n            'PROGRESS','RB','RP','RT','RTC','RUBY','SECTION','SOURCE',\n            'TEMPLATE','TIME','TRACK','VIDEO','WBR',\n             // HTML5.1 tags\n            'DETAILS','DIALOG','MENUITEM','PICTURE','SUMMARY']\n\n// create classes\nvar obj = new Object()\nvar dicts = {}\nfor(var i=0, _len_i = $tags.length; i < _len_i;i++){\n    var tag = $tags[i]\n    dicts[tag] = makeTagDict(tag)\n    obj[tag] = makeFactory(tag)\n    dicts[tag].$factory = obj[tag]\n}\n$B.tag_classes = dicts\nreturn obj\n})(__BRYTHON__)\n"], "_strptime": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\nimport time\nimport locale\nimport calendar\nfrom re import compile as re_compile\nfrom re import IGNORECASE\nfrom re import escape as re_escape\nfrom datetime import (date as datetime_date,\ntimedelta as datetime_timedelta,\ntimezone as datetime_timezone)\ntry :\n from _thread import allocate_lock as _thread_allocate_lock\nexcept ImportError:\n from _dummy_thread import allocate_lock as _thread_allocate_lock\n \n__all__=[]\n\ndef _getlang():\n\n return locale.getlocale(locale.LC_TIME)\n \nclass LocaleTime(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self.lang=_getlang()\n  self.__calc_weekday()\n  self.__calc_month()\n  self.__calc_am_pm()\n  self.__calc_timezone()\n  self.__calc_date_time()\n  if _getlang()!=self.lang:\n   raise ValueError(\"locale changed during initialization\")\n   \n def __pad(self,seq,front):\n \n  seq=list(seq)\n  if front:\n   seq.insert(0,'')\n  else :\n   seq.append('')\n  return seq\n  \n def __calc_weekday(self):\n \n \n  a_weekday=[calendar.day_abbr[i].lower()for i in range(7)]\n  f_weekday=[calendar.day_name[i].lower()for i in range(7)]\n  self.a_weekday=a_weekday\n  self.f_weekday=f_weekday\n  \n def __calc_month(self):\n \n  a_month=[calendar.month_abbr[i].lower()for i in range(13)]\n  f_month=[calendar.month_name[i].lower()for i in range(13)]\n  self.a_month=a_month\n  self.f_month=f_month\n  \n def __calc_am_pm(self):\n \n \n \n \n \n  am_pm=[]\n  for hour in (1,22):\n   time_tuple=time.struct_time((1999,3,17,hour,44,55,2,76,0))\n   am_pm.append(time.strftime(\"%p\",time_tuple).lower())\n  self.am_pm=am_pm\n  \n def __calc_date_time(self):\n \n \n \n \n \n \n \n  time_tuple=time.struct_time((1999,3,17,22,44,55,2,76,0))\n  date_time=[None ,None ,None ]\n  date_time[0]=time.strftime(\"%c\",time_tuple).lower()\n  date_time[1]=time.strftime(\"%x\",time_tuple).lower()\n  date_time[2]=time.strftime(\"%X\",time_tuple).lower()\n  replacement_pairs=[('%','%%'),(self.f_weekday[2],'%A'),\n  (self.f_month[3],'%B'),(self.a_weekday[2],'%a'),\n  (self.a_month[3],'%b'),(self.am_pm[1],'%p'),\n  ('1999','%Y'),('99','%y'),('22','%H'),\n  ('44','%M'),('55','%S'),('76','%j'),\n  ('17','%d'),('03','%m'),('3','%m'),\n  \n  ('2','%w'),('10','%I')]\n  replacement_pairs.extend([(tz,\"%Z\")for tz_values in self.timezone\n  for tz in tz_values])\n  for offset,directive in ((0,'%c'),(1,'%x'),(2,'%X')):\n   current_format=date_time[offset]\n   for old,new in replacement_pairs:\n   \n   \n   \n   \n    if old:\n     current_format=current_format.replace(old,new)\n     \n     \n     \n   time_tuple=time.struct_time((1999,1,3,1,1,1,6,3,0))\n   if'00'in time.strftime(directive,time_tuple):\n    U_W='%W'\n   else :\n    U_W='%U'\n   date_time[offset]=current_format.replace('11',U_W)\n  self.LC_date_time=date_time[0]\n  self.LC_date=date_time[1]\n  self.LC_time=date_time[2]\n  \n def __calc_timezone(self):\n \n \n \n \n \n \n \n  no_saving=frozenset([\"utc\",\"gmt\",time.tzname[0].lower()])\n  if time.daylight:\n   has_saving=frozenset([time.tzname[1].lower()])\n  else :\n   has_saving=frozenset()\n  self.timezone=(no_saving,has_saving)\n  \n  \nclass TimeRE(dict):\n ''\n \n def __init__(self,locale_time=None ):\n  ''\n\n\n\n  \n  if locale_time:\n   self.locale_time=locale_time\n  else :\n   self.locale_time=LocaleTime()\n  base=super()\n  base.__init__({\n  \n  'd':r\"(?P<d>3[0-1]|[1-2]\\d|0[1-9]|[1-9]| [1-9])\",\n  'f':r\"(?P<f>[0-9]{1,6})\",\n  'H':r\"(?P<H>2[0-3]|[0-1]\\d|\\d)\",\n  'I':r\"(?P<I>1[0-2]|0[1-9]|[1-9])\",\n  'j':r\"(?P<j>36[0-6]|3[0-5]\\d|[1-2]\\d\\d|0[1-9]\\d|00[1-9]|[1-9]\\d|0[1-9]|[1-9])\",\n  'm':r\"(?P<m>1[0-2]|0[1-9]|[1-9])\",\n  'M':r\"(?P<M>[0-5]\\d|\\d)\",\n  'S':r\"(?P<S>6[0-1]|[0-5]\\d|\\d)\",\n  'U':r\"(?P<U>5[0-3]|[0-4]\\d|\\d)\",\n  'w':r\"(?P<w>[0-6])\",\n  \n  'y':r\"(?P<y>\\d\\d)\",\n  \n  \n  'Y':r\"(?P<Y>\\d\\d\\d\\d)\",\n  'z':r\"(?P<z>[+-]\\d\\d[0-5]\\d)\",\n  'A':self.__seqToRE(self.locale_time.f_weekday,'A'),\n  'a':self.__seqToRE(self.locale_time.a_weekday,'a'),\n  'B':self.__seqToRE(self.locale_time.f_month[1:],'B'),\n  'b':self.__seqToRE(self.locale_time.a_month[1:],'b'),\n  'p':self.__seqToRE(self.locale_time.am_pm,'p'),\n  'Z':self.__seqToRE((tz for tz_names in self.locale_time.timezone\n  for tz in tz_names),\n  'Z'),\n  '%':'%'})\n  base.__setitem__('W',base.__getitem__('U').replace('U','W'))\n  base.__setitem__('c',self.pattern(self.locale_time.LC_date_time))\n  base.__setitem__('x',self.pattern(self.locale_time.LC_date))\n  base.__setitem__('X',self.pattern(self.locale_time.LC_time))\n  \n def __seqToRE(self,to_convert,directive):\n  ''\n\n\n\n\n\n\n  \n  to_convert=sorted(to_convert,key=len,reverse=True )\n  for value in to_convert:\n   if value !='':\n    break\n  else :\n   return''\n  regex='|'.join(re_escape(stuff)for stuff in to_convert)\n  regex='(?P<%s>%s'%(directive,regex)\n  return'%s)'%regex\n  \n def pattern(self,format):\n  ''\n\n\n\n\n  \n  processed_format=''\n  \n  \n  \n  regex_chars=re_compile(r\"([\\\\.^$*+?\\(\\){}\\[\\]|])\")\n  format=regex_chars.sub(r\"\\\\\\1\",format)\n  whitespace_replacement=re_compile('\\s+')\n  format=whitespace_replacement.sub('\\s+',format)\n  while'%'in format:\n   directive_index=format.index('%')+1\n   processed_format=\"%s%s%s\"%(processed_format,\n   format[:directive_index -1],\n   self[format[directive_index]])\n   format=format[directive_index+1:]\n  return\"%s%s\"%(processed_format,format)\n  \n def compile(self,format):\n  ''\n  return re_compile(self.pattern(format),IGNORECASE)\n  \n_cache_lock=_thread_allocate_lock()\n\n\n_TimeRE_cache=TimeRE()\n_CACHE_MAX_SIZE=5\n_regex_cache={}\n\ndef _calc_julian_from_U_or_W(year,week_of_year,day_of_week,week_starts_Mon):\n ''\n\n \n first_weekday=datetime_date(year,1,1).weekday()\n \n \n \n if not week_starts_Mon:\n  first_weekday=(first_weekday+1)%7\n  day_of_week=(day_of_week+1)%7\n  \n  \n week_0_length=(7 -first_weekday)%7\n if week_of_year ==0:\n  return 1+day_of_week -first_weekday\n else :\n  days_to_week=week_0_length+(7 *(week_of_year -1))\n  return 1+days_to_week+day_of_week\n  \n  \ndef _strptime(data_string,format=\"%a %b %d %H:%M:%S %Y\"):\n ''\n\n \n \n for index,arg in enumerate([data_string,format]):\n  if not isinstance(arg,str):\n   msg=\"strptime() argument {} must be str, not {}\"\n   raise TypeError(msg.format(index,type(arg)))\n   \n global _TimeRE_cache,_regex_cache\n with _cache_lock:\n \n  if _getlang()!=_TimeRE_cache.locale_time.lang:\n   _TimeRE_cache=TimeRE()\n   _regex_cache.clear()\n  if len(_regex_cache)>_CACHE_MAX_SIZE:\n   _regex_cache.clear()\n  locale_time=_TimeRE_cache.locale_time\n  format_regex=_regex_cache.get(format)\n  if not format_regex:\n   try :\n    format_regex=_TimeRE_cache.compile(format)\n    \n    \n   except KeyError as err:\n    bad_directive=err.args[0]\n    if bad_directive ==\"\\\\\":\n     bad_directive=\"%\"\n    del err\n    raise ValueError(\"'%s' is a bad directive in format '%s'\"%\n    (bad_directive,format))from None\n    \n   except IndexError:\n    raise ValueError(\"stray %% in format '%s'\"%format)from None\n   _regex_cache[format]=format_regex\n found=format_regex.match(data_string)\n if not found:\n  raise ValueError(\"time data %r does not match format %r\"%\n  (data_string,format))\n if len(data_string)!=found.end():\n  raise ValueError(\"unconverted data remains: %s\"%\n  data_string[found.end():])\n  \n year=None\n month=day=1\n hour=minute=second=fraction=0\n tz=-1\n tzoffset=None\n \n \n week_of_year=-1\n week_of_year_start=-1\n \n \n weekday=julian=-1\n found_dict=found.groupdict()\n for group_key in found_dict.keys():\n \n \n \n \n \n  if group_key =='y':\n   year=int(found_dict['y'])\n   \n   \n   \n   if year <=68:\n    year +=2000\n   else :\n    year +=1900\n  elif group_key =='Y':\n   year=int(found_dict['Y'])\n  elif group_key =='m':\n   month=int(found_dict['m'])\n  elif group_key =='B':\n   month=locale_time.f_month.index(found_dict['B'].lower())\n  elif group_key =='b':\n   month=locale_time.a_month.index(found_dict['b'].lower())\n  elif group_key =='d':\n   day=int(found_dict['d'])\n  elif group_key =='H':\n   hour=int(found_dict['H'])\n  elif group_key =='I':\n   hour=int(found_dict['I'])\n   ampm=found_dict.get('p','').lower()\n   \n   if ampm in ('',locale_time.am_pm[0]):\n   \n   \n   \n    if hour ==12:\n     hour=0\n   elif ampm ==locale_time.am_pm[1]:\n   \n   \n   \n    if hour !=12:\n     hour +=12\n  elif group_key =='M':\n   minute=int(found_dict['M'])\n  elif group_key =='S':\n   second=int(found_dict['S'])\n  elif group_key =='f':\n   s=found_dict['f']\n   \n   s +=\"0\"*(6 -len(s))\n   fraction=int(s)\n  elif group_key =='A':\n   weekday=locale_time.f_weekday.index(found_dict['A'].lower())\n  elif group_key =='a':\n   weekday=locale_time.a_weekday.index(found_dict['a'].lower())\n  elif group_key =='w':\n   weekday=int(found_dict['w'])\n   if weekday ==0:\n    weekday=6\n   else :\n    weekday -=1\n  elif group_key =='j':\n   julian=int(found_dict['j'])\n  elif group_key in ('U','W'):\n   week_of_year=int(found_dict[group_key])\n   if group_key =='U':\n   \n    week_of_year_start=6\n   else :\n   \n    week_of_year_start=0\n  elif group_key =='z':\n   z=found_dict['z']\n   tzoffset=int(z[1:3])*60+int(z[3:5])\n   if z.startswith(\"-\"):\n    tzoffset=-tzoffset\n  elif group_key =='Z':\n  \n  \n   found_zone=found_dict['Z'].lower()\n   for value,tz_values in enumerate(locale_time.timezone):\n    if found_zone in tz_values:\n    \n    \n    \n     if (time.tzname[0]==time.tzname[1]and\n     time.daylight and found_zone not in (\"utc\",\"gmt\")):\n      break\n     else :\n      tz=value\n      break\n leap_year_fix=False\n if year is None and month ==2 and day ==29:\n  year=1904\n  leap_year_fix=True\n elif year is None :\n  year=1900\n  \n  \n if julian ==-1 and week_of_year !=-1 and weekday !=-1:\n  week_starts_Mon=True if week_of_year_start ==0 else False\n  julian=_calc_julian_from_U_or_W(year,week_of_year,weekday,\n  week_starts_Mon)\n  \n  \n  \n if julian ==-1:\n \n  julian=datetime_date(year,month,day).toordinal()-  datetime_date(year,1,1).toordinal()+1\n else :\n \n  datetime_result=datetime_date.fromordinal((julian -1)+datetime_date(year,1,1).toordinal())\n  year=datetime_result.year\n  month=datetime_result.month\n  day=datetime_result.day\n if weekday ==-1:\n  weekday=datetime_date(year,month,day).weekday()\n  \n tzname=found_dict.get(\"Z\")\n if tzoffset is not None :\n  gmtoff=tzoffset *60\n else :\n  gmtoff=None\n  \n if leap_year_fix:\n \n \n \n  year=1900\n  \n return (year,month,day,\n hour,minute,second,\n weekday,julian,tz,tzname,gmtoff),fraction\n \ndef _strptime_time(data_string,format=\"%a %b %d %H:%M:%S %Y\"):\n ''\n \n tt=_strptime(data_string,format)[0]\n return time.struct_time(tt[:time._STRUCT_TM_ITEMS])\n \ndef _strptime_datetime(cls,data_string,format=\"%a %b %d %H:%M:%S %Y\"):\n ''\n \n tt,fraction=_strptime(data_string,format)\n tzname,gmtoff=tt[-2:]\n args=tt[:6]+(fraction,)\n if gmtoff is not None :\n  tzdelta=datetime_timedelta(seconds=gmtoff)\n  if tzname:\n   tz=datetime_timezone(tzdelta,tzname)\n  else :\n   tz=datetime_timezone(tzdelta)\n  args +=(tz,)\n return cls(*args)\n"], "errno": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\nerrorcode={1:'EPERM',2:'ENOENT',3:'ESRCH',4:'EINTR',5:'EIO',\n6:'ENXIO',7:'E2BIG',8:'ENOEXEC',9:'EBADF',10:'ECHILD',11:'EAGAIN',\n12:'ENOMEM',13:'EACCES',14:'EFAULT',15:'ENOTBLK',16:'EBUSY',\n17:'EEXIST',18:'EXDEV',19:'ENODEV',20:'ENOTDIR',21:'EISDIR',\n22:'EINVAL',23:'ENFILE',24:'EMFILE',25:'ENOTTY',26:'ETXTBSY',\n27:'EFBIG',28:'ENOSPC',29:'ESPIPE',30:'EROFS',31:'EMLINK',\n32:'EPIPE',33:'EDOM',34:'ERANGE',35:'EDEADLOCK',36:'ENAMETOOLONG',\n37:'ENOLCK',38:'ENOSYS',39:'ENOTEMPTY',40:'ELOOP',42:'ENOMSG',\n43:'EIDRM',44:'ECHRNG',45:'EL2NSYNC',46:'EL3HLT',47:'EL3RST',\n48:'ELNRNG',49:'EUNATCH',50:'ENOCSI',51:'EL2HLT',52:'EBADE',\n53:'EBADR',54:'EXFULL',55:'ENOANO',56:'EBADRQC',57:'EBADSLT',\n59:'EBFONT',60:'ENOSTR',61:'ENODATA',62:'ETIME',63:'ENOSR',\n64:'ENONET',65:'ENOPKG',66:'EREMOTE',67:'ENOLINK',68:'EADV',\n69:'ESRMNT',70:'ECOMM',71:'EPROTO',72:'EMULTIHOP',73:'EDOTDOT',\n74:'EBADMSG',75:'EOVERFLOW',76:'ENOTUNIQ',77:'EBADFD',78:'EREMCHG',\n79:'ELIBACC',80:'ELIBBAD',81:'ELIBSCN',82:'ELIBMAX',83:'ELIBEXEC',\n84:'EILSEQ',85:'ERESTART',86:'ESTRPIPE',87:'EUSERS',88:'ENOTSOCK',\n89:'EDESTADDRREQ',90:'EMSGSIZE',91:'EPROTOTYPE',92:'ENOPROTOOPT',\n93:'EPROTONOSUPPORT',94:'ESOCKTNOSUPPORT',95:'ENOTSUP',\n96:'EPFNOSUPPORT',97:'EAFNOSUPPORT',98:'EADDRINUSE',\n99:'EADDRNOTAVAIL',100:'ENETDOWN',101:'ENETUNREACH',102:'ENETRESET',\n103:'ECONNABORTED',104:'ECONNRESET',105:'ENOBUFS',106:'EISCONN',\n107:'ENOTCONN',108:'ESHUTDOWN',109:'ETOOMANYREFS',110:'ETIMEDOUT',\n111:'ECONNREFUSED',112:'EHOSTDOWN',113:'EHOSTUNREACH',114:'EALREADY',\n115:'EINPROGRESS',116:'ESTALE',117:'EUCLEAN',118:'ENOTNAM',\n119:'ENAVAIL',120:'EISNAM',121:'EREMOTEIO',122:'EDQUOT',\n123:'ENOMEDIUM',124:'EMEDIUMTYPE',125:'ECANCELED',126:'ENOKEY',\n127:'EKEYEXPIRED',128:'EKEYREVOKED',129:'EKEYREJECTED',\n130:'EOWNERDEAD',131:'ENOTRECOVERABLE',132:'ERFKILL'}\n\nEPERM=1\nENOENT=2\nESRCH=3\nEINTR=4\nEIO=5\nENXIO=6\nE2BIG=7\nENOEXEC=8\nEBADF=9\nECHILD=10\nEAGAIN=11\nENOMEM=12\nEACCES=13\nEFAULT=14\nENOTBLK=15\nEBUSY=16\nEEXIST=17\nEXDEV=18\nENODEV=19\nENOTDIR=20\nEISDIR=21\nEINVAL=22\nENFILE=23\nEMFILE=24\nENOTTY=25\nETXTBSY=26\nEFBIG=27\nENOSPC=28\nESPIPE=29\nEROFS=30\nEMLINK=31\nEPIPE=32\nEDOM=33\nERANGE=34\nEDEADLOCK=35\nENAMETOOLONG=36\nENOLCK=37\nENOSYS=38\nENOTEMPTY=39\nELOOP=40\nENOMSG=42\nEIDRM=43\nECHRNG=44\nEL2NSYNC=45\nEL3HLT=46\nEL3RST=47\nELNRNG=48\nEUNATCH=49\nENOCSI=50\nEL2HLT=51\nEBADE=52\nEBADR=53\nEXFULL=54\nENOANO=55\nEBADRQC=56\nEBADSLT=57\nEBFONT=59\nENOSTR=60\nENODATA=61\nETIME=62\nENOSR=63\nENONET=64\nENOPKG=65\nEREMOTE=66\nENOLINK=67\nEADV=68\nESRMNT=69\nECOMM=70\nEPROTO=71\nEMULTIHOP=72\nEDOTDOT=73\nEBADMSG=74\nEOVERFLOW=75\nENOTUNIQ=76\nEBADFD=77\nEREMCHG=78\nELIBACC=79\nELIBBAD=80\nELIBSCN=81\nELIBMAX=82\nELIBEXEC=83\nEILSEQ=84\nERESTART=85\nESTRPIPE=86\nEUSERS=87\nENOTSOCK=88\nEDESTADDRREQ=89\nEMSGSIZE=90\nEPROTOTYPE=91\nENOPROTOOPT=92\nEPROTONOSUPPORT=93\nESOCKTNOSUPPORT=94\nENOTSUP=95\nEPFNOSUPPORT=96\nEAFNOSUPPORT=97\nEADDRINUSE=98\nEADDRNOTAVAIL=99\nENETDOWN=100\nENETUNREACH=101\nENETRESET=102\nECONNABORTED=103\nECONNRESET=104\nENOBUFS=105\nEISCONN=106\nENOTCONN=107\nESHUTDOWN=108\nETOOMANYREFS=109\nETIMEDOUT=110\nECONNREFUSED=111\nEHOSTDOWN=112\nEHOSTUNREACH=113\nEALREADY=114\nEINPROGRESS=115\nESTALE=116\nEUCLEAN=117\nENOTNAM=118\nENAVAIL=119\nEISNAM=120\nEREMOTEIO=121\nEDQUOT=122\nENOMEDIUM=123\nEMEDIUMTYPE=124\nECANCELED=125\nENOKEY=126\nEKEYEXPIRED=127\nEKEYREVOKED=128\nEKEYREJECTED=129\nEOWNERDEAD=130\nENOTRECOVERABLE=131\nERFKILL=132\n"], "zlib": [".py", "\n\ndef compress(data):\n return data\n \ndef decompress(data):\n return data\n"], "struct": [".py", "__all__=[\n\n'calcsize','pack','pack_into','unpack','unpack_from',\n\n\n'Struct',\n\n\n'error'\n]\n\nfrom _struct import *\nfrom _struct import _clearcache\nfrom _struct import __doc__\n"], "_csv": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__version__=\"1.0\"\n\nQUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONNUMERIC,QUOTE_NONE=range(4)\n_dialects={}\n_field_limit=128 *1024\n\nclass Error(Exception):\n pass\n \nclass Dialect(object):\n ''\n\n \n \n __slots__=[\"_delimiter\",\"_doublequote\",\"_escapechar\",\n \"_lineterminator\",\"_quotechar\",\"_quoting\",\n \"_skipinitialspace\",\"_strict\"]\n \n def __new__(cls,dialect,**kwargs):\n \n  for name in kwargs:\n   if'_'+name not in Dialect.__slots__:\n    raise TypeError(\"unexpected keyword argument '%s'\"%\n    (name,))\n    \n  if dialect is not None :\n   if isinstance(dialect,str):\n    dialect=get_dialect(dialect)\n    \n    \n   if (isinstance(dialect,Dialect)\n   and all(value is None for value in kwargs.values())):\n    return dialect\n    \n  self=object.__new__(cls)\n  \n  \n  def set_char(x):\n   if x is None :\n    return None\n   if isinstance(x,str)and len(x)<=1:\n    return x\n   raise TypeError(\"%r must be a 1-character string\"%(name,))\n  def set_str(x):\n   if isinstance(x,str):\n    return x\n   raise TypeError(\"%r must be a string\"%(name,))\n  def set_quoting(x):\n   if x in range(4):\n    return x\n   raise TypeError(\"bad 'quoting' value\")\n   \n  attributes={\"delimiter\":(',',set_char),\n  \"doublequote\":(True ,bool),\n  \"escapechar\":(None ,set_char),\n  \"lineterminator\":(\"\\r\\n\",set_str),\n  \"quotechar\":('\"',set_char),\n  \"quoting\":(QUOTE_MINIMAL,set_quoting),\n  \"skipinitialspace\":(False ,bool),\n  \"strict\":(False ,bool),\n  }\n  \n  \n  notset=object()\n  for name in Dialect.__slots__:\n   name=name[1:]\n   value=notset\n   if name in kwargs:\n    value=kwargs[name]\n   elif dialect is not None :\n    value=getattr(dialect,name,notset)\n    \n    \n   if value is notset:\n    value=attributes[name][0]\n    if name =='quoting'and not self.quotechar:\n     value=QUOTE_NONE\n   else :\n    converter=attributes[name][1]\n    if converter:\n     value=converter(value)\n     \n   setattr(self,'_'+name,value)\n   \n  if not self.delimiter:\n   raise TypeError(\"delimiter must be set\")\n   \n  if self.quoting !=QUOTE_NONE and not self.quotechar:\n   raise TypeError(\"quotechar must be set if quoting enabled\")\n   \n  if not self.lineterminator:\n   raise TypeError(\"lineterminator must be set\")\n   \n  return self\n  \n delimiter=property(lambda self:self._delimiter)\n doublequote=property(lambda self:self._doublequote)\n escapechar=property(lambda self:self._escapechar)\n lineterminator=property(lambda self:self._lineterminator)\n quotechar=property(lambda self:self._quotechar)\n quoting=property(lambda self:self._quoting)\n skipinitialspace=property(lambda self:self._skipinitialspace)\n strict=property(lambda self:self._strict)\n \n \ndef _call_dialect(dialect_inst,kwargs):\n return Dialect(dialect_inst,**kwargs)\n \ndef register_dialect(name,dialect=None ,**kwargs):\n ''\n \n if not isinstance(name,str):\n  raise TypeError(\"dialect name must be a string or unicode\")\n  \n dialect=_call_dialect(dialect,kwargs)\n _dialects[name]=dialect\n \ndef unregister_dialect(name):\n ''\n \n try :\n  del _dialects[name]\n except KeyError:\n  raise Error(\"unknown dialect\")\n  \ndef get_dialect(name):\n ''\n \n try :\n  return _dialects[name]\n except KeyError:\n  raise Error(\"unknown dialect\")\n  \ndef list_dialects():\n ''\n \n return list(_dialects)\n \nclass Reader(object):\n ''\n\n\n \n \n \n (START_RECORD,START_FIELD,ESCAPED_CHAR,IN_FIELD,\n IN_QUOTED_FIELD,ESCAPE_IN_QUOTED_FIELD,QUOTE_IN_QUOTED_FIELD,\n EAT_CRNL)=range(8)\n \n def __init__(self,iterator,dialect=None ,**kwargs):\n  self.dialect=_call_dialect(dialect,kwargs)\n  \n  \n  \n  self._delimiter=self.dialect.delimiter if self.dialect.delimiter else'\\0'\n  self._quotechar=self.dialect.quotechar if self.dialect.quotechar else'\\0'\n  self._escapechar=self.dialect.escapechar if self.dialect.escapechar else'\\0'\n  self._doublequote=self.dialect.doublequote\n  self._quoting=self.dialect.quoting\n  self._skipinitialspace=self.dialect.skipinitialspace\n  self._strict=self.dialect.strict\n  \n  self.input_iter=iter(iterator)\n  self.line_num=0\n  \n  self._parse_reset()\n  \n def _parse_reset(self):\n  self.field=''\n  self.fields=[]\n  self.state=self.START_RECORD\n  self.numeric_field=False\n  \n def __iter__(self):\n  return self\n  \n def __next__(self):\n  self._parse_reset()\n  while True :\n   try :\n    line=next(self.input_iter)\n   except StopIteration:\n   \n    if len(self.field)>0:\n     raise Error(\"newline inside string\")\n    raise\n    \n   self.line_num +=1\n   \n   if'\\0'in line:\n    raise Error(\"line contains NULL byte\")\n   self._parse_process_char(line)\n   self._parse_eol()\n   \n   if self.state ==self.START_RECORD:\n    break\n    \n  fields=self.fields\n  self.fields=[]\n  return fields\n  \n def _parse_process_char(self,line):\n  pos=0\n  while pos <len(line):\n   if self.state ==self.IN_FIELD:\n   \n    pos2=pos\n    while pos2 <len(line):\n     if line[pos2]=='\\n'or line[pos2]=='\\r':\n     \n      if pos2 >pos:\n       self._parse_add_str(line[pos:pos2])\n       pos=pos2\n      self._parse_save_field()\n      self.state=self.EAT_CRNL\n      break\n     elif line[pos2]==self._escapechar[0]:\n     \n      if pos2 >pos:\n       self._parse_add_str(line[pos:pos2])\n      pos=pos2\n      self.state=self.ESCAPED_CHAR\n      break\n     elif line[pos2]==self._delimiter[0]:\n     \n      if pos2 >pos:\n       self._parse_add_str(line[pos:pos2])\n       pos=pos2\n      self._parse_save_field()\n      self.state=self.START_FIELD\n      break\n      \n     pos2 +=1\n    else :\n     if pos2 >pos:\n      self._parse_add_str(line[pos:pos2])\n      pos=pos2\n      continue\n      \n   elif self.state ==self.START_RECORD:\n    if line[pos]=='\\n'or line[pos]=='\\r':\n     self.state=self.EAT_CRNL\n    else :\n     self.state=self.START_FIELD\n     \n     continue\n     \n   elif self.state ==self.START_FIELD:\n    if line[pos]=='\\n'or line[pos]=='\\r':\n    \n     self._parse_save_field()\n     self.state=self.EAT_CRNL\n    elif (line[pos]==self._quotechar[0]\n    and self._quoting !=QUOTE_NONE):\n    \n     self.state=self.IN_QUOTED_FIELD\n    elif line[pos]==self._escapechar[0]:\n    \n     self.state=self.ESCAPED_CHAR\n    elif self._skipinitialspace and line[pos]==' ':\n    \n     pass\n    elif line[pos]==self._delimiter[0]:\n    \n     self._parse_save_field()\n    else :\n    \n     if self._quoting ==QUOTE_NONNUMERIC:\n      self.numeric_field=True\n     self.state=self.IN_FIELD\n     continue\n     \n   elif self.state ==self.ESCAPED_CHAR:\n    self._parse_add_char(line[pos])\n    self.state=self.IN_FIELD\n    \n   elif self.state ==self.IN_QUOTED_FIELD:\n    if line[pos]==self._escapechar:\n    \n     self.state=self.ESCAPE_IN_QUOTED_FIELD\n    elif (line[pos]==self._quotechar\n    and self._quoting !=QUOTE_NONE):\n     if self._doublequote:\n     \n      self.state=self.QUOTE_IN_QUOTED_FIELD\n     else :\n     \n      self.state=self.IN_FIELD\n    else :\n    \n     self._parse_add_char(line[pos])\n     \n   elif self.state ==self.ESCAPE_IN_QUOTED_FIELD:\n    self._parse_add_char(line[pos])\n    self.state=self.IN_QUOTED_FIELD\n    \n   elif self.state ==self.QUOTE_IN_QUOTED_FIELD:\n   \n    if (line[pos]==self._quotechar\n    and self._quoting !=QUOTE_NONE):\n    \n     self._parse_add_char(line[pos])\n     self.state=self.IN_QUOTED_FIELD\n    elif line[pos]==self._delimiter[0]:\n    \n     self._parse_save_field()\n     self.state=self.START_FIELD\n    elif line[pos]=='\\r'or line[pos]=='\\n':\n    \n     self._parse_save_field()\n     self.state=self.EAT_CRNL\n    elif not self._strict:\n     self._parse_add_char(line[pos])\n     self.state=self.IN_FIELD\n    else :\n     raise Error(\"'%c' expected after '%c'\"%\n     (self._delimiter,self._quotechar))\n     \n   elif self.state ==self.EAT_CRNL:\n    if line[pos]=='\\r'or line[pos]=='\\n':\n     pass\n    else :\n     raise Error(\"new-line character seen in unquoted field - \"\n     \"do you need to open the file \"\n     \"in universal-newline mode?\")\n     \n   else :\n    raise RuntimeError(\"unknown state: %r\"%(self.state,))\n    \n   pos +=1\n   \n def _parse_eol(self):\n  if self.state ==self.EAT_CRNL:\n   self.state=self.START_RECORD\n  elif self.state ==self.START_RECORD:\n  \n   pass\n  elif self.state ==self.IN_FIELD:\n  \n  \n   self._parse_save_field()\n   self.state=self.START_RECORD\n  elif self.state ==self.START_FIELD:\n  \n   self._parse_save_field()\n   self.state=self.START_RECORD\n  elif self.state ==self.ESCAPED_CHAR:\n   self._parse_add_char('\\n')\n   self.state=self.IN_FIELD\n  elif self.state ==self.IN_QUOTED_FIELD:\n   pass\n  elif self.state ==self.ESCAPE_IN_QUOTED_FIELD:\n   self._parse_add_char('\\n')\n   self.state=self.IN_QUOTED_FIELD\n  elif self.state ==self.QUOTE_IN_QUOTED_FIELD:\n  \n   self._parse_save_field()\n   self.state=self.START_RECORD\n  else :\n   raise RuntimeError(\"unknown state: %r\"%(self.state,))\n   \n def _parse_save_field(self):\n  field,self.field=self.field,''\n  if self.numeric_field:\n   self.numeric_field=False\n   field=float(field)\n  self.fields.append(field)\n  \n def _parse_add_char(self,c):\n  if len(self.field)+1 >_field_limit:\n   raise Error(\"field larget than field limit (%d)\"%(_field_limit))\n  self.field +=c\n  \n def _parse_add_str(self,s):\n  if len(self.field)+len(s)>_field_limit:\n   raise Error(\"field larget than field limit (%d)\"%(_field_limit))\n  self.field +=s\n  \n  \nclass Writer(object):\n ''\n\n\n \n \n def __init__(self,file,dialect=None ,**kwargs):\n  if not (hasattr(file,'write')and callable(file.write)):\n   raise TypeError(\"argument 1 must have a 'write' method\")\n  self.writeline=file.write\n  self.dialect=_call_dialect(dialect,kwargs)\n  \n def _join_reset(self):\n  self.rec=[]\n  self.num_fields=0\n  \n def _join_append(self,field,quoted,quote_empty):\n  dialect=self.dialect\n  \n  if self.num_fields >0:\n   self.rec.append(dialect.delimiter)\n   \n  if dialect.quoting ==QUOTE_NONE:\n   need_escape=tuple(dialect.lineterminator)+(\n   dialect.escapechar,\n   dialect.delimiter,dialect.quotechar)\n   \n  else :\n   for c in tuple(dialect.lineterminator)+(\n   dialect.delimiter,dialect.escapechar):\n    if c and c in field:\n     quoted=True\n     \n   need_escape=()\n   if dialect.quotechar in field:\n    if dialect.doublequote:\n     field=field.replace(dialect.quotechar,\n     dialect.quotechar *2)\n     quoted=True\n    else :\n     need_escape=(dialect.quotechar,)\n     \n     \n  for c in need_escape:\n   if c and c in field:\n    if not dialect.escapechar:\n     raise Error(\"need to escape, but no escapechar set\")\n    field=field.replace(c,dialect.escapechar+c)\n    \n    \n  if field ==''and quote_empty:\n   if dialect.quoting ==QUOTE_NONE:\n    raise Error(\"single empty field record must be quoted\")\n   quoted=1\n   \n  if quoted:\n   field=dialect.quotechar+field+dialect.quotechar\n   \n  self.rec.append(field)\n  self.num_fields +=1\n  \n  \n  \n def writerow(self,row):\n  dialect=self.dialect\n  try :\n   rowlen=len(row)\n  except TypeError:\n   raise Error(\"sequence expected\")\n   \n   \n  self._join_reset()\n  \n  for field in row:\n   quoted=False\n   if dialect.quoting ==QUOTE_NONNUMERIC:\n    try :\n     float(field)\n    except :\n     quoted=True\n     \n     \n   elif dialect.quoting ==QUOTE_ALL:\n    quoted=True\n    \n   if field is None :\n    self._join_append(\"\",quoted,rowlen ==1)\n   else :\n    self._join_append(str(field),quoted,rowlen ==1)\n    \n    \n  self.rec.append(dialect.lineterminator)\n  \n  self.writeline(''.join(self.rec))\n  \n def writerows(self,rows):\n  for row in rows:\n   self.writerow(row)\n   \ndef reader(*args,**kwargs):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n return Reader(*args,**kwargs)\n \ndef writer(*args,**kwargs):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n return Writer(*args,**kwargs)\n \n \nundefined=object()\ndef field_size_limit(limit=undefined):\n ''\n\n\n\n \n \n global _field_limit\n old_limit=_field_limit\n \n if limit is not undefined:\n  if not isinstance(limit,(int,long)):\n   raise TypeError(\"int expected, got %s\"%\n   (limit.__class__.__name__,))\n  _field_limit=limit\n  \n return old_limit\n"], "re": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nr\"\"\"Support for regular expressions (RE).\n\nThis module provides regular expression matching operations similar to\nthose found in Perl.  It supports both 8-bit and Unicode strings; both\nthe pattern and the strings being processed can contain null bytes and\ncharacters outside the US ASCII range.\n\nRegular expressions can contain both special and ordinary characters.\nMost ordinary characters, like \"A\", \"a\", or \"0\", are the simplest\nregular expressions; they simply match themselves.  You can\nconcatenate ordinary characters, so last matches the string 'last'.\n\nThe special characters are:\n    \".\"      Matches any character except a newline.\n    \"^\"      Matches the start of the string.\n    \"$\"      Matches the end of the string or just before the newline at\n             the end of the string.\n    \"*\"      Matches 0 or more (greedy) repetitions of the preceding RE.\n             Greedy means that it will match as many repetitions as possible.\n    \"+\"      Matches 1 or more (greedy) repetitions of the preceding RE.\n    \"?\"      Matches 0 or 1 (greedy) of the preceding RE.\n    *?,+?,?? Non-greedy versions of the previous three special characters.\n    {m,n}    Matches from m to n repetitions of the preceding RE.\n    {m,n}?   Non-greedy version of the above.\n    \"\\\\\"     Either escapes special characters or signals a special sequence.\n    []       Indicates a set of characters.\n             A \"^\" as the first character indicates a complementing set.\n    \"|\"      A|B, creates an RE that will match either A or B.\n    (...)    Matches the RE inside the parentheses.\n             The contents can be retrieved or matched later in the string.\n    (?aiLmsux) Set the A, I, L, M, S, U, or X flag for the RE (see below).\n    (?:...)  Non-grouping version of regular parentheses.\n    (?P<name>...) The substring matched by the group is accessible by name.\n    (?P=name)     Matches the text matched earlier by the group named name.\n    (?#...)  A comment; ignored.\n    (?=...)  Matches if ... matches next, but doesn't consume the string.\n    (?!...)  Matches if ... doesn't match next.\n    (?<=...) Matches if preceded by ... (must be fixed length).\n    (?<!...) Matches if not preceded by ... (must be fixed length).\n    (?(id/name)yes|no) Matches yes pattern if the group with id/name matched,\n                       the (optional) no pattern otherwise.\n\nThe special sequences consist of \"\\\\\" and a character from the list\nbelow.  If the ordinary character is not on the list, then the\nresulting RE will match the second character.\n    \\number  Matches the contents of the group of the same number.\n    \\A       Matches only at the start of the string.\n    \\Z       Matches only at the end of the string.\n    \\b       Matches the empty string, but only at the start or end of a word.\n    \\B       Matches the empty string, but not at the start or end of a word.\n    \\d       Matches any decimal digit; equivalent to the set [0-9] in\n             bytes patterns or string patterns with the ASCII flag.\n             In string patterns without the ASCII flag, it will match the whole\n             range of Unicode digits.\n    \\D       Matches any non-digit character; equivalent to [^\\d].\n    \\s       Matches any whitespace character; equivalent to [ \\t\\n\\r\\f\\v] in\n             bytes patterns or string patterns with the ASCII flag.\n             In string patterns without the ASCII flag, it will match the whole\n             range of Unicode whitespace characters.\n    \\S       Matches any non-whitespace character; equivalent to [^\\s].\n    \\w       Matches any alphanumeric character; equivalent to [a-zA-Z0-9_]\n             in bytes patterns or string patterns with the ASCII flag.\n             In string patterns without the ASCII flag, it will match the\n             range of Unicode alphanumeric characters (letters plus digits\n             plus underscore).\n             With LOCALE, it will match the set [0-9_] plus characters defined\n             as letters for the current locale.\n    \\W       Matches the complement of \\w.\n    \\\\       Matches a literal backslash.\n\nThis module exports the following functions:\n    match    Match a regular expression pattern to the beginning of a string.\n    search   Search a string for the presence of a pattern.\n    sub      Substitute occurrences of a pattern found in a string.\n    subn     Same as sub, but also return the number of substitutions made.\n    split    Split a string by the occurrences of a pattern.\n    findall  Find all occurrences of a pattern in a string.\n    finditer Return an iterator yielding a match object for each match.\n    compile  Compile a pattern into a RegexObject.\n    purge    Clear the regular expression cache.\n    escape   Backslash all non-alphanumerics in a string.\n\nSome of the functions in this module takes flags as optional parameters:\n    A  ASCII       For string patterns, make \\w, \\W, \\b, \\B, \\d, \\D\n                   match the corresponding ASCII character categories\n                   (rather than the whole Unicode categories, which is the\n                   default).\n                   For bytes patterns, this flag is the only available\n                   behaviour and needn't be specified.\n    I  IGNORECASE  Perform case-insensitive matching.\n    L  LOCALE      Make \\w, \\W, \\b, \\B, dependent on the current locale.\n    M  MULTILINE   \"^\" matches the beginning of lines (after a newline)\n                   as well as the string.\n                   \"$\" matches the end of lines (before a newline) as well\n                   as the end of the string.\n    S  DOTALL      \".\" matches any character at all, including the newline.\n    X  VERBOSE     Ignore whitespace and comments for nicer looking RE's.\n    U  UNICODE     For compatibility only. Ignored for string patterns (it\n                   is the default), and forbidden for bytes patterns.\n\nThis module also defines an exception 'error'.\n\n\"\"\"\n\nimport sre_compile\nimport sre_parse\n\n\n__all__=[\"match\",\"search\",\"sub\",\"subn\",\"split\",\"findall\",\n\"compile\",\"purge\",\"template\",\"escape\",\"A\",\"I\",\"L\",\"M\",\"S\",\"X\",\n\"U\",\"ASCII\",\"IGNORECASE\",\"LOCALE\",\"MULTILINE\",\"DOTALL\",\"VERBOSE\",\n\"UNICODE\",\"error\"]\n\n__version__=\"2.2.1\"\n\n\nA=ASCII=sre_compile.SRE_FLAG_ASCII\nI=IGNORECASE=sre_compile.SRE_FLAG_IGNORECASE\nL=LOCALE=sre_compile.SRE_FLAG_LOCALE\nU=UNICODE=sre_compile.SRE_FLAG_UNICODE\nM=MULTILINE=sre_compile.SRE_FLAG_MULTILINE\nS=DOTALL=sre_compile.SRE_FLAG_DOTALL\nX=VERBOSE=sre_compile.SRE_FLAG_VERBOSE\n\n\nT=TEMPLATE=sre_compile.SRE_FLAG_TEMPLATE\nDEBUG=sre_compile.SRE_FLAG_DEBUG\n\n\nerror=sre_compile.error\n\n\n\n\ndef match(pattern,string,flags=0):\n ''\n \n return _compile(pattern,flags).match(string)\n \ndef search(pattern,string,flags=0):\n ''\n \n return _compile(pattern,flags).search(string)\n \ndef sub(pattern,repl,string,count=0,flags=0):\n ''\n\n\n\n\n \n return _compile(pattern,flags).sub(repl,string,count)\n \ndef subn(pattern,repl,string,count=0,flags=0):\n ''\n\n\n\n\n\n\n \n return _compile(pattern,flags).subn(repl,string,count)\n \ndef split(pattern,string,maxsplit=0,flags=0):\n ''\n\n\n\n\n\n \n return _compile(pattern,flags).split(string,maxsplit)\n \ndef findall(pattern,string,flags=0):\n ''\n\n\n\n\n\n \n return _compile(pattern,flags).findall(string)\n \ndef finditer(pattern,string,flags=0):\n ''\n\n\n \n return _compile(pattern,flags).finditer(string)\n \ndef compile(pattern,flags=0):\n ''\n \n return _compile(pattern,flags)\n \ndef purge():\n ''\n _cache.clear()\n _cache_repl.clear()\n \ndef template(pattern,flags=0):\n ''\n return _compile(pattern,flags |T)\n \n_alphanum_str=frozenset(\n\"_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890\")\n_alphanum_bytes=frozenset(\nb\"_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890\")\n\ndef escape(pattern):\n ''\n\n \n if isinstance(pattern,str):\n  alphanum=_alphanum_str\n  s=list(pattern)\n  for i,c in enumerate(pattern):\n   if c not in alphanum:\n    if c ==\"\\000\":\n     s[i]=\"\\\\000\"\n    else :\n     s[i]=\"\\\\\"+c\n  return\"\".join(s)\n else :\n  alphanum=_alphanum_bytes\n  s=[]\n  esc=ord(b\"\\\\\")\n  for c in pattern:\n   if c in alphanum:\n    s.append(c)\n   else :\n    if c ==0:\n     s.extend(b\"\\\\000\")\n    else :\n     s.append(esc)\n     s.append(c)\n  return bytes(s)\n  \n  \n  \n  \n_cache={}\n_cache_repl={}\n\n_pattern_type=type(sre_compile.compile(\"\",0))\n\n_MAXCACHE=512\ndef _compile(pattern,flags):\n\n try :\n \n \n  return _cache[\"%s:%s:%s\"%(type(pattern),pattern,flags)]\n except KeyError:\n  pass\n  \n if isinstance(pattern,_pattern_type):\n  if flags:\n   raise ValueError(\n   \"Cannot process flags argument with a compiled pattern\")\n  return pattern\n if not sre_compile.isstring(pattern):\n  raise TypeError(\"first argument must be string or compiled pattern\")\n p=sre_compile.compile(pattern,flags)\n \n if len(_cache)>=_MAXCACHE:\n  _cache.clear()\n  \n  \n _cache[\"%s:%s:%s\"%(type(pattern),pattern,flags)]=p\n return p\n \ndef _compile_repl(repl,pattern):\n\n try :\n \n \n  return _cache_repl[\"%s:%s\"%(repl,pattern)]\n except KeyError:\n  pass\n p=sre_parse.parse_template(repl,pattern)\n if len(_cache_repl)>=_MAXCACHE:\n  _cache_repl.clear()\n _cache_repl[\"%s:%s\"%(repl,pattern)]=p\n \n \n return p\n \ndef _expand(pattern,match,template):\n\n template=sre_parse.parse_template(template,pattern)\n return sre_parse.expand_template(template,match)\n \ndef _subx(pattern,template):\n\n template=_compile_repl(template,pattern)\n if not template[0]and len(template[1])==1:\n \n  return template[1][0]\n def filter(match,template=template):\n  return sre_parse.expand_template(template,match)\n return filter\n \n \n \nimport copyreg\n\ndef _pickle(p):\n return _compile,(p.pattern,p.flags)\n \ncopyreg.pickle(_pattern_type,_pickle,_compile)\n\n\n\n\nclass Scanner:\n def __init__(self,lexicon,flags=0):\n  from sre_constants import BRANCH,SUBPATTERN\n  self.lexicon=lexicon\n  \n  p=[]\n  s=sre_parse.Pattern()\n  s.flags=flags\n  for phrase,action in lexicon:\n   p.append(sre_parse.SubPattern(s,[\n   (SUBPATTERN,(len(p)+1,sre_parse.parse(phrase,flags))),\n   ]))\n  s.groups=len(p)+1\n  p=sre_parse.SubPattern(s,[(BRANCH,(None ,p))])\n  self.scanner=sre_compile.compile(p)\n def scan(self,string):\n  result=[]\n  append=result.append\n  match=self.scanner.scanner(string).match\n  i=0\n  while 1:\n   m=match()\n   if not m:\n    break\n   j=m.end()\n   if i ==j:\n    break\n   action=self.lexicon[m.lastindex -1][1]\n   if callable(action):\n    self.match=m\n    action=action(self,m.group())\n   if action is not None :\n    append(action)\n   i=j\n  return result,string[i:]\n"], "dis": [".js", "var $module=(function($B){\n\nvar mod = {\n    dis:function(src){\n        $B.$py_module_path['__main__'] = $B.brython_path\n        return __BRYTHON__.py2js(src,'__main__','__main__','__builtins__').to_js()\n    }\n}\nreturn mod\n\n})(__BRYTHON__)"], "importlib.abc": [".py", "''\nfrom .import _bootstrap\nfrom .import machinery\ntry :\n import _frozen_importlib\nexcept ImportError as exc:\n if exc.name !='_frozen_importlib':\n  raise\n _frozen_importlib=None\nimport abc\nimport imp\nimport marshal\nimport sys\nimport tokenize\nimport warnings\n\n\ndef _register(abstract_cls,*classes):\n for cls in classes:\n  abstract_cls.register(cls)\n  if _frozen_importlib is not None :\n   frozen_cls=getattr(_frozen_importlib,cls.__name__)\n   abstract_cls.register(frozen_cls)\n   \n   \nclass Finder(metaclass=abc.ABCMeta):\n\n ''\n\n\n\n\n\n \n \n @abc.abstractmethod\n def find_module(self,fullname,path=None ):\n  ''\n\n\n  \n  raise NotImplementedError\n  \n  \nclass MetaPathFinder(Finder):\n\n ''\n \n @abc.abstractmethod\n def find_module(self,fullname,path):\n  ''\n\n\n  \n  raise NotImplementedError\n  \n def invalidate_caches(self):\n  ''\n\n  \n  return NotImplemented\n  \n_register(MetaPathFinder,machinery.BuiltinImporter,machinery.FrozenImporter,\nmachinery.PathFinder,machinery.WindowsRegistryFinder)\n\n\nclass PathEntryFinder(Finder):\n\n ''\n \n @abc.abstractmethod\n def find_loader(self,fullname):\n  ''\n\n\n\n\n  \n  raise NotImplementedError\n  \n find_module=_bootstrap._find_module_shim\n \n def invalidate_caches(self):\n  ''\n\n  \n  return NotImplemented\n  \n_register(PathEntryFinder,machinery.FileFinder)\n\n\nclass Loader(metaclass=abc.ABCMeta):\n\n ''\n \n @abc.abstractmethod\n def load_module(self,fullname):\n  ''\n  \n  raise NotImplementedError\n  \n @abc.abstractmethod\n def module_repr(self,module):\n  ''\n  \n  raise NotImplementedError\n  \n  \nclass ResourceLoader(Loader):\n\n ''\n\n\n\n\n \n \n @abc.abstractmethod\n def get_data(self,path):\n  ''\n  \n  raise NotImplementedError\n  \n  \nclass InspectLoader(Loader):\n\n ''\n\n\n\n\n \n \n @abc.abstractmethod\n def is_package(self,fullname):\n  ''\n  \n  raise NotImplementedError\n  \n @abc.abstractmethod\n def get_code(self,fullname):\n  ''\n  \n  raise NotImplementedError\n  \n @abc.abstractmethod\n def get_source(self,fullname):\n  ''\n  \n  raise NotImplementedError\n  \n_register(InspectLoader,machinery.BuiltinImporter,machinery.FrozenImporter,\nmachinery.ExtensionFileLoader)\n\n\nclass ExecutionLoader(InspectLoader):\n\n ''\n\n\n\n\n \n \n @abc.abstractmethod\n def get_filename(self,fullname):\n  ''\n  \n  raise NotImplementedError\n  \n  \nclass FileLoader(_bootstrap.FileLoader,ResourceLoader,ExecutionLoader):\n\n ''\n \n \n_register(FileLoader,machinery.SourceFileLoader,\nmachinery.SourcelessFileLoader)\n\n\nclass SourceLoader(_bootstrap.SourceLoader,ResourceLoader,ExecutionLoader):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def path_mtime(self,path):\n  ''\n  if self.path_stats.__func__ is SourceLoader.path_stats:\n   raise NotImplementedError\n  return int(self.path_stats(path)['mtime'])\n  \n def path_stats(self,path):\n  ''\n\n\n\n\n  \n  if self.path_mtime.__func__ is SourceLoader.path_mtime:\n   raise NotImplementedError\n  return {'mtime':self.path_mtime(path)}\n  \n def set_data(self,path,data):\n  ''\n\n\n\n\n\n\n\n  \n  raise NotImplementedError\n  \n_register(SourceLoader,machinery.SourceFileLoader)\n\nclass PyLoader(SourceLoader):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n @abc.abstractmethod\n def is_package(self,fullname):\n  raise NotImplementedError\n  \n @abc.abstractmethod\n def source_path(self,fullname):\n  ''\n  \n  raise NotImplementedError\n  \n def get_filename(self,fullname):\n  ''\n\n\n\n\n\n\n  \n  warnings.warn(\"importlib.abc.PyLoader is deprecated and is \"\n  \"slated for removal in Python 3.4; \"\n  \"use SourceLoader instead. \"\n  \"See the importlib documentation on how to be \"\n  \"compatible with Python 3.1 onwards.\",\n  DeprecationWarning)\n  path=self.source_path(fullname)\n  if path is None :\n   raise ImportError(name=fullname)\n  else :\n   return path\n   \n   \nclass PyPycLoader(PyLoader):\n\n ''\n\n\n\n\n\n\n\n\n\n \n \n def get_filename(self,fullname):\n  ''\n  path=self.source_path(fullname)\n  if path is not None :\n   return path\n  path=self.bytecode_path(fullname)\n  if path is not None :\n   return path\n  raise ImportError(\"no source or bytecode path available for \"\n  \"{0!r}\".format(fullname),name=fullname)\n  \n def get_code(self,fullname):\n  ''\n  warnings.warn(\"importlib.abc.PyPycLoader is deprecated and slated for \"\n  \"removal in Python 3.4; use SourceLoader instead. \"\n  \"If Python 3.1 compatibility is required, see the \"\n  \"latest documentation for PyLoader.\",\n  DeprecationWarning)\n  source_timestamp=self.source_mtime(fullname)\n  \n  bytecode_path=self.bytecode_path(fullname)\n  if bytecode_path:\n   data=self.get_data(bytecode_path)\n   try :\n    magic=data[:4]\n    if len(magic)<4:\n     raise ImportError(\n     \"bad magic number in {}\".format(fullname),\n     name=fullname,path=bytecode_path)\n    raw_timestamp=data[4:8]\n    if len(raw_timestamp)<4:\n     raise EOFError(\"bad timestamp in {}\".format(fullname))\n    pyc_timestamp=_bootstrap._r_long(raw_timestamp)\n    raw_source_size=data[8:12]\n    if len(raw_source_size)!=4:\n     raise EOFError(\"bad file size in {}\".format(fullname))\n     \n     \n    bytecode=data[12:]\n    \n    if imp.get_magic()!=magic:\n     raise ImportError(\n     \"bad magic number in {}\".format(fullname),\n     name=fullname,path=bytecode_path)\n     \n     \n    if source_timestamp:\n     if pyc_timestamp <source_timestamp:\n      raise ImportError(\"bytecode is stale\",name=fullname,\n      path=bytecode_path)\n   except (ImportError,EOFError):\n   \n    if source_timestamp is not None :\n     pass\n    else :\n     raise\n   else :\n   \n    return marshal.loads(bytecode)\n  elif source_timestamp is None :\n   raise ImportError(\"no source or bytecode available to create code \"\n   \"object for {0!r}\".format(fullname),\n   name=fullname)\n   \n  source_path=self.source_path(fullname)\n  if source_path is None :\n   message=\"a source path must exist to load {0}\".format(fullname)\n   raise ImportError(message,name=fullname)\n  source=self.get_data(source_path)\n  code_object=compile(source,source_path,'exec',dont_inherit=True )\n  \n  if not sys.dont_write_bytecode:\n   data=bytearray(imp.get_magic())\n   data.extend(_bootstrap._w_long(source_timestamp))\n   data.extend(_bootstrap._w_long(len(source)&0xFFFFFFFF))\n   data.extend(marshal.dumps(code_object))\n   self.write_bytecode(fullname,data)\n  return code_object\n  \n @abc.abstractmethod\n def source_mtime(self,fullname):\n  ''\n  \n  raise NotImplementedError\n  \n @abc.abstractmethod\n def bytecode_path(self,fullname):\n  ''\n  \n  raise NotImplementedError\n  \n @abc.abstractmethod\n def write_bytecode(self,fullname,bytecode):\n  ''\n\n  \n  raise NotImplementedError\n"], "formatter": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport sys\n\n\nAS_IS=None\n\n\nclass NullFormatter:\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,writer=None ):\n  if writer is None :\n   writer=NullWriter()\n  self.writer=writer\n def end_paragraph(self,blankline):pass\n def add_line_break(self):pass\n def add_hor_rule(self,*args,**kw):pass\n def add_label_data(self,format,counter,blankline=None ):pass\n def add_flowing_data(self,data):pass\n def add_literal_data(self,data):pass\n def flush_softspace(self):pass\n def push_alignment(self,align):pass\n def pop_alignment(self):pass\n def push_font(self,x):pass\n def pop_font(self):pass\n def push_margin(self,margin):pass\n def pop_margin(self):pass\n def set_spacing(self,spacing):pass\n def push_style(self,*styles):pass\n def pop_style(self,n=1):pass\n def assert_line_data(self,flag=1):pass\n \n \nclass AbstractFormatter:\n ''\n\n\n\n\n\n \n \n \n \n \n \n \n def __init__(self,writer):\n  self.writer=writer\n  self.align=None\n  self.align_stack=[]\n  self.font_stack=[]\n  self.margin_stack=[]\n  self.spacing=None\n  self.style_stack=[]\n  self.nospace=1\n  self.softspace=0\n  self.para_end=1\n  self.parskip=0\n  self.hard_break=1\n  self.have_label=0\n  \n def end_paragraph(self,blankline):\n  if not self.hard_break:\n   self.writer.send_line_break()\n   self.have_label=0\n  if self.parskip <blankline and not self.have_label:\n   self.writer.send_paragraph(blankline -self.parskip)\n   self.parskip=blankline\n   self.have_label=0\n  self.hard_break=self.nospace=self.para_end=1\n  self.softspace=0\n  \n def add_line_break(self):\n  if not (self.hard_break or self.para_end):\n   self.writer.send_line_break()\n   self.have_label=self.parskip=0\n  self.hard_break=self.nospace=1\n  self.softspace=0\n  \n def add_hor_rule(self,*args,**kw):\n  if not self.hard_break:\n   self.writer.send_line_break()\n  self.writer.send_hor_rule(*args,**kw)\n  self.hard_break=self.nospace=1\n  self.have_label=self.para_end=self.softspace=self.parskip=0\n  \n def add_label_data(self,format,counter,blankline=None ):\n  if self.have_label or not self.hard_break:\n   self.writer.send_line_break()\n  if not self.para_end:\n   self.writer.send_paragraph((blankline and 1)or 0)\n  if isinstance(format,str):\n   self.writer.send_label_data(self.format_counter(format,counter))\n  else :\n   self.writer.send_label_data(format)\n  self.nospace=self.have_label=self.hard_break=self.para_end=1\n  self.softspace=self.parskip=0\n  \n def format_counter(self,format,counter):\n  label=''\n  for c in format:\n   if c =='1':\n    label=label+('%d'%counter)\n   elif c in'aA':\n    if counter >0:\n     label=label+self.format_letter(c,counter)\n   elif c in'iI':\n    if counter >0:\n     label=label+self.format_roman(c,counter)\n   else :\n    label=label+c\n  return label\n  \n def format_letter(self,case,counter):\n  label=''\n  while counter >0:\n   counter,x=divmod(counter -1,26)\n   \n   \n   \n   s=chr(ord(case)+x)\n   label=s+label\n  return label\n  \n def format_roman(self,case,counter):\n  ones=['i','x','c','m']\n  fives=['v','l','d']\n  label,index='',0\n  \n  while counter >0:\n   counter,x=divmod(counter,10)\n   if x ==9:\n    label=ones[index]+ones[index+1]+label\n   elif x ==4:\n    label=ones[index]+fives[index]+label\n   else :\n    if x >=5:\n     s=fives[index]\n     x=x -5\n    else :\n     s=''\n    s=s+ones[index]*x\n    label=s+label\n   index=index+1\n  if case =='I':\n   return label.upper()\n  return label\n  \n def add_flowing_data(self,data):\n  if not data:return\n  prespace=data[:1].isspace()\n  postspace=data[-1:].isspace()\n  data=\" \".join(data.split())\n  if self.nospace and not data:\n   return\n  elif prespace or self.softspace:\n   if not data:\n    if not self.nospace:\n     self.softspace=1\n     self.parskip=0\n    return\n   if not self.nospace:\n    data=' '+data\n  self.hard_break=self.nospace=self.para_end=  self.parskip=self.have_label=0\n  self.softspace=postspace\n  self.writer.send_flowing_data(data)\n  \n def add_literal_data(self,data):\n  if not data:return\n  if self.softspace:\n   self.writer.send_flowing_data(\" \")\n  self.hard_break=data[-1:]=='\\n'\n  self.nospace=self.para_end=self.softspace=  self.parskip=self.have_label=0\n  self.writer.send_literal_data(data)\n  \n def flush_softspace(self):\n  if self.softspace:\n   self.hard_break=self.para_end=self.parskip=   self.have_label=self.softspace=0\n   self.nospace=1\n   self.writer.send_flowing_data(' ')\n   \n def push_alignment(self,align):\n  if align and align !=self.align:\n   self.writer.new_alignment(align)\n   self.align=align\n   self.align_stack.append(align)\n  else :\n   self.align_stack.append(self.align)\n   \n def pop_alignment(self):\n  if self.align_stack:\n   del self.align_stack[-1]\n  if self.align_stack:\n   self.align=align=self.align_stack[-1]\n   self.writer.new_alignment(align)\n  else :\n   self.align=None\n   self.writer.new_alignment(None )\n   \n def push_font(self,font):\n  size,i,b,tt=font\n  if self.softspace:\n   self.hard_break=self.para_end=self.softspace=0\n   self.nospace=1\n   self.writer.send_flowing_data(' ')\n  if self.font_stack:\n   csize,ci,cb,ctt=self.font_stack[-1]\n   if size is AS_IS:size=csize\n   if i is AS_IS:i=ci\n   if b is AS_IS:b=cb\n   if tt is AS_IS:tt=ctt\n  font=(size,i,b,tt)\n  self.font_stack.append(font)\n  self.writer.new_font(font)\n  \n def pop_font(self):\n  if self.font_stack:\n   del self.font_stack[-1]\n  if self.font_stack:\n   font=self.font_stack[-1]\n  else :\n   font=None\n  self.writer.new_font(font)\n  \n def push_margin(self,margin):\n  self.margin_stack.append(margin)\n  fstack=[m for m in self.margin_stack if m]\n  if not margin and fstack:\n   margin=fstack[-1]\n  self.writer.new_margin(margin,len(fstack))\n  \n def pop_margin(self):\n  if self.margin_stack:\n   del self.margin_stack[-1]\n  fstack=[m for m in self.margin_stack if m]\n  if fstack:\n   margin=fstack[-1]\n  else :\n   margin=None\n  self.writer.new_margin(margin,len(fstack))\n  \n def set_spacing(self,spacing):\n  self.spacing=spacing\n  self.writer.new_spacing(spacing)\n  \n def push_style(self,*styles):\n  if self.softspace:\n   self.hard_break=self.para_end=self.softspace=0\n   self.nospace=1\n   self.writer.send_flowing_data(' ')\n  for style in styles:\n   self.style_stack.append(style)\n  self.writer.new_styles(tuple(self.style_stack))\n  \n def pop_style(self,n=1):\n  del self.style_stack[-n:]\n  self.writer.new_styles(tuple(self.style_stack))\n  \n def assert_line_data(self,flag=1):\n  self.nospace=self.hard_break=not flag\n  self.para_end=self.parskip=self.have_label=0\n  \n  \nclass NullWriter:\n ''\n\n\n\n\n\n \n def __init__(self):pass\n def flush(self):pass\n def new_alignment(self,align):pass\n def new_font(self,font):pass\n def new_margin(self,margin,level):pass\n def new_spacing(self,spacing):pass\n def new_styles(self,styles):pass\n def send_paragraph(self,blankline):pass\n def send_line_break(self):pass\n def send_hor_rule(self,*args,**kw):pass\n def send_label_data(self,data):pass\n def send_flowing_data(self,data):pass\n def send_literal_data(self,data):pass\n \n \nclass AbstractWriter(NullWriter):\n ''\n\n\n\n\n \n \n def new_alignment(self,align):\n  print(\"new_alignment(%r)\"%(align,))\n  \n def new_font(self,font):\n  print(\"new_font(%r)\"%(font,))\n  \n def new_margin(self,margin,level):\n  print(\"new_margin(%r, %d)\"%(margin,level))\n  \n def new_spacing(self,spacing):\n  print(\"new_spacing(%r)\"%(spacing,))\n  \n def new_styles(self,styles):\n  print(\"new_styles(%r)\"%(styles,))\n  \n def send_paragraph(self,blankline):\n  print(\"send_paragraph(%r)\"%(blankline,))\n  \n def send_line_break(self):\n  print(\"send_line_break()\")\n  \n def send_hor_rule(self,*args,**kw):\n  print(\"send_hor_rule()\")\n  \n def send_label_data(self,data):\n  print(\"send_label_data(%r)\"%(data,))\n  \n def send_flowing_data(self,data):\n  print(\"send_flowing_data(%r)\"%(data,))\n  \n def send_literal_data(self,data):\n  print(\"send_literal_data(%r)\"%(data,))\n  \n  \nclass DumbWriter(NullWriter):\n ''\n\n\n\n\n\n \n \n def __init__(self,file=None ,maxcol=72):\n  self.file=file or sys.stdout\n  self.maxcol=maxcol\n  NullWriter.__init__(self)\n  self.reset()\n  \n def reset(self):\n  self.col=0\n  self.atbreak=0\n  \n def send_paragraph(self,blankline):\n  self.file.write('\\n'*blankline)\n  self.col=0\n  self.atbreak=0\n  \n def send_line_break(self):\n  self.file.write('\\n')\n  self.col=0\n  self.atbreak=0\n  \n def send_hor_rule(self,*args,**kw):\n  self.file.write('\\n')\n  self.file.write('-'*self.maxcol)\n  self.file.write('\\n')\n  self.col=0\n  self.atbreak=0\n  \n def send_literal_data(self,data):\n  self.file.write(data)\n  i=data.rfind('\\n')\n  if i >=0:\n   self.col=0\n   data=data[i+1:]\n  data=data.expandtabs()\n  self.col=self.col+len(data)\n  self.atbreak=0\n  \n def send_flowing_data(self,data):\n  if not data:return\n  atbreak=self.atbreak or data[0].isspace()\n  col=self.col\n  maxcol=self.maxcol\n  write=self.file.write\n  for word in data.split():\n   if atbreak:\n    if col+len(word)>=maxcol:\n     write('\\n')\n     col=0\n    else :\n     write(' ')\n     col=col+1\n   write(word)\n   col=col+len(word)\n   atbreak=1\n  self.col=col\n  self.atbreak=data[-1].isspace()\n  \n  \ndef test(file=None ):\n w=DumbWriter()\n f=AbstractFormatter(w)\n if file is not None :\n  fp=open(file)\n elif sys.argv[1:]:\n  fp=open(sys.argv[1])\n else :\n  fp=sys.stdin\n for line in fp:\n  if line =='\\n':\n   f.end_paragraph(1)\n  else :\n   f.add_flowing_data(line)\n f.end_paragraph(0)\n \n \nif __name__ =='__main__':\n test()\n"], "_codecs": [".py", "\ndef ascii_decode(*args,**kw):\n pass\n \ndef ascii_encode(*args,**kw):\n pass\n \ndef charbuffer_encode(*args,**kw):\n pass\n \ndef charmap_build(*args,**kw):\n pass\n \ndef charmap_decode(*args,**kw):\n pass\n \ndef charmap_encode(*args,**kw):\n pass\n \ndef decode(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef encode(*args,**kw):\n ''\n\n\n\n\n\n \n obj=args[0]\n if len(args)==2:\n  encoding=args[1]\n else :\n  encoding='utf-8'\n if isinstance(obj,str):\n  return obj.encode(encoding)\n  \ndef escape_decode(*args,**kw):\n pass\n \ndef escape_encode(*args,**kw):\n pass\n \ndef latin_1_decode(*args,**kw):\n pass\n \ndef latin_1_encode(*args,**kw):\n pass\n \ndef lookup(encoding):\n ''\n\n \n \n if encoding in ('utf-8','utf_8'):\n  from javascript import console\n  console.log('encoding',encoding)\n  import encodings.utf_8\n  return encodings.utf_8.getregentry()\n  \n LookupError(encoding)\n \ndef lookup_error(*args,**kw):\n ''\n\n \n pass\n \ndef mbcs_decode(*args,**kw):\n pass\n \ndef mbcs_encode(*args,**kw):\n pass\n \ndef raw_unicode_escape_decode(*args,**kw):\n pass\n \ndef raw_unicode_escape_encode(*args,**kw):\n pass\n \ndef readbuffer_encode(*args,**kw):\n pass\n \ndef register(*args,**kw):\n ''\n\n\n\n \n pass\n \ndef register_error(*args,**kw):\n ''\n\n\n\n\n \n pass\n \ndef unicode_escape_decode(*args,**kw):\n pass\n \ndef unicode_escape_encode(*args,**kw):\n pass\n \ndef unicode_internal_decode(*args,**kw):\n pass\n \ndef unicode_internal_encode(*args,**kw):\n pass\n \ndef utf_16_be_decode(*args,**kw):\n pass\n \ndef utf_16_be_encode(*args,**kw):\n pass\n \ndef utf_16_decode(*args,**kw):\n pass\n \ndef utf_16_encode(*args,**kw):\n pass\n \ndef utf_16_ex_decode(*args,**kw):\n pass\n \ndef utf_16_le_decode(*args,**kw):\n pass\n \ndef utf_16_le_encode(*args,**kw):\n pass\n \ndef utf_32_be_decode(*args,**kw):\n pass\n \ndef utf_32_be_encode(*args,**kw):\n pass\n \ndef utf_32_decode(*args,**kw):\n pass\n \ndef utf_32_encode(*args,**kw):\n pass\n \ndef utf_32_ex_decode(*args,**kw):\n pass\n \ndef utf_32_le_decode(*args,**kw):\n pass\n \ndef utf_32_le_encode(*args,**kw):\n pass\n \ndef utf_7_decode(*args,**kw):\n pass\n \ndef utf_7_encode(*args,**kw):\n pass\n \ndef utf_8_decode(*args,**kw):\n pass\n \ndef utf_8_encode(*args,**kw):\n input=args[0]\n if len(args)==2:\n  errors=args[1]\n else :\n  errors=kw.get('errors','strict')\n  \n  \n  \n return (bytes([_f for _f in input],'utf-8'),len(input))\n"], "encodings.cp852": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp852',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x016f,\n0x0086:0x0107,\n0x0087:0x00e7,\n0x0088:0x0142,\n0x0089:0x00eb,\n0x008a:0x0150,\n0x008b:0x0151,\n0x008c:0x00ee,\n0x008d:0x0179,\n0x008e:0x00c4,\n0x008f:0x0106,\n0x0090:0x00c9,\n0x0091:0x0139,\n0x0092:0x013a,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x013d,\n0x0096:0x013e,\n0x0097:0x015a,\n0x0098:0x015b,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x0164,\n0x009c:0x0165,\n0x009d:0x0141,\n0x009e:0x00d7,\n0x009f:0x010d,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x0104,\n0x00a5:0x0105,\n0x00a6:0x017d,\n0x00a7:0x017e,\n0x00a8:0x0118,\n0x00a9:0x0119,\n0x00aa:0x00ac,\n0x00ab:0x017a,\n0x00ac:0x010c,\n0x00ad:0x015f,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x011a,\n0x00b8:0x015e,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x017b,\n0x00be:0x017c,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x0102,\n0x00c7:0x0103,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x0111,\n0x00d1:0x0110,\n0x00d2:0x010e,\n0x00d3:0x00cb,\n0x00d4:0x010f,\n0x00d5:0x0147,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x011b,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x0162,\n0x00de:0x016e,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x0143,\n0x00e4:0x0144,\n0x00e5:0x0148,\n0x00e6:0x0160,\n0x00e7:0x0161,\n0x00e8:0x0154,\n0x00e9:0x00da,\n0x00ea:0x0155,\n0x00eb:0x0170,\n0x00ec:0x00fd,\n0x00ed:0x00dd,\n0x00ee:0x0163,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x02dd,\n0x00f2:0x02db,\n0x00f3:0x02c7,\n0x00f4:0x02d8,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x02d9,\n0x00fb:0x0171,\n0x00fc:0x0158,\n0x00fd:0x0159,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\u016f'\n'\\u0107'\n'\\xe7'\n'\\u0142'\n'\\xeb'\n'\\u0150'\n'\\u0151'\n'\\xee'\n'\\u0179'\n'\\xc4'\n'\\u0106'\n'\\xc9'\n'\\u0139'\n'\\u013a'\n'\\xf4'\n'\\xf6'\n'\\u013d'\n'\\u013e'\n'\\u015a'\n'\\u015b'\n'\\xd6'\n'\\xdc'\n'\\u0164'\n'\\u0165'\n'\\u0141'\n'\\xd7'\n'\\u010d'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\u0104'\n'\\u0105'\n'\\u017d'\n'\\u017e'\n'\\u0118'\n'\\u0119'\n'\\xac'\n'\\u017a'\n'\\u010c'\n'\\u015f'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\u011a'\n'\\u015e'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u017b'\n'\\u017c'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u0102'\n'\\u0103'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\u0111'\n'\\u0110'\n'\\u010e'\n'\\xcb'\n'\\u010f'\n'\\u0147'\n'\\xcd'\n'\\xce'\n'\\u011b'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u0162'\n'\\u016e'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\u0143'\n'\\u0144'\n'\\u0148'\n'\\u0160'\n'\\u0161'\n'\\u0154'\n'\\xda'\n'\\u0155'\n'\\u0170'\n'\\xfd'\n'\\xdd'\n'\\u0163'\n'\\xb4'\n'\\xad'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n'\\u02d8'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\u02d9'\n'\\u0171'\n'\\u0158'\n'\\u0159'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00cf,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00b0:0x00f8,\n0x00b4:0x00ef,\n0x00b8:0x00f7,\n0x00bb:0x00af,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c4:0x008e,\n0x00c7:0x0080,\n0x00c9:0x0090,\n0x00cb:0x00d3,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00da:0x00e9,\n0x00dc:0x009a,\n0x00dd:0x00ed,\n0x00df:0x00e1,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e4:0x0084,\n0x00e7:0x0087,\n0x00e9:0x0082,\n0x00eb:0x0089,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00fa:0x00a3,\n0x00fc:0x0081,\n0x00fd:0x00ec,\n0x0102:0x00c6,\n0x0103:0x00c7,\n0x0104:0x00a4,\n0x0105:0x00a5,\n0x0106:0x008f,\n0x0107:0x0086,\n0x010c:0x00ac,\n0x010d:0x009f,\n0x010e:0x00d2,\n0x010f:0x00d4,\n0x0110:0x00d1,\n0x0111:0x00d0,\n0x0118:0x00a8,\n0x0119:0x00a9,\n0x011a:0x00b7,\n0x011b:0x00d8,\n0x0139:0x0091,\n0x013a:0x0092,\n0x013d:0x0095,\n0x013e:0x0096,\n0x0141:0x009d,\n0x0142:0x0088,\n0x0143:0x00e3,\n0x0144:0x00e4,\n0x0147:0x00d5,\n0x0148:0x00e5,\n0x0150:0x008a,\n0x0151:0x008b,\n0x0154:0x00e8,\n0x0155:0x00ea,\n0x0158:0x00fc,\n0x0159:0x00fd,\n0x015a:0x0097,\n0x015b:0x0098,\n0x015e:0x00b8,\n0x015f:0x00ad,\n0x0160:0x00e6,\n0x0161:0x00e7,\n0x0162:0x00dd,\n0x0163:0x00ee,\n0x0164:0x009b,\n0x0165:0x009c,\n0x016e:0x00de,\n0x016f:0x0085,\n0x0170:0x00eb,\n0x0171:0x00fb,\n0x0179:0x008d,\n0x017a:0x00ab,\n0x017b:0x00bd,\n0x017c:0x00be,\n0x017d:0x00a6,\n0x017e:0x00a7,\n0x02c7:0x00f3,\n0x02d8:0x00f4,\n0x02d9:0x00fa,\n0x02db:0x00f2,\n0x02dd:0x00f1,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "encodings.cp1251": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1251',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0402'\n'\\u0403'\n'\\u201a'\n'\\u0453'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u20ac'\n'\\u2030'\n'\\u0409'\n'\\u2039'\n'\\u040a'\n'\\u040c'\n'\\u040b'\n'\\u040f'\n'\\u0452'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\u2122'\n'\\u0459'\n'\\u203a'\n'\\u045a'\n'\\u045c'\n'\\u045b'\n'\\u045f'\n'\\xa0'\n'\\u040e'\n'\\u045e'\n'\\u0408'\n'\\xa4'\n'\\u0490'\n'\\xa6'\n'\\xa7'\n'\\u0401'\n'\\xa9'\n'\\u0404'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\u0407'\n'\\xb0'\n'\\xb1'\n'\\u0406'\n'\\u0456'\n'\\u0491'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\u0451'\n'\\u2116'\n'\\u0454'\n'\\xbb'\n'\\u0458'\n'\\u0405'\n'\\u0455'\n'\\u0457'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.cp1250": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1250',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\ufffe'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\ufffe'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u015a'\n'\\u0164'\n'\\u017d'\n'\\u0179'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\u2122'\n'\\u0161'\n'\\u203a'\n'\\u015b'\n'\\u0165'\n'\\u017e'\n'\\u017a'\n'\\xa0'\n'\\u02c7'\n'\\u02d8'\n'\\u0141'\n'\\xa4'\n'\\u0104'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\u015e'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\u017b'\n'\\xb0'\n'\\xb1'\n'\\u02db'\n'\\u0142'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\u0105'\n'\\u015f'\n'\\xbb'\n'\\u013d'\n'\\u02dd'\n'\\u013e'\n'\\u017c'\n'\\u0154'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\u0139'\n'\\u0106'\n'\\xc7'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u011a'\n'\\xcd'\n'\\xce'\n'\\u010e'\n'\\u0110'\n'\\u0143'\n'\\u0147'\n'\\xd3'\n'\\xd4'\n'\\u0150'\n'\\xd6'\n'\\xd7'\n'\\u0158'\n'\\u016e'\n'\\xda'\n'\\u0170'\n'\\xdc'\n'\\xdd'\n'\\u0162'\n'\\xdf'\n'\\u0155'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\u013a'\n'\\u0107'\n'\\xe7'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u011b'\n'\\xed'\n'\\xee'\n'\\u010f'\n'\\u0111'\n'\\u0144'\n'\\u0148'\n'\\xf3'\n'\\xf4'\n'\\u0151'\n'\\xf6'\n'\\xf7'\n'\\u0159'\n'\\u016f'\n'\\xfa'\n'\\u0171'\n'\\xfc'\n'\\xfd'\n'\\u0163'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "crypto_js.rollups.sha1": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(e,m){var p={},j=p.lib={},l=function(){},f=j.Base={extend:function(a){l.prototype=this;var c=new l;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nn=j.WordArray=f.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=m?c:4*a.length},toString:function(a){return(a||h).stringify(this)},concat:function(a){var c=this.words,q=a.words,d=this.sigBytes;a=a.sigBytes;this.clamp();if(d%4)for(var b=0;b<a;b++)c[d+b>>>2]|=(q[b>>>2]>>>24-8*(b%4)&255)<<24-8*((d+b)%4);else if(65535<q.length)for(b=0;b<a;b+=4)c[d+b>>>2]=q[b>>>2];else c.push.apply(c,q);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=e.ceil(c/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],b=0;b<a;b+=4)c.push(4294967296*e.random()|0);return new n.init(c,a)}}),b=p.enc={},h=b.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var b=[],d=0;d<a;d++){var f=c[d>>>2]>>>24-8*(d%4)&255;b.push((f>>>4).toString(16));b.push((f&15).toString(16))}return b.join(\"\")},parse:function(a){for(var c=a.length,b=[],d=0;d<c;d+=2)b[d>>>3]|=parseInt(a.substr(d,\n2),16)<<24-4*(d%8);return new n.init(b,c/2)}},g=b.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var b=[],d=0;d<a;d++)b.push(String.fromCharCode(c[d>>>2]>>>24-8*(d%4)&255));return b.join(\"\")},parse:function(a){for(var c=a.length,b=[],d=0;d<c;d++)b[d>>>2]|=(a.charCodeAt(d)&255)<<24-8*(d%4);return new n.init(b,c)}},r=b.Utf8={stringify:function(a){try{return decodeURIComponent(escape(g.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return g.parse(unescape(encodeURIComponent(a)))}},\nk=j.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new n.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=r.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,b=c.words,d=c.sigBytes,f=this.blockSize,h=d/(4*f),h=a?e.ceil(h):e.max((h|0)-this._minBufferSize,0);a=h*f;d=e.min(4*a,d);if(a){for(var g=0;g<a;g+=f)this._doProcessBlock(b,g);g=b.splice(0,a);c.sigBytes-=d}return new n.init(g,d)},clone:function(){var a=f.clone.call(this);\na._data=this._data.clone();return a},_minBufferSize:0});j.Hasher=k.extend({cfg:f.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){k.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(c,b){return(new a.init(b)).finalize(c)}},_createHmacHelper:function(a){return function(b,f){return(new s.HMAC.init(a,\nf)).finalize(b)}}});var s=p.algo={};return p}(Math);\n(function(){var e=CryptoJS,m=e.lib,p=m.WordArray,j=m.Hasher,l=[],m=e.algo.SHA1=j.extend({_doReset:function(){this._hash=new p.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(f,n){for(var b=this._hash.words,h=b[0],g=b[1],e=b[2],k=b[3],j=b[4],a=0;80>a;a++){if(16>a)l[a]=f[n+a]|0;else{var c=l[a-3]^l[a-8]^l[a-14]^l[a-16];l[a]=c<<1|c>>>31}c=(h<<5|h>>>27)+j+l[a];c=20>a?c+((g&e|~g&k)+1518500249):40>a?c+((g^e^k)+1859775393):60>a?c+((g&e|g&k|e&k)-1894007588):c+((g^e^\nk)-899497514);j=k;k=e;e=g<<30|g>>>2;g=h;h=c}b[0]=b[0]+h|0;b[1]=b[1]+g|0;b[2]=b[2]+e|0;b[3]=b[3]+k|0;b[4]=b[4]+j|0},_doFinalize:function(){var f=this._data,e=f.words,b=8*this._nDataBytes,h=8*f.sigBytes;e[h>>>5]|=128<<24-h%32;e[(h+64>>>9<<4)+14]=Math.floor(b/4294967296);e[(h+64>>>9<<4)+15]=b;f.sigBytes=4*e.length;this._process();return this._hash},clone:function(){var e=j.clone.call(this);e._hash=this._hash.clone();return e}});e.SHA1=j._createHelper(m);e.HmacSHA1=j._createHmacHelper(m)})();\n"], "encodings.cp720": [".py", "''\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp720',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\xe9'\n'\\xe2'\n'\\x84'\n'\\xe0'\n'\\x86'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\u0651'\n'\\u0652'\n'\\xf4'\n'\\xa4'\n'\\u0640'\n'\\xfb'\n'\\xf9'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\xa3'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u0636'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'\\u0641'\n'\\xb5'\n'\\u0642'\n'\\u0643'\n'\\u0644'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\u0649'\n'\\u064a'\n'\\u2261'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\u064f'\n'\\u0650'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "__future__": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nall_feature_names=[\n\"nested_scopes\",\n\"generators\",\n\"division\",\n\"absolute_import\",\n\"with_statement\",\n\"print_function\",\n\"unicode_literals\",\n\"barry_as_FLUFL\",\n]\n\n__all__=[\"all_feature_names\"]+all_feature_names\n\n\n\n\n\nCO_NESTED=0x0010\nCO_GENERATOR_ALLOWED=0\nCO_FUTURE_DIVISION=0x2000\nCO_FUTURE_ABSOLUTE_IMPORT=0x4000\nCO_FUTURE_WITH_STATEMENT=0x8000\nCO_FUTURE_PRINT_FUNCTION=0x10000\nCO_FUTURE_UNICODE_LITERALS=0x20000\nCO_FUTURE_BARRY_AS_BDFL=0x40000\n\nclass _Feature:\n def __init__(self,optionalRelease,mandatoryRelease,compiler_flag):\n  self.optional=optionalRelease\n  self.mandatory=mandatoryRelease\n  self.compiler_flag=compiler_flag\n  \n def getOptionalRelease(self):\n  ''\n\n\n  \n  \n  return self.optional\n  \n def getMandatoryRelease(self):\n  ''\n\n\n\n  \n  \n  return self.mandatory\n  \n def __repr__(self):\n  return\"_Feature\"+repr((self.optional,\n  self.mandatory,\n  self.compiler_flag))\n  \nnested_scopes=_Feature((2,1,0,\"beta\",1),\n(2,2,0,\"alpha\",0),\nCO_NESTED)\n\ngenerators=_Feature((2,2,0,\"alpha\",1),\n(2,3,0,\"final\",0),\nCO_GENERATOR_ALLOWED)\n\ndivision=_Feature((2,2,0,\"alpha\",2),\n(3,0,0,\"alpha\",0),\nCO_FUTURE_DIVISION)\n\nabsolute_import=_Feature((2,5,0,\"alpha\",1),\n(3,0,0,\"alpha\",0),\nCO_FUTURE_ABSOLUTE_IMPORT)\n\nwith_statement=_Feature((2,5,0,\"alpha\",1),\n(2,6,0,\"alpha\",0),\nCO_FUTURE_WITH_STATEMENT)\n\nprint_function=_Feature((2,6,0,\"alpha\",2),\n(3,0,0,\"alpha\",0),\nCO_FUTURE_PRINT_FUNCTION)\n\nunicode_literals=_Feature((2,6,0,\"alpha\",2),\n(3,0,0,\"alpha\",0),\nCO_FUTURE_UNICODE_LITERALS)\n\nbarry_as_FLUFL=_Feature((3,1,0,\"alpha\",2),\n(3,9,0,\"alpha\",0),\nCO_FUTURE_BARRY_AS_BDFL)\n"], "encodings.cp1140": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1140',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xf1'\n'\\xa2'\n'.'\n'<'\n'('\n'+'\n'|'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n'!'\n'$'\n'*'\n')'\n';'\n'\\xac'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'\\xc7'\n'\\xd1'\n'\\xa6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\xf0'\n'\\xfd'\n'\\xfe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\u20ac'\n'\\xb5'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n'\\xd0'\n'\\xdd'\n'\\xde'\n'\\xae'\n'^'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'['\n']'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\xfc'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\\\'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'\\xd6'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\\xdc'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "pickle": [".py", "from json import *\n\nHIGHEST_PROTOCOL=1\n"], "crypto_js.rollups.sha224": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(g,l){var f={},k=f.lib={},h=function(){},m=k.Base={extend:function(a){h.prototype=this;var c=new h;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=k.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=l?c:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e<a;e++)c[b+e>>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)c[b+e>>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=g.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d<a;d+=4)c.push(4294967296*g.random()|0);return new q.init(c,a)}}),t=f.enc={},s=t.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b<a;b++){var e=c[b>>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b<c;b+=2)d[b>>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new q.init(d,c/2)}},n=t.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b<a;b++)d.push(String.fromCharCode(c[b>>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b<c;b++)d[b>>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},j=t.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nw=k.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?g.ceil(f):g.max((f|0)-this._minBufferSize,0);a=f*e;b=g.min(4*a,b);if(a){for(var u=0;u<a;u+=e)this._doProcessBlock(d,u);u=d.splice(0,a);c.sigBytes-=b}return new q.init(u,b)},clone:function(){var a=m.clone.call(this);\na._data=this._data.clone();return a},_minBufferSize:0});k.Hasher=w.extend({cfg:m.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){w.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(c,d){return(new a.init(d)).finalize(c)}},_createHmacHelper:function(a){return function(c,d){return(new v.HMAC.init(a,\nd)).finalize(c)}}});var v=f.algo={};return f}(Math);\n(function(g){for(var l=CryptoJS,f=l.lib,k=f.WordArray,h=f.Hasher,f=l.algo,m=[],q=[],t=function(a){return 4294967296*(a-(a|0))|0},s=2,n=0;64>n;){var j;a:{j=s;for(var w=g.sqrt(j),v=2;v<=w;v++)if(!(j%v)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=t(g.pow(s,0.5))),q[n]=t(g.pow(s,1/3)),n++);s++}var a=[],f=f.SHA256=h.extend({_doReset:function(){this._hash=new k.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],k=b[3],h=b[4],l=b[5],m=b[6],n=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var j=a[p-15],r=a[p-2];a[p]=((j<<25|j>>>7)^(j<<14|j>>>18)^j>>>3)+a[p-7]+((r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10)+a[p-16]}j=n+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&l^~h&m)+q[p]+a[p];r=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);n=m;m=l;l=h;h=k+j|0;k=g;g=f;f=e;e=j+r|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+k|0;b[4]=b[4]+h|0;b[5]=b[5]+l|0;b[6]=b[6]+m|0;b[7]=b[7]+n|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=g.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=h.clone.call(this);a._hash=this._hash.clone();return a}});l.SHA256=h._createHelper(f);l.HmacSHA256=h._createHmacHelper(f)})(Math);\n(function(){var g=CryptoJS,l=g.lib.WordArray,f=g.algo,k=f.SHA256,f=f.SHA224=k.extend({_doReset:function(){this._hash=new l.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var f=k._doFinalize.call(this);f.sigBytes-=4;return f}});g.SHA224=k._createHelper(f);g.HmacSHA224=k._createHmacHelper(f)})();\n"], "browser.indexed_db": [".py", "class EventListener:\n def __init__(self,events=[]):\n  self._events=events\n  \n def append(self,event):\n  self._events.append(event)\n  \n def fire(self,e):\n  for _event in self._events:\n   _event(e)\n   \nclass IndexedDB:\n def __init__(self):\n  if not __BRYTHON__.has_indexedDB:\n   raise NotImplementedError(\"Your browser doesn't support indexedDB\")\n   return\n   \n  self._indexedDB=__BRYTHON__.indexedDB()\n  self._db=None\n  self._version=None\n  \n def _onsuccess(self,event):\n  self._db=event.target.result\n  \n def open(self,name,onsuccess,version=1.0,onerror=None ,\n onupgradeneeded=None ):\n  self._version=version\n  _result=self._indexedDB.open(name,version)\n  _success=EventListener([self._onsuccess,onsuccess])\n  _result.onsuccess=_success.fire\n  _result.onupgradeneeded=onupgradeneeded\n  \n  \n  def onerror(e):\n   print(\"onerror: %s:%s\"%(e.type,e.target.result))\n   \n  def onblocked(e):\n   print(\"blocked: %s:%s\"%(e.type,e.result))\n   \n  _result.onerror=onerror\n  _result.onblocked=onblocked\n  \n def transaction(self,entities,mode='read'):\n  return Transaction(self._db.transaction(entities,mode))\n  \nclass Transaction:\n\n def __init__(self,transaction):\n  self._transaction=transaction\n  \n def objectStore(self,name):\n  return ObjectStore(self._transaction.objectStore(name))\n  \nclass ObjectStore:\n\n def __init__(self,objectStore):\n  self._objectStore=objectStore\n  self._data=[]\n  \n def clear(self,onsuccess=None ,onerror=None ):\n  _result=self._objectStore.clear()\n  \n  if onsuccess is not None :\n   _result.onsuccess=onsuccess\n   \n  if onerror is not None :\n   _result.onerror=onerror\n   \n def _helper(self,func,object,onsuccess=None ,onerror=None ):\n  _result=func(object)\n  \n  if onsuccess is not None :\n   _result.onsuccess=onsuccess\n   \n  if onerror is not None :\n   _result.onerror=onerror\n   \n def put(self,obj,key=None ,onsuccess=None ,onerror=None ):\n  _r=self._objectStore.put(obj,key)\n  _r.onsuccess=onsuccess\n  _r.onerror=onerror\n  \n def add(self,obj,key,onsuccess=None ,onerror=None ):\n  _r=self._objectStore.add(obj,key)\n  _r.onsuccess=onsuccess\n  _r.onerror=onerror\n  \n  \n def delete(self,index,onsuccess=None ,onerror=None ):\n  self._helper(self._objectStore.delete,index,onsuccess,onerror)\n  \n def query(self,*args):\n  self._data=[]\n  def onsuccess(event):\n   cursor=event.target.result\n   if cursor is not None :\n    self._data.append(cursor.value)\n    getattr(cursor,\"continue\")()\n    \n  self._objectStore.openCursor(args).onsuccess=onsuccess\n  \n def fetchall(self):\n  yield self._data\n  \n def get(self,key,onsuccess=None ,onerror=None ):\n  self._helper(self._objectStore.get,key,onsuccess,onerror)\n"], "encodings.cp1257": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1257',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\ufffe'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\ufffe'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\ufffe'\n'\\xa8'\n'\\u02c7'\n'\\xb8'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\ufffe'\n'\\xaf'\n'\\u02db'\n'\\ufffe'\n'\\xa0'\n'\\ufffe'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\ufffe'\n'\\xa6'\n'\\xa7'\n'\\xd8'\n'\\xa9'\n'\\u0156'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xc6'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xf8'\n'\\xb9'\n'\\u0157'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xe6'\n'\\u0104'\n'\\u012e'\n'\\u0100'\n'\\u0106'\n'\\xc4'\n'\\xc5'\n'\\u0118'\n'\\u0112'\n'\\u010c'\n'\\xc9'\n'\\u0179'\n'\\u0116'\n'\\u0122'\n'\\u0136'\n'\\u012a'\n'\\u013b'\n'\\u0160'\n'\\u0143'\n'\\u0145'\n'\\xd3'\n'\\u014c'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\u0172'\n'\\u0141'\n'\\u015a'\n'\\u016a'\n'\\xdc'\n'\\u017b'\n'\\u017d'\n'\\xdf'\n'\\u0105'\n'\\u012f'\n'\\u0101'\n'\\u0107'\n'\\xe4'\n'\\xe5'\n'\\u0119'\n'\\u0113'\n'\\u010d'\n'\\xe9'\n'\\u017a'\n'\\u0117'\n'\\u0123'\n'\\u0137'\n'\\u012b'\n'\\u013c'\n'\\u0161'\n'\\u0144'\n'\\u0146'\n'\\xf3'\n'\\u014d'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\u0173'\n'\\u0142'\n'\\u015b'\n'\\u016b'\n'\\xfc'\n'\\u017c'\n'\\u017e'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "math": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +'=_b_[\"'+$b+'\"]')\neval($s.join(';'))\n\n//for(var $py_builtin in _b_){eval(\"var \"+$py_builtin+\"=_b_[$py_builtin]\")}\n\nvar float_check=function(x) {\n    if (x.__class__===$B.LongInt.$dict){return parseInt(x.value)}\n    return x\n}\n\nvar isWholeNumber=function(x){return (x*10) % 10 == 0}\n\nvar isOdd=function(x) {return isWholeNumber(x) && 2*Math.floor(x/2) != x}\n\nvar isLargeNumber=function(x) {return x > Math.pow(2,32)}\n\n// Big number Library from jsfromhell.com\n// This library helps with producing \"correct\" results from \n// mathematic operations\n\n//+ Jonas Raoni Soares Silva\n//@ http://jsfromhell.com/classes/bignumber [rev. #4]\n\n\nvar BigNumber = function(n, p, r){\n    var o = this, i;\n    if(n instanceof BigNumber){\n        for(i in {precision: 0, roundType: 0, _s: 0, _f: 0}) o[i] = n[i];\n        o._d = n._d.slice();\n        return;\n    }\n    o.precision = isNaN(p = Math.abs(p)) ? BigNumber.defaultPrecision : p;\n    o.roundType = isNaN(r = Math.abs(r)) ? BigNumber.defaultRoundType : r;\n    o._s = (n += \"\").charAt(0) == \"-\";\n    o._f = ((n = n.replace(/[^\\d.]/g, \"\").split(\".\", 2))[0] = n[0].replace(/^0+/, \"\") || \"0\").length;\n    for(i = (n = o._d = (n.join(\"\") || \"0\").split(\"\")).length; i; n[--i] = +n[i]);\n    o.round();\n};\nwith({$: BigNumber, o: BigNumber.prototype}){\n    $.ROUND_HALF_EVEN = ($.ROUND_HALF_DOWN = ($.ROUND_HALF_UP = ($.ROUND_FLOOR = ($.ROUND_CEIL = ($.ROUND_DOWN = ($.ROUND_UP = 0) + 1) + 1) + 1) + 1) + 1) + 1;\n    $.defaultPrecision = 40;\n    $.defaultRoundType = $.ROUND_HALF_UP;\n    o.add = function(n){\n        if(this._s != (n = new BigNumber(n))._s)\n            return n._s ^= 1, this.subtract(n);\n        var o = new BigNumber(this), a = o._d, b = n._d, la = o._f,\n        lb = n._f, n = Math.max(la, lb), i, r;\n        la != lb && ((lb = la - lb) > 0 ? o._zeroes(b, lb, 1) : o._zeroes(a, -lb, 1));\n        i = (la = a.length) == (lb = b.length) ? a.length : ((lb = la - lb) > 0 ? o._zeroes(b, lb) : o._zeroes(a, -lb)).length;\n        for(r = 0; i; r = (a[--i] = a[i] + b[i] + r) / 10 >>> 0, a[i] %= 10);\n        return r && ++n && a.unshift(r), o._f = n, o.round();\n    };\n    o.subtract = function(n){\n        if(this._s != (n = new BigNumber(n))._s)\n            return n._s ^= 1, this.add(n);\n        var o = new BigNumber(this), c = o.abs().compare(n.abs()) + 1, a = c ? o : n, b = c ? n : o, la = a._f, lb = b._f, d = la, i, j;\n        a = a._d, b = b._d, la != lb && ((lb = la - lb) > 0 ? o._zeroes(b, lb, 1) : o._zeroes(a, -lb, 1));\n        for(i = (la = a.length) == (lb = b.length) ? a.length : ((lb = la - lb) > 0 ? o._zeroes(b, lb) : o._zeroes(a, -lb)).length; i;){\n            if(a[--i] < b[i]){\n                for(j = i; j && !a[--j]; a[j] = 9);\n                --a[j], a[i] += 10;\n            }\n            b[i] = a[i] - b[i];\n        }\n        return c || (o._s ^= 1), o._f = d, o._d = b, o.round();\n    };\n    o.multiply = function(n){\n        var o = new BigNumber(this), r = o._d.length >= (n = new BigNumber(n))._d.length, a = (r ? o : n)._d,\n        b = (r ? n : o)._d, la = a.length, lb = b.length, x = new BigNumber, i, j, s;\n        for(i = lb; i; r && s.unshift(r), x.set(x.add(new BigNumber(s.join(\"\")))))\n            for(s = (new Array(lb - --i)).join(\"0\").split(\"\"), r = 0, j = la; j; r += a[--j] * b[i], s.unshift(r % 10), r = (r / 10) >>> 0);\n        return o._s = o._s != n._s, o._f = ((r = la + lb - o._f - n._f) >= (j = (o._d = x._d).length) ? this._zeroes(o._d, r - j + 1, 1).length : j) - r, o.round();\n    };\n    o.divide = function(n){\n        if((n = new BigNumber(n)) == \"0\")\n            throw new Error(\"Division by 0\");\n        else if(this == \"0\")\n            return new BigNumber;\n        var o = new BigNumber(this), a = o._d, b = n._d, la = a.length - o._f,\n        lb = b.length - n._f, r = new BigNumber, i = 0, j, s, l, f = 1, c = 0, e = 0;\n        r._s = o._s != n._s, r.precision = Math.max(o.precision, n.precision),\n        r._f = +r._d.pop(), la != lb && o._zeroes(la > lb ? b : a, Math.abs(la - lb));\n        n._f = b.length, b = n, b._s = false, b = b.round();\n        for(n = new BigNumber; a[0] == \"0\"; a.shift());\n        out:\n        do{\n            for(l = c = 0, n == \"0\" && (n._d = [], n._f = 0); i < a.length && n.compare(b) == -1; ++i){\n                (l = i + 1 == a.length, (!f && ++c > 1 || (e = l && n == \"0\" && a[i] == \"0\")))\n                && (r._f == r._d.length && ++r._f, r._d.push(0));\n                (a[i] == \"0\" && n == \"0\") || (n._d.push(a[i]), ++n._f);\n                if(e)\n                    break out;\n                if((l && n.compare(b) == -1 && (r._f == r._d.length && ++r._f, 1)) || (l = 0))\n                    while(r._d.push(0), n._d.push(0), ++n._f, n.compare(b) == -1);\n            }\n            if(f = 0, n.compare(b) == -1 && !(l = 0))\n                while(l ? r._d.push(0) : l = 1, n._d.push(0), ++n._f, n.compare(b) == -1);\n            for(s = new BigNumber, j = 0; n.compare(y = s.add(b)) + 1 && ++j; s.set(y));\n            n.set(n.subtract(s)), !l && r._f == r._d.length && ++r._f, r._d.push(j);\n        }\n        while((i < a.length || n != \"0\") && (r._d.length - r._f) <= r.precision);\n        return r.round();\n    };\n    o.mod = function(n){\n        return this.subtract(this.divide(n).intPart().multiply(n));\n    };\n    o.pow = function(n){\n        var o = new BigNumber(this), i;\n        if((n = (new BigNumber(n)).intPart()) == 0) return o.set(1);\n        for(i = Math.abs(n); --i; o.set(o.multiply(this)));\n        return n < 0 ? o.set((new BigNumber(1)).divide(o)) : o;\n    };\n    o.set = function(n){\n        return this.constructor(n), this;\n    };\n    o.compare = function(n){\n        var a = this, la = this._f, b = new BigNumber(n), lb = b._f, r = [-1, 1], i, l;\n        if(a._s != b._s)\n            return a._s ? -1 : 1;\n        if(la != lb)\n            return r[(la > lb) ^ a._s];\n        for(la = (a = a._d).length, lb = (b = b._d).length, i = -1, l = Math.min(la, lb); ++i < l;)\n            if(a[i] != b[i])\n                return r[(a[i] > b[i]) ^ a._s];\n        return la != lb ? r[(la > lb) ^ a._s] : 0;\n    };\n    o.negate = function(){\n        var n = new BigNumber(this); return n._s ^= 1, n;\n    };\n    o.abs = function(){\n        var n = new BigNumber(this); return n._s = 0, n;\n    };\n    o.intPart = function(){\n        return new BigNumber((this._s ? \"-\" : \"\") + (this._d.slice(0, this._f).join(\"\") || \"0\"));\n    };\n    o.valueOf = o.toString = function(){\n        var o = this;\n        return (o._s ? \"-\" : \"\") + (o._d.slice(0, o._f).join(\"\") || \"0\") + (o._f != o._d.length ? \".\" + o._d.slice(o._f).join(\"\") : \"\");\n    };\n    o._zeroes = function(n, l, t){\n        var s = [\"push\", \"unshift\"][t || 0];\n        for(++l; --l;  n[s](0));\n        return n;\n    };\n    o.round = function(){\n        if(\"_rounding\" in this) return this;\n        var $ = BigNumber, r = this.roundType, b = this._d, d, p, n, x;\n        for(this._rounding = true; this._f > 1 && !b[0]; --this._f, b.shift());\n        for(d = this._f, p = this.precision + d, n = b[p]; b.length > d && !b[b.length -1]; b.pop());\n        x = (this._s ? \"-\" : \"\") + (p - d ? \"0.\" + this._zeroes([], p - d - 1).join(\"\") : \"\") + 1;\n        if(b.length > p){\n            n && (r == $.DOWN ? false : r == $.UP ? true : r == $.CEIL ? !this._s\n            : r == $.FLOOR ? this._s : r == $.HALF_UP ? n >= 5 : r == $.HALF_DOWN ? n > 5\n            : r == $.HALF_EVEN ? n >= 5 && b[p - 1] & 1 : false) && this.add(x);\n            b.splice(p, b.length - p);\n        }\n        return delete this._rounding, this;\n    };\n}\n\nvar isNegZero=function(x) {return x===0 && Math.atan2(x,x) < 0}\n\nvar _mod = {\n    __getattr__ : function(attr){\n        var res = this[attr]\n        if(res===undefined){$raise('AttributeError','module math has no attribute '+attr)}\n        return res\n    },\n    acos: function(x) {return float(Math.acos(float_check(x)))},\n    acosh: function(x) { \n        if (_b_.$isinf(x)) return float('inf');\n        var y = float_check(x);\n        return float(Math.log(y + Math.sqrt(y*y-1)));\n    },\n    asin: function(x) {return float(Math.asin(float_check(x)))},\n    asinh: function(x) {\n        if (_b_.$isninf(x)) return float('-inf');\n        if (_b_.$isinf(x)) return float('inf');\n        var y = float_check(x);\n        return float(Math.log(y + Math.sqrt(y*y+1)))\n    },\n    atan: function(x) {\n        if (_b_.$isninf(x)) return float(-Math.PI/2);\n        if (_b_.$isinf(x)) return float(Math.PI/2);\n        return float(Math.atan(float_check(x)))},\n    atan2: function(y,x) {\n        return float(Math.atan2(float_check(y),float_check(x)))\n    },\n    atanh: function(x) { \n       var y=float_check(x);\n       if (y==0) return 0;\n       return float(0.5 * Math.log((1/y+1)/(1/y-1)));\n    },\n    ceil: function(x) {\n       try{return getattr(x,'__ceil__')()}catch(err){}\n\n       if (_b_.$isninf(x)) return float('-inf')\n       if (_b_.$isinf(x)) return float('inf')\n       if (isNaN(x)) return float('nan')\n\n       var y=float_check(x);\n       if (!isNaN(parseFloat(y)) && isFinite(y)) return int(Math.ceil(y));\n       \n       $raise('ValueError', 'object is not a number and does not contain __ceil__')\n    },\n    copysign: function(x,y) {\n        var x1=Math.abs(float_check(x))\n        var y1=float_check(y)\n        var sign=y1?y1<0?-1:1:1\n        if (isNegZero(y1)) sign=-1   // probably need to work on adding a check for -0\n        return float(x1 * sign)\n    },\n    cos : function(x){return float(Math.cos(float_check(x)))},\n    cosh: function(x){\n        if (_b_.$isinf(x)) return float('inf')\n        var y = float_check(x)\n        if (Math.cosh !== undefined) return float(Math.cosh(y))\n        return float((Math.pow(Math.E,y) + Math.pow(Math.E,-y))/2)\n    },\n    degrees: function(x){return float(float_check(x) * 180/Math.PI)},\n    e: float(Math.E),\n    erf: function(x) {\n        // inspired from \n        // http://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python\n        var y =float_check(x);\n        var t = 1.0 / (1.0 + 0.5 * Math.abs(y))\n        var ans = 1 - t * Math.exp( -y*y - 1.26551223 +\n                     t * ( 1.00002368 +\n                     t * ( 0.37409196 + \n                     t * ( 0.09678418 + \n                     t * (-0.18628806 + \n                     t * ( 0.27886807 + \n                     t * (-1.13520398 + \n                     t * ( 1.48851587 + \n                     t * (-0.82215223 + \n                     t * 0.17087277)))))))))\n        if (y >= 0.0) return ans\n\n        return -ans\n    },\n\n    erfc: function(x) {\n        // inspired from \n        // http://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python\n        var y = float_check(x);\n        var t = 1.0 / (1.0 + 0.5 * Math.abs(y))\n        var ans = 1 - t * Math.exp( -y*y - 1.26551223 +\n                     t * ( 1.00002368 +\n                     t * ( 0.37409196 + \n                     t * ( 0.09678418 + \n                     t * (-0.18628806 + \n                     t * ( 0.27886807 + \n                     t * (-1.13520398 + \n                     t * ( 1.48851587 + \n                     t * (-0.82215223 + \n                     t * 0.17087277)))))))))\n        if (y >= 0.0) return 1-ans\n        return 1+ans\n    },\n    exp: function(x){\n         if (_b_.$isninf(x)) {return float(0)}\n         if (_b_.$isinf(x)) {return float('inf')}\n         var _r=Math.exp(float_check(x))\n         if (_b_.$isinf(_r)) {throw OverflowError(\"math range error\")}\n         return float(_r)\n    },\n    expm1: function(x){return float(Math.exp(float_check(x))-1)},\n    //fabs: function(x){ return x>0?float(x):float(-x)},\n    fabs: function(x){return _b_.$fabs(x)}, //located in py_float.js\n    factorial: function(x) {\n         //using code from http://stackoverflow.com/questions/3959211/fast-factorial-function-in-javascript\n         var y=float_check(x);\n         var r=1\n         for (var i=2; i<=y; i++){r*=i}\n         return r\n    },\n    floor:function(x){return Math.floor(float_check(x))},\n    fmod:function(x,y){return float(float_check(x)%float_check(y))},\n    frexp: function(x){var _l=_b_.$frexp(x);return _b_.tuple([float(_l[0]), _l[1]])}, // located in py_float.js\n    fsum:function(x){\n        var res = new Number(), _it = _b_.iter(x)\n        while(true){\n            try{\n                var item = _b_.next(_it)\n                res += new Number(item)\n            }catch(err){\n                if(_b_.isinstance(err, _b_.StopIteration)){break}\n                throw err\n            }\n        }\n        return res\n    },\n    gamma: function(x){\n         //using code from http://stackoverflow.com/questions/3959211/fast-factorial-function-in-javascript\n         // Lanczos Approximation of the Gamma Function\n         // As described in Numerical Recipes in C (2nd ed. Cambridge University Press, 1992)\n         var y=float_check(x);\n         var z = y + 1;\n         var d1 = Math.sqrt(2 * Math.PI) / z;\n\n         var d2 = 1.000000000190015;\n         d2 +=  76.18009172947146 / (z+1);\n         d2 += -86.50532032941677 / (z+2);\n         d2 +=  24.01409824083091 / (z+3); \n         d2 += -1.231739572450155 / (z+4); \n         d2 +=  1.208650973866179E-3 / (z+5);\n         d2 += -5.395239384953E-6 / (z+6);\n\n         return d1 * d2 * Math.pow(z+5.5,z+0.5) * Math.exp(-(z+5.5));\n    },\n    hypot: function(x,y){\n       if (_b_.$isinf(x) || _b_.$isinf(y)) return float('inf')\n       var x1=float_check(x);\n       var y1=float_check(y);\n       return float(Math.sqrt(x1*x1 + y1*y1))},\n    isfinite:function(x) {return isFinite(float_check(x))},\n    isinf:function(x) {return _b_.$isinf(float_check(x))},\n    isnan:function(x) {return isNaN(float_check(x))},\n    ldexp:function(x,i) {return _b_.$ldexp(x,i)},   //located in py_float.js\n    lgamma:function(x) {\n         // see gamma function for sources\n         var y=float_check(x);\n         var z = y + 1;\n         var d1 = Math.sqrt(2 * Math.PI) / z;\n\n         var d2 = 1.000000000190015;\n         d2 +=  76.18009172947146 / (z+1);\n         d2 += -86.50532032941677 / (z+2);\n         d2 +=  24.01409824083091 / (z+3); \n         d2 += -1.231739572450155 / (z+4); \n         d2 +=  1.208650973866179E-3 / (z+5);\n         d2 += -5.395239384953E-6 / (z+6);\n\n         return float(Math.log(Math.abs(d1 * d2 * Math.pow(z+5.5,z+0.5) * Math.exp(-(z+5.5)))));\n    },\n    log: function(x, base) {\n         var x1=float_check(x);\n         if (base === undefined) return float(Math.log(x1));\n         return float(Math.log(x1)/Math.log(float_check(base)));\n    },\n    log1p: function(x) {return float(Math.log(1.0 + float_check(x)))},\n    log2: function(x) {\n        if (isNaN(x)) return float('nan')\n        if (_b_.$isninf(x)) throw ValueError('')\n        var x1=float_check(x)\n        if (x1 < 0.0) throw ValueError('')\n        //if (isLargeNumber(x1)) x1=new BigNumber(x1)         \n        return float(Math.log(x1)/Math.LN2)\n    },\n    log10: function(x) {return float(Math.log(float_check(x))/Math.LN10)},\n    modf:function(x) {\n       if (_b_.$isninf(x)) return _b_.tuple([0.0, float('-inf')])\n       if (_b_.$isinf(x)) return _b_.tuple([0.0, float('inf')])\n       if (isNaN(x)) return _b_.tuple([float('nan'), float('nan')])\n\n       var x1=float_check(x);\n       if (x1 > 0) {\n          var i=float(x1-Math.floor(x1))\n          return _b_.tuple([i, float(x1-i)])\n       }\n\n       var x2=Math.ceil(x1)\n       var i=float(x1-x2)\n       return _b_.tuple([i, float(x2)])\n    },\n    pi : float(Math.PI),\n    pow: function(x,y) {\n        var x1=float_check(x)\n        var y1=float_check(y)\n        if (y1 == 0) return float(1)        \n        if (x1 == 0 && y1 < 0) throw _b_.ValueError('')\n\n        if(isNaN(y1)) {if(x1==1) return float(1) \n                       return float('nan')\n        }\n        if (x1 == 0) return float(0)\n\n        if(_b_.$isninf(y)) {if(x1==1||x1==-1) {return float(1)}\n                       if(x1 < 1 && x1 > -1) return float('inf') \n                       return float(0)\n        }\n        if(_b_.$isinf(y)) {if(x1==1||x1==-1) {return float(1)} \n                      if(x1 < 1 && x1 > -1) return float(0) \n                      return float('inf')}\n\n        if(isNaN(x1)) return float('nan')\n        if(_b_.$isninf(x)) {\n            if (y1 > 0 && isOdd(y1)) return float('-inf')\n            if (y1 > 0) return float('inf')  // this is even or a float\n            if (y1 < 0) return float(0)\n            return float(1)\n        }\n\n        if(_b_.$isinf(x)) { \n            if (y1 > 0) return float('inf')\n            if (y1 < 0) return float(0)\n            return float(1)\n        }\n\n        var r\n        if (isLargeNumber(x1) || isLargeNumber(y1)) {\n           var x=new BigNumber(x1)\n           var y=new BigNumber(y1)\n           r=x.pow(y)\n        } else {\n           r=Math.pow(x1,y1)\n        }\n\n        if (isNaN(r)) return float('nan')\n        if (_b_.$isninf(r)) return float('-inf')\n        if (_b_.$isinf(r)) return float('inf')\n\n        return r\n    },\n    radians: function(x){return float(float_check(x) * Math.PI/180)},\n    sin : function(x){return float(Math.sin(float_check(x)))},\n    sinh: function(x) { \n        //if (_b_.$isinf(x)) return float('inf');\n        var y = float_check(x)\n        if (Math.sinh !== undefined) { return float(Math.sinh(y))}\n        return float((Math.pow(Math.E,y) - Math.pow(Math.E,-y))/2)\n    },\n    sqrt : function(x){\n      var y = float_check(x)\n      if (y < 0) { throw ValueError(\"math range error\")}\n      if (_b_.$isinf(y)) return float('inf')\n      var _r=Math.sqrt(y)\n      if (_b_.$isinf(_r)) {throw OverflowError(\"math range error\")}\n      return float(_r)\n    },\n    tan: function(x) {\n        var y = float_check(x)\n        return float(Math.tan(y))\n    },\n    tanh: function(x) {\n        var y = float_check(x)\n        if (Math.tanh !== undefined) return float(Math.tanh(y))\n        return float((Math.pow(Math.E,y) - Math.pow(Math.E,-y))/\n                     (Math.pow(Math.E,y) + Math.pow(Math.E,-y)))       \n    },\n    trunc: function(x) {\n       try{return getattr(x,'__trunc__')()}catch(err){}\n       var x1=float_check(x);\n       if (!isNaN(parseFloat(x1)) && isFinite(x1)) {\n          if (Math.trunc !== undefined) { return int(Math.trunc(x1))}\n          if (x1 > 0) {return int(Math.floor(x1))}\n          return int(Math.ceil(x1))  // x1 < 0\n       }\n       $raise('ValueError', 'object is not a number and does not contain __trunc__')\n    }\n}\n\nfor(var $attr in _mod){\n    if(typeof _mod[$attr]==='function'){\n        _mod[$attr].__repr__=(function(func){\n            return function(){return '<built-in function '+func+'>'}})($attr)\n        _mod[$attr].__str__=(function(func){\n            return function(){return '<built-in function '+func+'>'}})($attr)\n    }\n}\n\nreturn _mod\n\n})(__BRYTHON__)\n"], "importlib.util": [".py", "''\n\nfrom ._bootstrap import module_for_loader\nfrom ._bootstrap import set_loader\nfrom ._bootstrap import set_package\nfrom ._bootstrap import _resolve_name\n\n\ndef resolve_name(name,package):\n ''\n if not name.startswith('.'):\n  return name\n elif not package:\n  raise ValueError('{!r} is not a relative name '\n  '(no leading dot)'.format(name))\n level=0\n for character in name:\n  if character !='.':\n   break\n  level +=1\n return _resolve_name(name[level:],package,level)\n"], "contextlib": [".py", "''\n\nimport sys\nfrom collections import deque\nfrom functools import wraps\n\n__all__=[\"contextmanager\",\"closing\",\"ContextDecorator\",\"ExitStack\"]\n\n\nclass ContextDecorator(object):\n ''\n \n def _recreate_cm(self):\n  ''\n\n\n\n\n\n\n\n  \n  return self\n  \n def __call__(self,func):\n  @wraps(func)\n  def inner(*args,**kwds):\n   with self._recreate_cm():\n    return func(*args,**kwds)\n  return inner\n  \n  \nclass _GeneratorContextManager(ContextDecorator):\n ''\n \n def __init__(self,func,*args,**kwds):\n  self.gen=func(*args,**kwds)\n  self.func,self.args,self.kwds=func,args,kwds\n  \n def _recreate_cm(self):\n \n \n \n  return self.__class__(self.func,*self.args,**self.kwds)\n  \n def __enter__(self):\n  try :\n   return next(self.gen)\n  except StopIteration:\n   raise RuntimeError(\"generator didn't yield\")\n   \n def __exit__(self,type,value,traceback):\n  if type is None :\n   try :\n    next(self.gen)\n   except StopIteration:\n    return\n   else :\n    raise RuntimeError(\"generator didn't stop\")\n  else :\n   if value is None :\n   \n   \n    value=type()\n   try :\n    self.gen.throw(type,value,traceback)\n    raise RuntimeError(\"generator didn't stop after throw()\")\n   except StopIteration as exc:\n   \n   \n   \n    return exc is not value\n   except :\n   \n   \n   \n   \n   \n   \n   \n    if sys.exc_info()[1]is not value:\n     raise\n     \n     \ndef contextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n  return _GeneratorContextManager(func,*args,**kwds)\n return helper\n \n \nclass closing(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,thing):\n  self.thing=thing\n def __enter__(self):\n  return self.thing\n def __exit__(self,*exc_info):\n  self.thing.close()\n  \n  \n  \nclass ExitStack(object):\n ''\n\n\n\n\n\n\n\n\n\n \n def __init__(self):\n  self._exit_callbacks=deque()\n  \n def pop_all(self):\n  ''\n  new_stack=type(self)()\n  new_stack._exit_callbacks=self._exit_callbacks\n  self._exit_callbacks=deque()\n  return new_stack\n  \n def _push_cm_exit(self,cm,cm_exit):\n  ''\n  def _exit_wrapper(*exc_details):\n   return cm_exit(cm,*exc_details)\n  _exit_wrapper.__self__=cm\n  self.push(_exit_wrapper)\n  \n def push(self,exit):\n  ''\n\n\n\n\n\n  \n  \n  \n  _cb_type=type(exit)\n  try :\n   exit_method=_cb_type.__exit__\n  except AttributeError:\n  \n   self._exit_callbacks.append(exit)\n  else :\n   self._push_cm_exit(exit,exit_method)\n  return exit\n  \n def callback(self,callback,*args,**kwds):\n  ''\n\n\n  \n  def _exit_wrapper(exc_type,exc,tb):\n   callback(*args,**kwds)\n   \n   \n  _exit_wrapper.__wrapped__=callback\n  self.push(_exit_wrapper)\n  return callback\n  \n def enter_context(self,cm):\n  ''\n\n\n\n  \n  \n  _cm_type=type(cm)\n  _exit=_cm_type.__exit__\n  result=_cm_type.__enter__(cm)\n  self._push_cm_exit(cm,_exit)\n  return result\n  \n def close(self):\n  ''\n  self.__exit__(None ,None ,None )\n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,*exc_details):\n  received_exc=exc_details[0]is not None\n  \n  \n  \n  frame_exc=sys.exc_info()[1]\n  def _fix_exception_context(new_exc,old_exc):\n   while 1:\n    exc_context=new_exc.__context__\n    if exc_context in (None ,frame_exc):\n     break\n    new_exc=exc_context\n   new_exc.__context__=old_exc\n   \n   \n   \n  suppressed_exc=False\n  pending_raise=False\n  while self._exit_callbacks:\n   cb=self._exit_callbacks.pop()\n   try :\n    if cb(*exc_details):\n     suppressed_exc=True\n     pending_raise=False\n     exc_details=(None ,None ,None )\n   except :\n    new_exc_details=sys.exc_info()\n    \n    _fix_exception_context(new_exc_details[1],exc_details[1])\n    pending_raise=True\n    exc_details=new_exc_details\n  if pending_raise:\n   try :\n   \n   \n    fixed_ctx=exc_details[1].__context__\n    raise exc_details[1]\n   except BaseException:\n    exc_details[1].__context__=fixed_ctx\n    raise\n  return received_exc and suppressed_exc\n"], "copyreg": [".py", "''\n\n\n\n\n\n__all__=[\"pickle\",\"constructor\",\n\"add_extension\",\"remove_extension\",\"clear_extension_cache\"]\n\ndispatch_table={}\n\ndef pickle(ob_type,pickle_function,constructor_ob=None ):\n if not callable(pickle_function):\n  raise TypeError(\"reduction functions must be callable\")\n dispatch_table[ob_type]=pickle_function\n \n \n \n if constructor_ob is not None :\n  constructor(constructor_ob)\n  \ndef constructor(object):\n if not callable(object):\n  raise TypeError(\"constructors must be callable\")\n  \n  \n  \ntry :\n complex\nexcept NameError:\n pass\nelse :\n\n def pickle_complex(c):\n  return complex,(c.real,c.imag)\n  \n pickle(complex,pickle_complex,complex)\n \n \n \ndef _reconstructor(cls,base,state):\n if base is object:\n  obj=object.__new__(cls)\n else :\n  obj=base.__new__(cls,state)\n  if base.__init__ !=object.__init__:\n   base.__init__(obj,state)\n return obj\n \n_HEAPTYPE=1 <<9\n\n\n\ndef _reduce_ex(self,proto):\n assert proto <2\n for base in self.__class__.__mro__:\n  if hasattr(base,'__flags__')and not base.__flags__&_HEAPTYPE:\n   break\n else :\n  base=object\n if base is object:\n  state=None\n else :\n  if base is self.__class__:\n   raise TypeError(\"can't pickle %s objects\"%base.__name__)\n  state=base(self)\n args=(self.__class__,base,state)\n try :\n  getstate=self.__getstate__\n except AttributeError:\n  if getattr(self,\"__slots__\",None ):\n   raise TypeError(\"a class that defines __slots__ without \"\n   \"defining __getstate__ cannot be pickled\")\n  try :\n   dict=self.__dict__\n  except AttributeError:\n   dict=None\n else :\n  dict=getstate()\n if dict:\n  return _reconstructor,args,dict\n else :\n  return _reconstructor,args\n  \n  \n  \ndef __newobj__(cls,*args):\n return cls.__new__(cls,*args)\n \ndef _slotnames(cls):\n ''\n\n\n\n\n\n\n\n \n \n \n names=cls.__dict__.get(\"__slotnames__\")\n if names is not None :\n  return names\n  \n  \n names=[]\n if not hasattr(cls,\"__slots__\"):\n \n  pass\n else :\n \n  for c in cls.__mro__:\n   if\"__slots__\"in c.__dict__:\n    slots=c.__dict__['__slots__']\n    \n    if isinstance(slots,str):\n     slots=(slots,)\n    for name in slots:\n    \n     if name in (\"__dict__\",\"__weakref__\"):\n      continue\n      \n     elif name.startswith('__')and not name.endswith('__'):\n      names.append('_%s%s'%(c.__name__,name))\n     else :\n      names.append(name)\n      \n      \n try :\n  cls.__slotnames__=names\n except :\n  pass\n  \n return names\n \n \n \n \n \n \n \n \n \n \n_extension_registry={}\n_inverted_registry={}\n_extension_cache={}\n\n\n\ndef add_extension(module,name,code):\n ''\n code=int(code)\n if not 1 <=code <=0x7fffffff:\n  raise ValueError(\"code out of range\")\n key=(module,name)\n if (_extension_registry.get(key)==code and\n _inverted_registry.get(code)==key):\n  return\n if key in _extension_registry:\n  raise ValueError(\"key %s is already registered with code %s\"%\n  (key,_extension_registry[key]))\n if code in _inverted_registry:\n  raise ValueError(\"code %s is already in use for key %s\"%\n  (code,_inverted_registry[code]))\n _extension_registry[key]=code\n _inverted_registry[code]=key\n \ndef remove_extension(module,name,code):\n ''\n key=(module,name)\n if (_extension_registry.get(key)!=code or\n _inverted_registry.get(code)!=key):\n  raise ValueError(\"key %s is not registered with code %s\"%\n  (key,code))\n del _extension_registry[key]\n del _inverted_registry[code]\n if code in _extension_cache:\n  del _extension_cache[code]\n  \ndef clear_extension_cache():\n _extension_cache.clear()\n \n \n \n \n \n \n \n \n \n \n \n \n \n"], "encodings.cp424": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp424',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\xa2'\n'.'\n'<'\n'('\n'+'\n'|'\n'&'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'!'\n'$'\n'*'\n')'\n';'\n'\\xac'\n'-'\n'/'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\xa6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\ufffe'\n'\\u05ea'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2017'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\ufffe'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xb8'\n'\\ufffe'\n'\\xa4'\n'\\xb5'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xae'\n'^'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'['\n']'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\\\'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "multiprocessing.dummy": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\n'Process','current_process','active_children','freeze_support',\n'Lock','RLock','Semaphore','BoundedSemaphore','Condition',\n'Event','Barrier','Queue','Manager','Pipe','Pool','JoinableQueue'\n]\n\n\n\n\n\nimport threading\nimport sys\nimport weakref\n\n\n\nfrom multiprocessing.dummy.connection import Pipe\nfrom threading import Lock,RLock,Semaphore,BoundedSemaphore\nfrom threading import Event,Condition,Barrier\nfrom queue import Queue\n\n\n\n\n\nclass DummyProcess(threading.Thread):\n\n def __init__(self,group=None ,target=None ,name=None ,args=(),kwargs={}):\n  threading.Thread.__init__(self,group,target,name,args,kwargs)\n  self._pid=None\n  self._children=weakref.WeakKeyDictionary()\n  self._start_called=False\n  self._parent=current_process()\n  \n def start(self):\n  assert self._parent is current_process()\n  self._start_called=True\n  if hasattr(self._parent,'_children'):\n   self._parent._children[self]=None\n  threading.Thread.start(self)\n  \n @property\n def exitcode(self):\n  if self._start_called and not self.is_alive():\n   return 0\n  else :\n   return None\n   \n   \n   \n   \n   \nProcess=DummyProcess\ncurrent_process=threading.current_thread\ncurrent_process()._children=weakref.WeakKeyDictionary()\n\ndef active_children():\n children=current_process()._children\n for p in list(children):\n  if not p.is_alive():\n   children.pop(p,None )\n return list(children)\n \ndef freeze_support():\n pass\n \n \n \n \n \nclass Namespace(object):\n def __init__(self,**kwds):\n  self.__dict__.update(kwds)\n def __repr__(self):\n  items=list(self.__dict__.items())\n  temp=[]\n  for name,value in items:\n   if not name.startswith('_'):\n    temp.append('%s=%r'%(name,value))\n  temp.sort()\n  return'Namespace(%s)'%str.join(', ',temp)\n  \ndict=dict\nlist=list\n\n\n\n\n\nclass Value(object):\n def __init__(self,typecode,value,lock=True ):\n  self._typecode=typecode\n  self._value=value\n def _get(self):\n  return self._value\n def _set(self,value):\n  self._value=value\n value=property(_get,_set)\n def __repr__(self):\n  return'<%r(%r, %r)>'%(type(self).__name__,self._typecode,self._value)\n  \ndef Manager():\n return sys.modules[__name__]\n \ndef shutdown():\n pass\n \ndef Pool(processes=None ,initializer=None ,initargs=()):\n from multiprocessing.pool import ThreadPool\n return ThreadPool(processes,initializer,initargs)\n \nJoinableQueue=Queue\n", 1], "fnmatch": [".py", "''\n\n\n\n\n\n\n\n\n\n\nimport os\nimport posixpath\nimport re\nimport functools\n\n__all__=[\"filter\",\"fnmatch\",\"fnmatchcase\",\"translate\"]\n\ndef fnmatch(name,pat):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n name=os.path.normcase(name)\n pat=os.path.normcase(pat)\n return fnmatchcase(name,pat)\n \n@functools.lru_cache(maxsize=256,typed=True )\ndef _compile_pattern(pat):\n if isinstance(pat,bytes):\n  pat_str=str(pat,'ISO-8859-1')\n  res_str=translate(pat_str)\n  res=bytes(res_str,'ISO-8859-1')\n else :\n  res=translate(pat)\n return re.compile(res).match\n \ndef filter(names,pat):\n ''\n result=[]\n pat=os.path.normcase(pat)\n match=_compile_pattern(pat)\n if os.path is posixpath:\n \n  for name in names:\n   if match(name):\n    result.append(name)\n else :\n  for name in names:\n   if match(os.path.normcase(name)):\n    result.append(name)\n return result\n \ndef fnmatchcase(name,pat):\n ''\n\n\n\n \n match=_compile_pattern(pat)\n return match(name)is not None\n \n \ndef translate(pat):\n ''\n\n\n \n \n i,n=0,len(pat)\n res=''\n while i <n:\n  c=pat[i]\n  i=i+1\n  if c =='*':\n   res=res+'.*'\n  elif c =='?':\n   res=res+'.'\n  elif c =='[':\n   j=i\n   if j <n and pat[j]=='!':\n    j=j+1\n   if j <n and pat[j]==']':\n    j=j+1\n   while j <n and pat[j]!=']':\n    j=j+1\n   if j >=n:\n    res=res+'\\\\['\n   else :\n    stuff=pat[i:j].replace('\\\\','\\\\\\\\')\n    i=j+1\n    if stuff[0]=='!':\n     stuff='^'+stuff[1:]\n    elif stuff[0]=='^':\n     stuff='\\\\'+stuff\n    res='%s[%s]'%(res,stuff)\n  else :\n   res=res+re.escape(c)\n return res+'\\Z(?ms)'\n"], "_svg": [".js", "// creation of an HTML element\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\nvar $TagSumDict = $B.$TagSum.$dict\n\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +'=_b_[\"'+$b+'\"]')\neval($s.join(';'))\n\nvar $svgNS = \"http://www.w3.org/2000/svg\"\nvar $xlinkNS = \"http://www.w3.org/1999/xlink\"\n\nfunction makeTagDict(tagName){\n    // return the dictionary for the class associated with tagName\n    var dict = {__class__:$B.$type,\n        __name__:tagName\n        }\n\n    dict.__getattribute__ = function(self, attr){\n        if(self.elt.hasAttributeNS(null, attr)){\n            return self.elt.getAttributeNS(null,attr)\n        }\n        if(dict[attr]!==undefined){\n            return function(){\n                var args = [self].concat(Array.prototype.slice.call(arguments))\n                return dict[attr].apply(null, args)\n            }\n        }\n        return $B.DOMNodeDict.__getattribute__(self, attr)        \n    }\n\n    dict.__init__ = function(){\n        var $ns=$B.args('__init__',1,{self:null},['self'],\n            arguments,{},'args','kw')\n        var self = $ns['self']\n        var args = $ns['args']\n        if(args.length==1){\n            var first=args[0]\n            if(isinstance(first,[str,int,float])){\n                self.elt.appendChild(document.createTextNode(str(first)))\n            } else if(first.__class__===$TagSumDict){\n                for(var i=0, _len_i = first.children.length; i < _len_i;i++){\n                    self.elt.appendChild(first.children[i].elt)\n                }\n            } else { // argument is another DOMNode instance\n                try{self.elt.appendChild(first.elt)}\n                catch(err){throw ValueError('wrong element '+first)}\n            }\n        }\n\n        // attributes\n        var items = _b_.list(_b_.dict.$dict.items($ns['kw']))\n        for(var i=0, _len_i = items.length; i < _len_i;i++){\n            // keyword arguments\n            var arg = items[i][0]\n            var value = items[i][1]\n            if(arg.toLowerCase().substr(0,2)===\"on\"){ \n                // Event binding passed as argument \"onclick\", \"onfocus\"...\n                // Better use method bind of DOMNode objects\n                var js = '$B.DOMNodeDict.bind(self,\"'\n                js += arg.toLowerCase().substr(2)\n                eval(js+'\",function(){'+value+'})')\n            }else if(arg.toLowerCase()==\"style\"){\n                $B.DOMNodeDict.set_style(self,value)\n            }else if(arg.toLowerCase().indexOf(\"href\") !== -1){ // xlink:href\n                self.elt.setAttributeNS( \"http://www.w3.org/1999/xlink\",\"href\",value)\n            } else {\n                if(value!==false){\n                    // option.selected=false sets it to true :-)\n                    try{\n                        arg = arg.toLowerCase().replace('_','-')\n                        self.elt.setAttributeNS(null,arg,value)\n                    }catch(err){\n                        throw ValueError(\"can't set attribute \"+arg)\n                    }\n                }\n            }\n        }\n    }\n\n    dict.__mro__ = [dict,$B.DOMNodeDict,$B.builtins.object.$dict]\n\n    dict.__new__ = function(cls){\n        var res = $B.DOMNode(document.createElementNS($svgNS,tagName))\n        res.__class__ = cls.$dict\n        return res\n    }\n    \n    dict.__setattr__ = function(self, key, value){\n        if(self.elt.hasAttributeNS(null, key)){\n            self.elt.setAttributeNS(null,key,value)\n        }else{\n            $B.DOMNodeDict.__setattr__(self, key, value)\n        }\n    }\n\n    return dict\n}\n\n\n// the classes used for tag sums, $TagSum and $TagSumClass \n// are defined in py_dom.js\n\nfunction makeFactory(tagName){\n    var factory = function(){\n        var res = $B.DOMNode(document.createElementNS($svgNS,tagName))\n        res.__class__ = dicts[tagName]\n        // apply __init__\n        var args = [res]\n        for(var i=0, _len_i = arguments.length; i < _len_i;i++){args.push(arguments[i])}\n        dicts[tagName].__init__.apply(null,args)\n        return res\n    }\n    factory.__class__=$B.$factory\n    factory.$dict = dicts[tagName]\n    return factory\n}\n\n// SVG\nvar $svg_tags = ['a',\n'altGlyph',\n'altGlyphDef',\n'altGlyphItem',\n'animate',\n'animateColor',\n'animateMotion',\n'animateTransform',\n'circle',\n'clipPath',\n'color_profile', // instead of color-profile\n'cursor',\n'defs',\n'desc',\n'ellipse',\n'feBlend',\n'foreignObject', //patch to enable foreign objects\n'g',\n'image',\n'line',\n'linearGradient',\n'marker',\n'mask',\n'path',\n'pattern',\n'polygon',\n'polyline',\n'radialGradient',\n'rect',\n'set',\n'stop',\n'svg',\n'text',\n'tref',\n'tspan',\n'use']\n\n// create classes\nvar obj = new Object()\nvar dicts = {}\nfor(var i=0, _len_i = $svg_tags.length; i < _len_i;i++){\n    var tag = $svg_tags[i]\n    dicts[tag]=makeTagDict(tag)\n    obj[tag] = makeFactory(tag)\n    dicts[tag].$factory = obj[tag]\n}\nreturn obj\n})(__BRYTHON__)\n"], "browser.timer": [".py", "from browser import window\n\ndef wrap(func):\n\n\n def f(*args,**kw):\n  try :\n   return func(*args,**kw)\n  except Exception as exc:\n   msg='{0.info}\\n{0.__name__}: {0.args[0]}'.format(exc)\n   import sys\n   sys.stderr.write(msg)\n return f\n \nclear_interval=window.clearInterval\n\nclear_timeout=window.clearTimeout\n\ndef set_interval(func,interval):\n return window.setInterval(wrap(func),interval)\n \ndef set_timeout(func,interval):\n return int(window.setTimeout(wrap(func),interval))\n \ndef request_animation_frame(func):\n return int(window.requestAnimationFrame(func))\n \ndef cancel_animation_frame(int_id):\n window.cancelAnimationFrame(int_id)\n \ndef set_loop_timeout(x):\n\n assert isinstance(x,int)\n __BRYTHON__.loop_timeout=x"], "jqueryui": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfrom browser import html,document,window\nimport javascript\n\n_path=__file__[:__file__.rfind('/')]+'/'\n\ndocument <=html.LINK(rel=\"stylesheet\",\nhref=_path+'css/smoothness/jquery-ui.css')\n\n\n\n\n\n\n\n\n\n\n\n\njavascript.load(_path+'jquery-1.11.2.min.js',['jQuery'])\njavascript.load(_path+'jquery-ui.min.js')\n\n_jqui=window.jQuery.noConflict(True )\n\n_events=['abort',\n'beforeinput',\n'blur',\n'click',\n'compositionstart',\n'compositionupdate',\n'compositionend',\n'dblclick',\n'error',\n'focus',\n'focusin',\n'focusout',\n'input',\n'keydown',\n'keyup',\n'load',\n'mousedown',\n'mouseenter',\n'mouseleave',\n'mousemove',\n'mouseout',\n'mouseover',\n'mouseup',\n'resize',\n'scroll',\n'select',\n'unload']\n\nclass JQFunction:\n\n def __init__(self,func):\n  self.func=func\n  \n def __call__(self,*args,**kw):\n  if kw:\n  \n   return self.func(*args,kw)\n  else :\n   return self.func(*args)\n   \nclass Element:\n ''\n \n def __init__(self,item):\n  self.item=item\n  \n def bind(self,event,callback):\n  ''\n  getattr(self.item,event)(callback)\n  \n def __getattr__(self,attr):\n  res=getattr(self.item,attr)\n  if attr in _events:\n  \n   return lambda f:self.bind(attr,f)\n  if callable(res):\n   res=JQFunction(res)\n  return res\n  \nclass jq:\n\n @staticmethod\n def get(**selectors):\n  items=[]\n  for k,v in selectors.items():\n   if k =='selector':\n    if isinstance(v,[list,tuple]):\n     values=v\n    else :\n     values=[v]\n    for value in values:\n     items.append(Element(_jqui(value)))\n   elif k =='element':\n    items=Element(_jqui(v))\n  return items\n  \n @staticmethod\n def __getitem__(element_id):\n  return jq.get(selector='#'+element_id)[0]\n", 1], "_thread": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=['error','start_new_thread','exit','get_ident','allocate_lock',\n'interrupt_main','LockType']\n\n\nTIMEOUT_MAX=2 **31\n\n\n\n\n\n\nerror=RuntimeError\n\ndef start_new_thread(function,args,kwargs={}):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if type(args)!=type(tuple()):\n  raise TypeError(\"2nd arg must be a tuple\")\n if type(kwargs)!=type(dict()):\n  raise TypeError(\"3rd arg must be a dict\")\n global _main\n _main=False\n try :\n  function(*args,**kwargs)\n except SystemExit:\n  pass\n except :\n  import traceback\n  traceback.print_exc()\n _main=True\n global _interrupt\n if _interrupt:\n  _interrupt=False\n  raise KeyboardInterrupt\n  \ndef exit():\n ''\n raise SystemExit\n \ndef get_ident():\n ''\n\n\n\n\n \n return -1\n \ndef allocate_lock():\n ''\n return LockType()\n \ndef stack_size(size=None ):\n ''\n if size is not None :\n  raise error(\"setting thread stack size not supported\")\n return 0\n \nclass LockType(object):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self):\n  self.locked_status=False\n  \n def acquire(self,waitflag=None ,timeout=-1):\n  ''\n\n\n\n\n\n\n\n\n  \n  if waitflag is None or waitflag:\n   self.locked_status=True\n   return True\n  else :\n   if not self.locked_status:\n    self.locked_status=True\n    return True\n   else :\n    if timeout >0:\n     import time\n     time.sleep(timeout)\n    return False\n    \n __enter__=acquire\n \n def __exit__(self,typ,val,tb):\n  self.release()\n  \n def release(self):\n  ''\n  \n  \n  if not self.locked_status:\n   raise error\n  self.locked_status=False\n  return True\n  \n def locked(self):\n  return self.locked_status\n  \n  \n_interrupt=False\n\n_main=True\n\ndef interrupt_main():\n ''\n \n if _main:\n  raise KeyboardInterrupt\n else :\n  global _interrupt\n  _interrupt=True\n  \n  \nclass _local:\n pass"], "encodings.cp1258": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1258',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\u0152'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\u0153'\n'\\ufffe'\n'\\ufffe'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\u0300'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u0110'\n'\\xd1'\n'\\u0309'\n'\\xd3'\n'\\xd4'\n'\\u01a0'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u01af'\n'\\u0303'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\u0301'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u0111'\n'\\xf1'\n'\\u0323'\n'\\xf3'\n'\\xf4'\n'\\u01a1'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u01b0'\n'\\u20ab'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "multiprocessing.dummy.connection": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=['Client','Listener','Pipe']\n\nfrom queue import Queue\n\n\nfamilies=[None ]\n\n\nclass Listener(object):\n\n def __init__(self,address=None ,family=None ,backlog=1):\n  self._backlog_queue=Queue(backlog)\n  \n def accept(self):\n  return Connection(*self._backlog_queue.get())\n  \n def close(self):\n  self._backlog_queue=None\n  \n address=property(lambda self:self._backlog_queue)\n \n def __enter__(self):\n  return self\n  \n def __exit__(self,exc_type,exc_value,exc_tb):\n  self.close()\n  \n  \ndef Client(address):\n _in,_out=Queue(),Queue()\n address.put((_out,_in))\n return Connection(_in,_out)\n \n \ndef Pipe(duplex=True ):\n a,b=Queue(),Queue()\n return Connection(a,b),Connection(b,a)\n \n \nclass Connection(object):\n\n def __init__(self,_in,_out):\n  self._out=_out\n  self._in=_in\n  self.send=self.send_bytes=_out.put\n  self.recv=self.recv_bytes=_in.get\n  \n def poll(self,timeout=0.0):\n  if self._in.qsize()>0:\n   return True\n  if timeout <=0.0:\n   return False\n  self._in.not_empty.acquire()\n  self._in.not_empty.wait(timeout)\n  self._in.not_empty.release()\n  return self._in.qsize()>0\n  \n def close(self):\n  pass\n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,exc_type,exc_value,exc_tb):\n  self.close()\n"], "linecache": [".py", "''\n\n\n\n\n\n\nimport sys\nimport os\nimport tokenize\n\n__all__=[\"getline\",\"clearcache\",\"checkcache\"]\n\ndef getline(filename,lineno,module_globals=None ):\n lines=getlines(filename,module_globals)\n if 1 <=lineno <=len(lines):\n  return lines[lineno -1]\n else :\n  return''\n  \n  \n  \n  \ncache={}\n\n\ndef clearcache():\n ''\n \n global cache\n cache={}\n \n \ndef getlines(filename,module_globals=None ):\n ''\n \n \n if filename in cache:\n  return cache[filename][2]\n else :\n  return updatecache(filename,module_globals)\n  \n  \ndef checkcache(filename=None ):\n ''\n \n \n if filename is None :\n  filenames=list(cache.keys())\n else :\n  if filename in cache:\n   filenames=[filename]\n  else :\n   return\n   \n for filename in filenames:\n  size,mtime,lines,fullname=cache[filename]\n  if mtime is None :\n   continue\n  try :\n   stat=os.stat(fullname)\n  except os.error:\n   del cache[filename]\n   continue\n  if size !=stat.st_size or mtime !=stat.st_mtime:\n   del cache[filename]\n   \n   \ndef updatecache(filename,module_globals=None ):\n ''\n\n \n \n if filename in cache:\n  del cache[filename]\n if not filename or (filename.startswith('<')and filename.endswith('>')):\n  return []\n  \n fullname=filename\n try :\n  stat=os.stat(fullname)\n except OSError:\n  basename=filename\n  \n  \n  if module_globals and'__loader__'in module_globals:\n   name=module_globals.get('__name__')\n   loader=module_globals['__loader__']\n   get_source=getattr(loader,'get_source',None )\n   \n   if name and get_source:\n    try :\n     data=get_source(name)\n    except (ImportError,IOError):\n     pass\n    else :\n     if data is None :\n     \n     \n      return []\n     cache[filename]=(\n     len(data),None ,\n     [line+'\\n'for line in data.splitlines()],fullname\n     )\n     return cache[filename][2]\n     \n     \n     \n  if os.path.isabs(filename):\n   return []\n   \n  for dirname in sys.path:\n   try :\n    fullname=os.path.join(dirname,basename)\n   except (TypeError,AttributeError):\n   \n    continue\n   try :\n    stat=os.stat(fullname)\n    break\n   except os.error:\n    pass\n  else :\n   return []\n try :\n  with tokenize.open(fullname)as fp:\n   lines=fp.readlines()\n except IOError:\n  return []\n if lines and not lines[-1].endswith('\\n'):\n  lines[-1]+='\\n'\n size,mtime=stat.st_size,stat.st_mtime\n cache[filename]=size,mtime,lines,fullname\n return lines\n"], "xml.etree.ElementTree": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\n\n\"Comment\",\n\"dump\",\n\"Element\",\"ElementTree\",\n\"fromstring\",\"fromstringlist\",\n\"iselement\",\"iterparse\",\n\"parse\",\"ParseError\",\n\"PI\",\"ProcessingInstruction\",\n\"QName\",\n\"SubElement\",\n\"tostring\",\"tostringlist\",\n\"TreeBuilder\",\n\"VERSION\",\n\"XML\",\"XMLID\",\n\"XMLParser\",\"XMLTreeBuilder\",\n\"register_namespace\",\n]\n\nVERSION=\"1.3.0\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport sys\nimport re\nimport warnings\nimport io\nimport contextlib\n\nfrom .import ElementPath\n\n\n\n\n\n\n\n\n\nclass ParseError(SyntaxError):\n pass\n \n \n \n \n \n \n \n \n \n \ndef iselement(element):\n\n\n return hasattr(element,'tag')\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nclass Element:\n\n\n\n\n\n tag=None\n \n \n \n \n \n \n \n \n \n attrib=None\n \n \n \n \n \n \n \n text=None\n \n \n \n \n \n \n \n tail=None\n \n \n \n def __init__(self,tag,attrib={},**extra):\n  if not isinstance(attrib,dict):\n   raise TypeError(\"attrib must be dict, not %s\"%(\n   attrib.__class__.__name__,))\n  attrib=attrib.copy()\n  attrib.update(extra)\n  self.tag=tag\n  self.attrib=attrib\n  self._children=[]\n  \n def __repr__(self):\n  return\"<Element %s at 0x%x>\"%(repr(self.tag),id(self))\n  \n  \n  \n  \n  \n  \n  \n  \n def makeelement(self,tag,attrib):\n  return self.__class__(tag,attrib)\n  \n  \n  \n  \n  \n  \n  \n def copy(self):\n  elem=self.makeelement(self.tag,self.attrib)\n  elem.text=self.text\n  elem.tail=self.tail\n  elem[:]=self\n  return elem\n  \n  \n  \n  \n  \n  \n  \n  \n def __len__(self):\n  return len(self._children)\n  \n def __bool__(self):\n  warnings.warn(\n  \"The behavior of this method will change in future versions.  \"\n  \"Use specific 'len(elem)' or 'elem is not None' test instead.\",\n  FutureWarning,stacklevel=2\n  )\n  return len(self._children)!=0\n  \n  \n  \n  \n  \n  \n  \n  \n def __getitem__(self,index):\n  return self._children[index]\n  \n  \n  \n  \n  \n  \n  \n  \n def __setitem__(self,index,element):\n \n \n \n \n \n  self._children[index]=element\n  \n  \n  \n  \n  \n  \n  \n def __delitem__(self,index):\n  del self._children[index]\n  \n  \n  \n  \n  \n  \n  \n  \n  \n def append(self,element):\n  self._assert_is_element(element)\n  self._children.append(element)\n  \n  \n  \n  \n  \n  \n  \n def extend(self,elements):\n  for element in elements:\n   self._assert_is_element(element)\n  self._children.extend(elements)\n  \n  \n  \n  \n  \n  \n def insert(self,index,element):\n  self._assert_is_element(element)\n  self._children.insert(index,element)\n  \n def _assert_is_element(self,e):\n \n \n  if not isinstance(e,_Element):\n   raise TypeError('expected an Element, not %s'%type(e).__name__)\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n def remove(self,element):\n \n  self._children.remove(element)\n  \n  \n  \n  \n  \n  \n  \n  \n def getchildren(self):\n  warnings.warn(\n  \"This method will be removed in future versions.  \"\n  \"Use 'list(elem)' or iteration over elem instead.\",\n  DeprecationWarning,stacklevel=2\n  )\n  return self._children\n  \n  \n  \n  \n  \n  \n  \n  \n  \n def find(self,path,namespaces=None ):\n  return ElementPath.find(self,path,namespaces)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def findtext(self,path,default=None ,namespaces=None ):\n  return ElementPath.findtext(self,path,default,namespaces)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def findall(self,path,namespaces=None ):\n  return ElementPath.findall(self,path,namespaces)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def iterfind(self,path,namespaces=None ):\n  return ElementPath.iterfind(self,path,namespaces)\n  \n  \n  \n  \n  \n  \n def clear(self):\n  self.attrib.clear()\n  self._children=[]\n  self.text=self.tail=None\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def get(self,key,default=None ):\n  return self.attrib.get(key,default)\n  \n  \n  \n  \n  \n  \n  \n  \n def set(self,key,value):\n  self.attrib[key]=value\n  \n  \n  \n  \n  \n  \n  \n  \n  \n def keys(self):\n  return self.attrib.keys()\n  \n  \n  \n  \n  \n  \n  \n  \n def items(self):\n  return self.attrib.items()\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def iter(self,tag=None ):\n  if tag ==\"*\":\n   tag=None\n  if tag is None or self.tag ==tag:\n   yield self\n  for e in self._children:\n   for e in e.iter(tag):\n    yield e\n    \n    \n def getiterator(self,tag=None ):\n \n  warnings.warn(\n  \"This method will be removed in future versions.  \"\n  \"Use 'elem.iter()' or 'list(elem.iter())' instead.\",\n  PendingDeprecationWarning,stacklevel=2\n  )\n  return list(self.iter(tag))\n  \n  \n  \n  \n  \n  \n  \n  \n  \n def itertext(self):\n  tag=self.tag\n  if not isinstance(tag,str)and tag is not None :\n   return\n  if self.text:\n   yield self.text\n  for e in self:\n   for s in e.itertext():\n    yield s\n   if e.tail:\n    yield e.tail\n    \n    \n_Element=_ElementInterface=Element\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndef SubElement(parent,tag,attrib={},**extra):\n attrib=attrib.copy()\n attrib.update(extra)\n element=parent.makeelement(tag,attrib)\n parent.append(element)\n return element\n \n \n \n \n \n \n \n \n \n \n \n \n \ndef Comment(text=None ):\n element=Element(Comment)\n element.text=text\n return element\n \n \n \n \n \n \n \n \n \n \n \ndef ProcessingInstruction(target,text=None ):\n element=Element(ProcessingInstruction)\n element.text=target\n if text:\n  element.text=element.text+\" \"+text\n return element\n \nPI=ProcessingInstruction\n\n\n\n\n\n\n\n\n\n\n\nclass QName:\n def __init__(self,text_or_uri,tag=None ):\n  if tag:\n   text_or_uri=\"{%s}%s\"%(text_or_uri,tag)\n  self.text=text_or_uri\n def __str__(self):\n  return self.text\n def __repr__(self):\n  return'<QName %r>'%(self.text,)\n def __hash__(self):\n  return hash(self.text)\n def __le__(self,other):\n  if isinstance(other,QName):\n   return self.text <=other.text\n  return self.text <=other\n def __lt__(self,other):\n  if isinstance(other,QName):\n   return self.text <other.text\n  return self.text <other\n def __ge__(self,other):\n  if isinstance(other,QName):\n   return self.text >=other.text\n  return self.text >=other\n def __gt__(self,other):\n  if isinstance(other,QName):\n   return self.text >other.text\n  return self.text >other\n def __eq__(self,other):\n  if isinstance(other,QName):\n   return self.text ==other.text\n  return self.text ==other\n def __ne__(self,other):\n  if isinstance(other,QName):\n   return self.text !=other.text\n  return self.text !=other\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \nclass ElementTree:\n\n def __init__(self,element=None ,file=None ):\n \n  self._root=element\n  if file:\n   self.parse(file)\n   \n   \n   \n   \n   \n   \n   \n def getroot(self):\n  return self._root\n  \n  \n  \n  \n  \n  \n  \n  \n def _setroot(self,element):\n \n  self._root=element\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def parse(self,source,parser=None ):\n  close_source=False\n  if not hasattr(source,\"read\"):\n   source=open(source,\"rb\")\n   close_source=True\n  try :\n   if not parser:\n    parser=XMLParser(target=TreeBuilder())\n   while 1:\n    data=source.read(65536)\n    if not data:\n     break\n    parser.feed(data)\n   self._root=parser.close()\n   return self._root\n  finally :\n   if close_source:\n    source.close()\n    \n    \n    \n    \n    \n    \n    \n    \n    \n def iter(self,tag=None ):\n \n  return self._root.iter(tag)\n  \n  \n def getiterator(self,tag=None ):\n \n  warnings.warn(\n  \"This method will be removed in future versions.  \"\n  \"Use 'tree.iter()' or 'list(tree.iter())' instead.\",\n  PendingDeprecationWarning,stacklevel=2\n  )\n  return list(self.iter(tag))\n  \n  \n  \n  \n  \n  \n  \n  \n  \n def find(self,path,namespaces=None ):\n \n  if path[:1]==\"/\":\n   path=\".\"+path\n   warnings.warn(\n   \"This search is broken in 1.3 and earlier, and will be \"\n   \"fixed in a future version.  If you rely on the current \"\n   \"behaviour, change it to %r\"%path,\n   FutureWarning,stacklevel=2\n   )\n  return self._root.find(path,namespaces)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def findtext(self,path,default=None ,namespaces=None ):\n \n  if path[:1]==\"/\":\n   path=\".\"+path\n   warnings.warn(\n   \"This search is broken in 1.3 and earlier, and will be \"\n   \"fixed in a future version.  If you rely on the current \"\n   \"behaviour, change it to %r\"%path,\n   FutureWarning,stacklevel=2\n   )\n  return self._root.findtext(path,default,namespaces)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def findall(self,path,namespaces=None ):\n \n  if path[:1]==\"/\":\n   path=\".\"+path\n   warnings.warn(\n   \"This search is broken in 1.3 and earlier, and will be \"\n   \"fixed in a future version.  If you rely on the current \"\n   \"behaviour, change it to %r\"%path,\n   FutureWarning,stacklevel=2\n   )\n  return self._root.findall(path,namespaces)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def iterfind(self,path,namespaces=None ):\n \n  if path[:1]==\"/\":\n   path=\".\"+path\n   warnings.warn(\n   \"This search is broken in 1.3 and earlier, and will be \"\n   \"fixed in a future version.  If you rely on the current \"\n   \"behaviour, change it to %r\"%path,\n   FutureWarning,stacklevel=2\n   )\n  return self._root.iterfind(path,namespaces)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def write(self,file_or_filename,\n encoding=None ,\n xml_declaration=None ,\n default_namespace=None ,\n method=None ):\n  if not method:\n   method=\"xml\"\n  elif method not in _serialize:\n   raise ValueError(\"unknown method %r\"%method)\n  if not encoding:\n   if method ==\"c14n\":\n    encoding=\"utf-8\"\n   else :\n    encoding=\"us-ascii\"\n  else :\n   encoding=encoding.lower()\n  with _get_writer(file_or_filename,encoding)as write:\n   if method ==\"xml\"and (xml_declaration or\n   (xml_declaration is None and\n   encoding not in (\"utf-8\",\"us-ascii\",\"unicode\"))):\n    declared_encoding=encoding\n    if encoding ==\"unicode\":\n    \n     import locale\n     declared_encoding=locale.getpreferredencoding()\n    write(\"<?xml version='1.0' encoding='%s'?>\\n\"%(\n    declared_encoding,))\n   if method ==\"text\":\n    _serialize_text(write,self._root)\n   else :\n    qnames,namespaces=_namespaces(self._root,default_namespace)\n    serialize=_serialize[method]\n    serialize(write,self._root,qnames,namespaces)\n    \n def write_c14n(self,file):\n \n  return self.write(file,method=\"c14n\")\n  \n  \n  \n  \n@contextlib.contextmanager\ndef _get_writer(file_or_filename,encoding):\n\n try :\n  write=file_or_filename.write\n except AttributeError:\n \n  if encoding ==\"unicode\":\n   file=open(file_or_filename,\"w\")\n  else :\n   file=open(file_or_filename,\"w\",encoding=encoding,\n   errors=\"xmlcharrefreplace\")\n  with file:\n   yield file.write\n else :\n \n \n  if encoding ==\"unicode\":\n  \n   yield write\n  else :\n  \n   with contextlib.ExitStack()as stack:\n    if isinstance(file_or_filename,io.BufferedIOBase):\n     file=file_or_filename\n    elif isinstance(file_or_filename,io.RawIOBase):\n     file=io.BufferedWriter(file_or_filename)\n     \n     \n     stack.callback(file.detach)\n    else :\n    \n    \n     file=io.BufferedIOBase()\n     file.writable=lambda :True\n     file.write=write\n     try :\n     \n     \n      file.seekable=file_or_filename.seekable\n      file.tell=file_or_filename.tell\n     except AttributeError:\n      pass\n    file=io.TextIOWrapper(file,\n    encoding=encoding,\n    errors=\"xmlcharrefreplace\",\n    newline=\"\\n\")\n    \n    \n    stack.callback(file.detach)\n    yield file.write\n    \ndef _namespaces(elem,default_namespace=None ):\n\n\n\n qnames={None :None }\n \n \n namespaces={}\n if default_namespace:\n  namespaces[default_namespace]=\"\"\n  \n def add_qname(qname):\n \n  try :\n   if qname[:1]==\"{\":\n    uri,tag=qname[1:].rsplit(\"}\",1)\n    prefix=namespaces.get(uri)\n    if prefix is None :\n     prefix=_namespace_map.get(uri)\n     if prefix is None :\n      prefix=\"ns%d\"%len(namespaces)\n     if prefix !=\"xml\":\n      namespaces[uri]=prefix\n    if prefix:\n     qnames[qname]=\"%s:%s\"%(prefix,tag)\n    else :\n     qnames[qname]=tag\n   else :\n    if default_namespace:\n    \n     raise ValueError(\n     \"cannot use non-qualified names with \"\n     \"default_namespace option\"\n     )\n    qnames[qname]=qname\n  except TypeError:\n   _raise_serialization_error(qname)\n   \n   \n for elem in elem.iter():\n  tag=elem.tag\n  if isinstance(tag,QName):\n   if tag.text not in qnames:\n    add_qname(tag.text)\n  elif isinstance(tag,str):\n   if tag not in qnames:\n    add_qname(tag)\n  elif tag is not None and tag is not Comment and tag is not PI:\n   _raise_serialization_error(tag)\n  for key,value in elem.items():\n   if isinstance(key,QName):\n    key=key.text\n   if key not in qnames:\n    add_qname(key)\n   if isinstance(value,QName)and value.text not in qnames:\n    add_qname(value.text)\n  text=elem.text\n  if isinstance(text,QName)and text.text not in qnames:\n   add_qname(text.text)\n return qnames,namespaces\n \ndef _serialize_xml(write,elem,qnames,namespaces):\n tag=elem.tag\n text=elem.text\n if tag is Comment:\n  write(\"<!--%s-->\"%text)\n elif tag is ProcessingInstruction:\n  write(\"<?%s?>\"%text)\n else :\n  tag=qnames[tag]\n  if tag is None :\n   if text:\n    write(_escape_cdata(text))\n   for e in elem:\n    _serialize_xml(write,e,qnames,None )\n  else :\n   write(\"<\"+tag)\n   items=list(elem.items())\n   if items or namespaces:\n    if namespaces:\n     for v,k in sorted(namespaces.items(),\n     key=lambda x:x[1]):\n      if k:\n       k=\":\"+k\n      write(\" xmlns%s=\\\"%s\\\"\"%(\n      k,\n      _escape_attrib(v)\n      ))\n    for k,v in sorted(items):\n     if isinstance(k,QName):\n      k=k.text\n     if isinstance(v,QName):\n      v=qnames[v.text]\n     else :\n      v=_escape_attrib(v)\n     write(\" %s=\\\"%s\\\"\"%(qnames[k],v))\n   if text or len(elem):\n    write(\">\")\n    if text:\n     write(_escape_cdata(text))\n    for e in elem:\n     _serialize_xml(write,e,qnames,None )\n    write(\"</\"+tag+\">\")\n   else :\n    write(\" />\")\n if elem.tail:\n  write(_escape_cdata(elem.tail))\n  \nHTML_EMPTY=(\"area\",\"base\",\"basefont\",\"br\",\"col\",\"frame\",\"hr\",\n\"img\",\"input\",\"isindex\",\"link\",\"meta\",\"param\")\n\ntry :\n HTML_EMPTY=set(HTML_EMPTY)\nexcept NameError:\n pass\n \ndef _serialize_html(write,elem,qnames,namespaces):\n tag=elem.tag\n text=elem.text\n if tag is Comment:\n  write(\"<!--%s-->\"%_escape_cdata(text))\n elif tag is ProcessingInstruction:\n  write(\"<?%s?>\"%_escape_cdata(text))\n else :\n  tag=qnames[tag]\n  if tag is None :\n   if text:\n    write(_escape_cdata(text))\n   for e in elem:\n    _serialize_html(write,e,qnames,None )\n  else :\n   write(\"<\"+tag)\n   items=list(elem.items())\n   if items or namespaces:\n    if namespaces:\n     for v,k in sorted(namespaces.items(),\n     key=lambda x:x[1]):\n      if k:\n       k=\":\"+k\n      write(\" xmlns%s=\\\"%s\\\"\"%(\n      k,\n      _escape_attrib(v)\n      ))\n    for k,v in sorted(items):\n     if isinstance(k,QName):\n      k=k.text\n     if isinstance(v,QName):\n      v=qnames[v.text]\n     else :\n      v=_escape_attrib_html(v)\n      \n     write(\" %s=\\\"%s\\\"\"%(qnames[k],v))\n   write(\">\")\n   tag=tag.lower()\n   if text:\n    if tag ==\"script\"or tag ==\"style\":\n     write(text)\n    else :\n     write(_escape_cdata(text))\n   for e in elem:\n    _serialize_html(write,e,qnames,None )\n   if tag not in HTML_EMPTY:\n    write(\"</\"+tag+\">\")\n if elem.tail:\n  write(_escape_cdata(elem.tail))\n  \ndef _serialize_text(write,elem):\n for part in elem.itertext():\n  write(part)\n if elem.tail:\n  write(elem.tail)\n  \n_serialize={\n\"xml\":_serialize_xml,\n\"html\":_serialize_html,\n\"text\":_serialize_text,\n\n\n}\n\n\n\n\n\n\n\n\n\n\n\n\ndef register_namespace(prefix,uri):\n if re.match(\"ns\\d+$\",prefix):\n  raise ValueError(\"Prefix format reserved for internal use\")\n for k,v in list(_namespace_map.items()):\n  if k ==uri or v ==prefix:\n   del _namespace_map[k]\n _namespace_map[uri]=prefix\n \n_namespace_map={\n\n\"http://www.w3.org/XML/1998/namespace\":\"xml\",\n\"http://www.w3.org/1999/xhtml\":\"html\",\n\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\":\"rdf\",\n\"http://schemas.xmlsoap.org/wsdl/\":\"wsdl\",\n\n\"http://www.w3.org/2001/XMLSchema\":\"xs\",\n\"http://www.w3.org/2001/XMLSchema-instance\":\"xsi\",\n\n\"http://purl.org/dc/elements/1.1/\":\"dc\",\n}\n\nregister_namespace._namespace_map=_namespace_map\n\ndef _raise_serialization_error(text):\n raise TypeError(\n \"cannot serialize %r (type %s)\"%(text,type(text).__name__)\n )\n \ndef _escape_cdata(text):\n\n try :\n \n \n \n  if\"&\"in text:\n   text=text.replace(\"&\",\"&amp;\")\n  if\"<\"in text:\n   text=text.replace(\"<\",\"&lt;\")\n  if\">\"in text:\n   text=text.replace(\">\",\"&gt;\")\n  return text\n except (TypeError,AttributeError):\n  _raise_serialization_error(text)\n  \ndef _escape_attrib(text):\n\n try :\n  if\"&\"in text:\n   text=text.replace(\"&\",\"&amp;\")\n  if\"<\"in text:\n   text=text.replace(\"<\",\"&lt;\")\n  if\">\"in text:\n   text=text.replace(\">\",\"&gt;\")\n  if\"\\\"\"in text:\n   text=text.replace(\"\\\"\",\"&quot;\")\n  if\"\\n\"in text:\n   text=text.replace(\"\\n\",\"&#10;\")\n  return text\n except (TypeError,AttributeError):\n  _raise_serialization_error(text)\n  \ndef _escape_attrib_html(text):\n\n try :\n  if\"&\"in text:\n   text=text.replace(\"&\",\"&amp;\")\n  if\">\"in text:\n   text=text.replace(\">\",\"&gt;\")\n  if\"\\\"\"in text:\n   text=text.replace(\"\\\"\",\"&quot;\")\n  return text\n except (TypeError,AttributeError):\n  _raise_serialization_error(text)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \ndef tostring(element,encoding=None ,method=None ):\n stream=io.StringIO()if encoding =='unicode'else io.BytesIO()\n ElementTree(element).write(stream,encoding,method=method)\n return stream.getvalue()\n \n \n \n \n \n \n \n \n \n \n \n \n \n \nclass _ListDataStream(io.BufferedIOBase):\n ''\n \n def __init__(self,lst):\n  self.lst=lst\n  \n def writable(self):\n  return True\n  \n def seekable(self):\n  return True\n  \n def write(self,b):\n  self.lst.append(b)\n  \n def tell(self):\n  return len(self.lst)\n  \ndef tostringlist(element,encoding=None ,method=None ):\n lst=[]\n stream=_ListDataStream(lst)\n ElementTree(element).write(stream,encoding,method=method)\n return lst\n \n \n \n \n \n \n \n \n \n \ndef dump(elem):\n\n if not isinstance(elem,ElementTree):\n  elem=ElementTree(elem)\n elem.write(sys.stdout,encoding=\"unicode\")\n tail=elem.getroot().tail\n if not tail or tail[-1]!=\"\\n\":\n  sys.stdout.write(\"\\n\")\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \ndef parse(source,parser=None ):\n tree=ElementTree()\n tree.parse(source,parser)\n return tree\n \n \n \n \n \n \n \n \n \n \n \n \ndef iterparse(source,events=None ,parser=None ):\n close_source=False\n if not hasattr(source,\"read\"):\n  source=open(source,\"rb\")\n  close_source=True\n if not parser:\n  parser=XMLParser(target=TreeBuilder())\n return _IterParseIterator(source,events,parser,close_source)\n \nclass _IterParseIterator:\n\n def __init__(self,source,events,parser,close_source=False ):\n  self._file=source\n  self._close_file=close_source\n  self._events=[]\n  self._index=0\n  self._error=None\n  self.root=self._root=None\n  self._parser=parser\n  \n  parser=self._parser._parser\n  append=self._events.append\n  if events is None :\n   events=[\"end\"]\n  for event in events:\n   if event ==\"start\":\n    try :\n     parser.ordered_attributes=1\n     parser.specified_attributes=1\n     def handler(tag,attrib_in,event=event,append=append,\n     start=self._parser._start_list):\n      append((event,start(tag,attrib_in)))\n     parser.StartElementHandler=handler\n    except AttributeError:\n     def handler(tag,attrib_in,event=event,append=append,\n     start=self._parser._start):\n      append((event,start(tag,attrib_in)))\n     parser.StartElementHandler=handler\n   elif event ==\"end\":\n    def handler(tag,event=event,append=append,\n    end=self._parser._end):\n     append((event,end(tag)))\n    parser.EndElementHandler=handler\n   elif event ==\"start-ns\":\n    def handler(prefix,uri,event=event,append=append):\n     append((event,(prefix or\"\",uri or\"\")))\n    parser.StartNamespaceDeclHandler=handler\n   elif event ==\"end-ns\":\n    def handler(prefix,event=event,append=append):\n     append((event,None ))\n    parser.EndNamespaceDeclHandler=handler\n   else :\n    raise ValueError(\"unknown event %r\"%event)\n    \n def __next__(self):\n  while 1:\n   try :\n    item=self._events[self._index]\n    self._index +=1\n    return item\n   except IndexError:\n    pass\n   if self._error:\n    e=self._error\n    self._error=None\n    raise e\n   if self._parser is None :\n    self.root=self._root\n    if self._close_file:\n     self._file.close()\n    raise StopIteration\n    \n   del self._events[:]\n   self._index=0\n   data=self._file.read(16384)\n   if data:\n    try :\n     self._parser.feed(data)\n    except SyntaxError as exc:\n     self._error=exc\n   else :\n    self._root=self._parser.close()\n    self._parser=None\n    \n def __iter__(self):\n  return self\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \ndef XML(text,parser=None ):\n if not parser:\n  parser=XMLParser(target=TreeBuilder())\n parser.feed(text)\n return parser.close()\n \n \n \n \n \n \n \n \n \n \n \ndef XMLID(text,parser=None ):\n if not parser:\n  parser=XMLParser(target=TreeBuilder())\n parser.feed(text)\n tree=parser.close()\n ids={}\n for elem in tree.iter():\n  id=elem.get(\"id\")\n  if id:\n   ids[id]=elem\n return tree,ids\n \n \n \n \n \n \n \n \n \nfromstring=XML\n\n\n\n\n\n\n\n\n\n\n\ndef fromstringlist(sequence,parser=None ):\n if not parser:\n  parser=XMLParser(target=TreeBuilder())\n for text in sequence:\n  parser.feed(text)\n return parser.close()\n \n \n \n \n \n \n \n \n \n \n \n \n \n \nclass TreeBuilder:\n\n def __init__(self,element_factory=None ):\n  self._data=[]\n  self._elem=[]\n  self._last=None\n  self._tail=None\n  if element_factory is None :\n   element_factory=Element\n  self._factory=element_factory\n  \n  \n  \n  \n  \n  \n  \n  \n def close(self):\n  assert len(self._elem)==0,\"missing end tags\"\n  assert self._last is not None ,\"missing toplevel element\"\n  return self._last\n  \n def _flush(self):\n  if self._data:\n   if self._last is not None :\n    text=\"\".join(self._data)\n    if self._tail:\n     assert self._last.tail is None ,\"internal error (tail)\"\n     self._last.tail=text\n    else :\n     assert self._last.text is None ,\"internal error (text)\"\n     self._last.text=text\n   self._data=[]\n   \n   \n   \n   \n   \n   \n   \n def data(self,data):\n  self._data.append(data)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n def start(self,tag,attrs):\n  self._flush()\n  self._last=elem=self._factory(tag,attrs)\n  if self._elem:\n   self._elem[-1].append(elem)\n  self._elem.append(elem)\n  self._tail=0\n  return elem\n  \n  \n  \n  \n  \n  \n  \n  \n def end(self,tag):\n  self._flush()\n  self._last=self._elem.pop()\n  assert self._last.tag ==tag,  \"end tag mismatch (expected %s, got %s)\"%(\n  self._last.tag,tag)\n  self._tail=1\n  return self._last\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \nclass XMLParser:\n\n def __init__(self,html=0,target=None ,encoding=None ):\n  try :\n   from xml.parsers import expat\n  except ImportError:\n   try :\n    import pyexpat as expat\n   except ImportError:\n    raise ImportError(\n    \"No module named expat; use SimpleXMLTreeBuilder instead\"\n    )\n  parser=expat.ParserCreate(encoding,\"}\")\n  if target is None :\n   target=TreeBuilder()\n   \n  self.parser=self._parser=parser\n  self.target=self._target=target\n  self._error=expat.error\n  self._names={}\n  \n  parser.DefaultHandlerExpand=self._default\n  if hasattr(target,'start'):\n   parser.StartElementHandler=self._start\n  if hasattr(target,'end'):\n   parser.EndElementHandler=self._end\n  if hasattr(target,'data'):\n   parser.CharacterDataHandler=target.data\n   \n  if hasattr(target,'comment'):\n   parser.CommentHandler=target.comment\n  if hasattr(target,'pi'):\n   parser.ProcessingInstructionHandler=target.pi\n   \n  try :\n   parser.buffer_text=1\n  except AttributeError:\n   pass\n   \n  try :\n   parser.ordered_attributes=1\n   parser.specified_attributes=1\n   if hasattr(target,'start'):\n    parser.StartElementHandler=self._start_list\n  except AttributeError:\n   pass\n  self._doctype=None\n  self.entity={}\n  try :\n   self.version=\"Expat %d.%d.%d\"%expat.version_info\n  except AttributeError:\n   pass\n   \n def _raiseerror(self,value):\n  err=ParseError(value)\n  err.code=value.code\n  err.position=value.lineno,value.offset\n  raise err\n  \n def _fixname(self,key):\n \n  try :\n   name=self._names[key]\n  except KeyError:\n   name=key\n   if\"}\"in name:\n    name=\"{\"+name\n   self._names[key]=name\n  return name\n  \n def _start(self,tag,attrib_in):\n  fixname=self._fixname\n  tag=fixname(tag)\n  attrib={}\n  for key,value in attrib_in.items():\n   attrib[fixname(key)]=value\n  return self.target.start(tag,attrib)\n  \n def _start_list(self,tag,attrib_in):\n  fixname=self._fixname\n  tag=fixname(tag)\n  attrib={}\n  if attrib_in:\n   for i in range(0,len(attrib_in),2):\n    attrib[fixname(attrib_in[i])]=attrib_in[i+1]\n  return self.target.start(tag,attrib)\n  \n def _end(self,tag):\n  return self.target.end(self._fixname(tag))\n  \n def _default(self,text):\n  prefix=text[:1]\n  if prefix ==\"&\":\n  \n   try :\n    data_handler=self.target.data\n   except AttributeError:\n    return\n   try :\n    data_handler(self.entity[text[1:-1]])\n   except KeyError:\n    from xml.parsers import expat\n    err=expat.error(\n    \"undefined entity %s: line %d, column %d\"%\n    (text,self.parser.ErrorLineNumber,\n    self.parser.ErrorColumnNumber)\n    )\n    err.code=11\n    err.lineno=self.parser.ErrorLineNumber\n    err.offset=self.parser.ErrorColumnNumber\n    raise err\n  elif prefix ==\"<\"and text[:9]==\"<!DOCTYPE\":\n   self._doctype=[]\n  elif self._doctype is not None :\n  \n   if prefix ==\">\":\n    self._doctype=None\n    return\n   text=text.strip()\n   if not text:\n    return\n   self._doctype.append(text)\n   n=len(self._doctype)\n   if n >2:\n    type=self._doctype[1]\n    if type ==\"PUBLIC\"and n ==4:\n     name,type,pubid,system=self._doctype\n     if pubid:\n      pubid=pubid[1:-1]\n    elif type ==\"SYSTEM\"and n ==3:\n     name,type,system=self._doctype\n     pubid=None\n    else :\n     return\n    if hasattr(self.target,\"doctype\"):\n     self.target.doctype(name,pubid,system[1:-1])\n    elif self.doctype !=self._XMLParser__doctype:\n    \n     self._XMLParser__doctype(name,pubid,system[1:-1])\n     self.doctype(name,pubid,system[1:-1])\n    self._doctype=None\n    \n    \n    \n    \n    \n    \n    \n    \n def doctype(self,name,pubid,system):\n  ''\n  warnings.warn(\n  \"This method of XMLParser is deprecated.  Define doctype() \"\n  \"method on the TreeBuilder target.\",\n  DeprecationWarning,\n  )\n  \n  \n __doctype=doctype\n \n \n \n \n \n \n def feed(self,data):\n  try :\n   self.parser.Parse(data,0)\n  except self._error as v:\n   self._raiseerror(v)\n   \n   \n   \n   \n   \n   \n   \n def close(self):\n  try :\n   self.parser.Parse(\"\",1)\n  except self._error as v:\n   self._raiseerror(v)\n  try :\n   close_handler=self.target.close\n  except AttributeError:\n   pass\n  else :\n   return close_handler()\n  finally :\n  \n   del self.parser,self._parser\n   del self.target,self._target\n   \n   \n   \ntry :\n\n from _elementtree import *\nexcept ImportError:\n pass\nelse :\n\n\n class ElementTree(ElementTree):\n  def parse(self,source,parser=None ):\n   close_source=False\n   if not hasattr(source,'read'):\n    source=open(source,'rb')\n    close_source=True\n   try :\n    if parser is not None :\n     while True :\n      data=source.read(65536)\n      if not data:\n       break\n      parser.feed(data)\n     self._root=parser.close()\n    else :\n     parser=XMLParser()\n     self._root=parser._parse(source)\n    return self._root\n   finally :\n    if close_source:\n     source.close()\n     \n class iterparse:\n  ''\n\n\n\n\n\n\n\n\n\n  \n  \n  root=None\n  def __init__(self,file,events=None ,parser=None ):\n   self._close_file=False\n   if not hasattr(file,'read'):\n    file=open(file,'rb')\n    self._close_file=True\n   self._file=file\n   self._events=[]\n   self._index=0\n   self._error=None\n   self.root=self._root=None\n   if parser is None :\n    parser=XMLParser(target=TreeBuilder())\n   self._parser=parser\n   self._parser._setevents(self._events,events)\n   \n  def __next__(self):\n   while True :\n    try :\n     item=self._events[self._index]\n     self._index +=1\n     return item\n    except IndexError:\n     pass\n    if self._error:\n     e=self._error\n     self._error=None\n     raise e\n    if self._parser is None :\n     self.root=self._root\n     if self._close_file:\n      self._file.close()\n     raise StopIteration\n     \n    del self._events[:]\n    self._index=0\n    data=self._file.read(16384)\n    if data:\n     try :\n      self._parser.feed(data)\n     except SyntaxError as exc:\n      self._error=exc\n    else :\n     self._root=self._parser.close()\n     self._parser=None\n     \n  def __iter__(self):\n   return self\n   \n   \nXMLTreeBuilder=XMLParser\n\n\ntry :\n from ElementC14N import _serialize_c14n\n _serialize[\"c14n\"]=_serialize_c14n\nexcept ImportError:\n pass\n"], "xml.parsers": [".py", "''\n\n\n\n\n\n\n\n", 1], "encodings.cp775": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp775',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0106,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x0101,\n0x0084:0x00e4,\n0x0085:0x0123,\n0x0086:0x00e5,\n0x0087:0x0107,\n0x0088:0x0142,\n0x0089:0x0113,\n0x008a:0x0156,\n0x008b:0x0157,\n0x008c:0x012b,\n0x008d:0x0179,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x014d,\n0x0094:0x00f6,\n0x0095:0x0122,\n0x0096:0x00a2,\n0x0097:0x015a,\n0x0098:0x015b,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x00d7,\n0x009f:0x00a4,\n0x00a0:0x0100,\n0x00a1:0x012a,\n0x00a2:0x00f3,\n0x00a3:0x017b,\n0x00a4:0x017c,\n0x00a5:0x017a,\n0x00a6:0x201d,\n0x00a7:0x00a6,\n0x00a8:0x00a9,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x0141,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x0104,\n0x00b6:0x010c,\n0x00b7:0x0118,\n0x00b8:0x0116,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x012e,\n0x00be:0x0160,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x0172,\n0x00c7:0x016a,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x017d,\n0x00d0:0x0105,\n0x00d1:0x010d,\n0x00d2:0x0119,\n0x00d3:0x0117,\n0x00d4:0x012f,\n0x00d5:0x0161,\n0x00d6:0x0173,\n0x00d7:0x016b,\n0x00d8:0x017e,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x014c,\n0x00e3:0x0143,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:0x0144,\n0x00e8:0x0136,\n0x00e9:0x0137,\n0x00ea:0x013b,\n0x00eb:0x013c,\n0x00ec:0x0146,\n0x00ed:0x0112,\n0x00ee:0x0145,\n0x00ef:0x2019,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x201c,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x201e,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0106'\n'\\xfc'\n'\\xe9'\n'\\u0101'\n'\\xe4'\n'\\u0123'\n'\\xe5'\n'\\u0107'\n'\\u0142'\n'\\u0113'\n'\\u0156'\n'\\u0157'\n'\\u012b'\n'\\u0179'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\u014d'\n'\\xf6'\n'\\u0122'\n'\\xa2'\n'\\u015a'\n'\\u015b'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\xd7'\n'\\xa4'\n'\\u0100'\n'\\u012a'\n'\\xf3'\n'\\u017b'\n'\\u017c'\n'\\u017a'\n'\\u201d'\n'\\xa6'\n'\\xa9'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\u0141'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u0104'\n'\\u010c'\n'\\u0118'\n'\\u0116'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u012e'\n'\\u0160'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u0172'\n'\\u016a'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u017d'\n'\\u0105'\n'\\u010d'\n'\\u0119'\n'\\u0117'\n'\\u012f'\n'\\u0161'\n'\\u0173'\n'\\u016b'\n'\\u017e'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\u014c'\n'\\u0143'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\u0144'\n'\\u0136'\n'\\u0137'\n'\\u013b'\n'\\u013c'\n'\\u0146'\n'\\u0112'\n'\\u0145'\n'\\u2019'\n'\\xad'\n'\\xb1'\n'\\u201c'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\u201e'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a2:0x0096,\n0x00a3:0x009c,\n0x00a4:0x009f,\n0x00a6:0x00a7,\n0x00a7:0x00f5,\n0x00a9:0x00a8,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b9:0x00fb,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c9:0x0090,\n0x00d3:0x00e0,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00d8:0x009d,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e9:0x0082,\n0x00f3:0x00a2,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00fc:0x0081,\n0x0100:0x00a0,\n0x0101:0x0083,\n0x0104:0x00b5,\n0x0105:0x00d0,\n0x0106:0x0080,\n0x0107:0x0087,\n0x010c:0x00b6,\n0x010d:0x00d1,\n0x0112:0x00ed,\n0x0113:0x0089,\n0x0116:0x00b8,\n0x0117:0x00d3,\n0x0118:0x00b7,\n0x0119:0x00d2,\n0x0122:0x0095,\n0x0123:0x0085,\n0x012a:0x00a1,\n0x012b:0x008c,\n0x012e:0x00bd,\n0x012f:0x00d4,\n0x0136:0x00e8,\n0x0137:0x00e9,\n0x013b:0x00ea,\n0x013c:0x00eb,\n0x0141:0x00ad,\n0x0142:0x0088,\n0x0143:0x00e3,\n0x0144:0x00e7,\n0x0145:0x00ee,\n0x0146:0x00ec,\n0x014c:0x00e2,\n0x014d:0x0093,\n0x0156:0x008a,\n0x0157:0x008b,\n0x015a:0x0097,\n0x015b:0x0098,\n0x0160:0x00be,\n0x0161:0x00d5,\n0x016a:0x00c7,\n0x016b:0x00d7,\n0x0172:0x00c6,\n0x0173:0x00d6,\n0x0179:0x008d,\n0x017a:0x00a5,\n0x017b:0x00a3,\n0x017c:0x00a4,\n0x017d:0x00cf,\n0x017e:0x00d8,\n0x2019:0x00ef,\n0x201c:0x00f2,\n0x201d:0x00a6,\n0x201e:0x00f7,\n0x2219:0x00f9,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "binascii": [".py", "''\n\n\n\n\n\n\n\nclass Error(Exception):\n pass\n \nclass Done(Exception):\n pass\n \nclass Incomplete(Exception):\n pass\n \ndef a2b_uu(s):\n if not s:\n  return''\n  \n length=(ord(s[0])-0x20)%64\n \n def quadruplets_gen(s):\n  while s:\n   try :\n    yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n   except IndexError:\n    s +='   '\n    yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n    return\n   s=s[4:]\n   \n try :\n  result=[''.join(\n  [chr((A -0x20)<<2 |(((B -0x20)>>4)&0x3)),\n  chr(((B -0x20)&0xf)<<4 |(((C -0x20)>>2)&0xf)),\n  chr(((C -0x20)&0x3)<<6 |((D -0x20)&0x3f))\n  ])for A,B,C,D in quadruplets_gen(s[1:].rstrip())]\n except ValueError:\n  raise Error('Illegal char')\n result=''.join(result)\n trailingdata=result[length:]\n if trailingdata.strip('\\x00'):\n  raise Error('Trailing garbage')\n result=result[:length]\n if len(result)<length:\n  result +=((length -len(result))*'\\x00')\n return bytes(result,__BRYTHON__.charset)\n \n \ndef b2a_uu(s):\n length=len(s)\n if length >45:\n  raise Error('At most 45 bytes at once')\n  \n def triples_gen(s):\n  while s:\n   try :\n    yield ord(s[0]),ord(s[1]),ord(s[2])\n   except IndexError:\n    s +='\\0\\0'\n    yield ord(s[0]),ord(s[1]),ord(s[2])\n    return\n   s=s[3:]\n   \n result=[''.join(\n [chr(0x20+((A >>2)&0x3F)),\n chr(0x20+(((A <<4)|((B >>4)&0xF))&0x3F)),\n chr(0x20+(((B <<2)|((C >>6)&0x3))&0x3F)),\n chr(0x20+((C)&0x3F))])\n for A,B,C in triples_gen(s)]\n return chr(ord(' ')+(length&0o77))+''.join(result)+'\\n'\n \n \ntable_a2b_base64={\n'A':0,\n'B':1,\n'C':2,\n'D':3,\n'E':4,\n'F':5,\n'G':6,\n'H':7,\n'I':8,\n'J':9,\n'K':10,\n'L':11,\n'M':12,\n'N':13,\n'O':14,\n'P':15,\n'Q':16,\n'R':17,\n'S':18,\n'T':19,\n'U':20,\n'V':21,\n'W':22,\n'X':23,\n'Y':24,\n'Z':25,\n'a':26,\n'b':27,\n'c':28,\n'd':29,\n'e':30,\n'f':31,\n'g':32,\n'h':33,\n'i':34,\n'j':35,\n'k':36,\n'l':37,\n'm':38,\n'n':39,\n'o':40,\n'p':41,\n'q':42,\n'r':43,\n's':44,\n't':45,\n'u':46,\n'v':47,\n'w':48,\n'x':49,\n'y':50,\n'z':51,\n'0':52,\n'1':53,\n'2':54,\n'3':55,\n'4':56,\n'5':57,\n'6':58,\n'7':59,\n'8':60,\n'9':61,\n'+':62,\n'/':63,\n'=':0,\n}\n\n\ndef a2b_base64(s):\n if not isinstance(s,(str,bytes)):\n  raise TypeError(\"expected string, got %r\"%(s,))\n s=s.rstrip()\n \n \n \n def next_valid_char(s,pos):\n  for i in range(pos+1,len(s)):\n   c=s[i]\n   if c <'\\x7f':\n    try :\n     table_a2b_base64[c]\n     return c\n    except KeyError:\n     pass\n  return None\n  \n quad_pos=0\n leftbits=0\n leftchar=0\n res=[]\n for i,c in enumerate(s):\n  if isinstance(c,int):\n   c=chr(c)\n  if c >'\\x7f'or c =='\\n'or c =='\\r'or c ==' ':\n   continue\n  if c =='=':\n   if quad_pos <2 or (quad_pos ==2 and next_valid_char(s,i)!='='):\n    continue\n   else :\n    leftbits=0\n    break\n  try :\n   next_c=table_a2b_base64[c]\n  except KeyError:\n   continue\n  quad_pos=(quad_pos+1)&0x03\n  leftchar=(leftchar <<6)|next_c\n  leftbits +=6\n  if leftbits >=8:\n   leftbits -=8\n   res.append((leftchar >>leftbits&0xff))\n   leftchar &=((1 <<leftbits)-1)\n if leftbits !=0:\n  raise Error('Incorrect padding')\n  \n return bytes(''.join([chr(i)for i in res]),__BRYTHON__.charset)\n \ntable_b2a_base64=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\"\"0123456789+/\"\n\ndef b2a_base64(s):\n length=len(s)\n final_length=length %3\n \n def triples_gen(s):\n  while s:\n   try :\n    yield s[0],s[1],s[2]\n   except IndexError:\n    s +=b'\\0\\0'\n    yield s[0],s[1],s[2]\n    return\n   s=s[3:]\n   \n a=triples_gen(s[:length -final_length])\n \n result=[''.join(\n [table_b2a_base64[(A >>2)&0x3F],\n table_b2a_base64[((A <<4)|((B >>4)&0xF))&0x3F],\n table_b2a_base64[((B <<2)|((C >>6)&0x3))&0x3F],\n table_b2a_base64[(C)&0x3F]])\n for A,B,C in a]\n \n final=s[length -final_length:]\n if final_length ==0:\n  snippet=''\n elif final_length ==1:\n  a=final[0]\n  snippet=table_b2a_base64[(a >>2)&0x3F]+  table_b2a_base64[(a <<4)&0x3F]+'=='\n else :\n  a=final[0]\n  b=final[1]\n  snippet=table_b2a_base64[(a >>2)&0x3F]+  table_b2a_base64[((a <<4)|(b >>4)&0xF)&0x3F]+  table_b2a_base64[(b <<2)&0x3F]+'='\n return bytes(''.join(result)+snippet+'\\n',__BRYTHON__.charset)\n \ndef a2b_qp(s,header=False ):\n inp=0\n odata=[]\n while inp <len(s):\n  if s[inp]=='=':\n   inp +=1\n   if inp >=len(s):\n    break\n    \n   if (s[inp]=='\\n')or (s[inp]=='\\r'):\n    if s[inp]!='\\n':\n     while inp <len(s)and s[inp]!='\\n':\n      inp +=1\n    if inp <len(s):\n     inp +=1\n   elif s[inp]=='=':\n   \n    odata.append('=')\n    inp +=1\n   elif s[inp]in hex_numbers and s[inp+1]in hex_numbers:\n    ch=chr(int(s[inp:inp+2],16))\n    inp +=2\n    odata.append(ch)\n   else :\n    odata.append('=')\n  elif header and s[inp]=='_':\n   odata.append(' ')\n   inp +=1\n  else :\n   odata.append(s[inp])\n   inp +=1\n return bytes(''.join(odata),__BRYTHON__.charset)\n \ndef b2a_qp(data,quotetabs=False ,istext=True ,header=False ):\n ''\n\n\n\n\n \n MAXLINESIZE=76\n \n \n lf=data.find('\\n')\n crlf=lf >0 and data[lf -1]=='\\r'\n \n inp=0\n linelen=0\n odata=[]\n while inp <len(data):\n  c=data[inp]\n  if (c >'~'or\n  c =='='or\n  (header and c =='_')or\n  (c =='.'and linelen ==0 and (inp+1 ==len(data)or\n  data[inp+1]=='\\n'or\n  data[inp+1]=='\\r'))or\n  (not istext and (c =='\\r'or c =='\\n'))or\n  ((c =='\\t'or c ==' ')and (inp+1 ==len(data)))or\n  (c <=' 'and c !='\\r'and c !='\\n'and\n  (quotetabs or (not quotetabs and (c !='\\t'and c !=' '))))):\n   linelen +=3\n   if linelen >=MAXLINESIZE:\n    odata.append('=')\n    if crlf:odata.append('\\r')\n    odata.append('\\n')\n    linelen=3\n   odata.append('='+two_hex_digits(ord(c)))\n   inp +=1\n  else :\n   if (istext and\n   (c =='\\n'or (inp+1 <len(data)and c =='\\r'and\n   data[inp+1]=='\\n'))):\n    linelen=0\n    \n    if (len(odata)>0 and\n    (odata[-1]==' 'or odata[-1]=='\\t')):\n     ch=ord(odata[-1])\n     odata[-1]='='\n     odata.append(two_hex_digits(ch))\n     \n    if crlf:odata.append('\\r')\n    odata.append('\\n')\n    if c =='\\r':\n     inp +=2\n    else :\n     inp +=1\n   else :\n    if (inp+1 <len(data)and\n    data[inp+1]!='\\n'and\n    (linelen+1)>=MAXLINESIZE):\n     odata.append('=')\n     if crlf:odata.append('\\r')\n     odata.append('\\n')\n     linelen=0\n     \n    linelen +=1\n    if header and c ==' ':\n     c='_'\n    odata.append(c)\n    inp +=1\n return''.join(odata)\n \nhex_numbers='0123456789ABCDEF'\ndef hex(n):\n if n ==0:\n  return'0'\n  \n if n <0:\n  n=-n\n  sign='-'\n else :\n  sign=''\n arr=[]\n \n def hex_gen(n):\n  ''\n  while n:\n   yield n %0x10\n   n=n /0x10\n   \n for nibble in hex_gen(n):\n  arr=[hex_numbers[nibble]]+arr\n return sign+''.join(arr)\n \ndef two_hex_digits(n):\n return hex_numbers[n /0x10]+hex_numbers[n %0x10]\n \n \ndef strhex_to_int(s):\n i=0\n for c in s:\n  i=i *0x10+hex_numbers.index(c)\n return i\n \nhqx_encoding='!\"#$%&\\'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr'\n\nDONE=0x7f\nSKIP=0x7e\nFAIL=0x7d\n\ntable_a2b_hqx=[\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,SKIP,FAIL,FAIL,SKIP,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,0x00,0x01,0x02,0x03,0x04,0x05,0x06,\n\n0x07,0x08,0x09,0x0A,0x0B,0x0C,FAIL,FAIL,\n\n0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,FAIL,\n\n0x14,0x15,DONE,FAIL,FAIL,FAIL,FAIL,FAIL,\n\n0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,\n\n0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,FAIL,\n\n0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,FAIL,\n\n0x2C,0x2D,0x2E,0x2F,FAIL,FAIL,FAIL,FAIL,\n\n0x30,0x31,0x32,0x33,0x34,0x35,0x36,FAIL,\n\n0x37,0x38,0x39,0x3A,0x3B,0x3C,FAIL,FAIL,\n\n0x3D,0x3E,0x3F,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n]\n\ndef a2b_hqx(s):\n result=[]\n \n def quadruples_gen(s):\n  t=[]\n  for c in s:\n   res=table_a2b_hqx[ord(c)]\n   if res ==SKIP:\n    continue\n   elif res ==FAIL:\n    raise Error('Illegal character')\n   elif res ==DONE:\n    yield t\n    raise Done\n   else :\n    t.append(res)\n   if len(t)==4:\n    yield t\n    t=[]\n  yield t\n  \n done=0\n try :\n  for snippet in quadruples_gen(s):\n   length=len(snippet)\n   if length ==4:\n    result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n    result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n    result.append(chr(((snippet[2]&0x03)<<6)|(snippet[3])))\n   elif length ==3:\n    result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n    result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n   elif length ==2:\n    result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n except Done:\n  done=1\n except Error:\n  raise\n return (''.join(result),done)\n \n \n \ndef b2a_hqx(s):\n result=[]\n \n def triples_gen(s):\n  while s:\n   try :\n    yield ord(s[0]),ord(s[1]),ord(s[2])\n   except IndexError:\n    yield tuple([ord(c)for c in s])\n   s=s[3:]\n   \n for snippet in triples_gen(s):\n  length=len(snippet)\n  if length ==3:\n   result.append(\n   hqx_encoding[(snippet[0]&0xfc)>>2])\n   result.append(hqx_encoding[\n   ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n   result.append(hqx_encoding[\n   (snippet[1]&0x0f)<<2 |((snippet[2]&0xc0)>>6)])\n   result.append(hqx_encoding[snippet[2]&0x3f])\n  elif length ==2:\n   result.append(\n   hqx_encoding[(snippet[0]&0xfc)>>2])\n   result.append(hqx_encoding[\n   ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n   result.append(hqx_encoding[\n   (snippet[1]&0x0f)<<2])\n  elif length ==1:\n   result.append(\n   hqx_encoding[(snippet[0]&0xfc)>>2])\n   result.append(hqx_encoding[\n   ((snippet[0]&0x03)<<4)])\n return''.join(result)\n \ncrctab_hqx=[\n0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,\n0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,\n0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,\n0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,\n0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,\n0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,\n0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,\n0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,\n0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,\n0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,\n0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,\n0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,\n0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,\n0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,\n0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,\n0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,\n0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,\n0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,\n0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,\n0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,\n0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,\n0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,\n0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,\n0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,\n0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,\n0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,\n0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,\n0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,\n0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,\n0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,\n0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,\n0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0,\n]\n\ndef crc_hqx(s,crc):\n for c in s:\n  crc=((crc <<8)&0xff00)^crctab_hqx[((crc >>8)&0xff)^ord(c)]\n  \n return crc\n \ndef rlecode_hqx(s):\n ''\n\n\n\n \n if not s:\n  return''\n result=[]\n prev=s[0]\n count=1\n \n \n \n \n if s[-1]=='!':\n  s=s[1:]+'?'\n else :\n  s=s[1:]+'!'\n  \n for c in s:\n  if c ==prev and count <255:\n   count +=1\n  else :\n   if count ==1:\n    if prev !='\\x90':\n     result.append(prev)\n    else :\n     result.extend(['\\x90','\\x00'])\n   elif count <4:\n    if prev !='\\x90':\n     result.extend([prev]*count)\n    else :\n     result.extend(['\\x90','\\x00']*count)\n   else :\n    if prev !='\\x90':\n     result.extend([prev,'\\x90',chr(count)])\n    else :\n     result.extend(['\\x90','\\x00','\\x90',chr(count)])\n   count=1\n   prev=c\n   \n return''.join(result)\n \ndef rledecode_hqx(s):\n s=s.split('\\x90')\n result=[s[0]]\n prev=s[0]\n for snippet in s[1:]:\n  count=ord(snippet[0])\n  if count >0:\n   result.append(prev[-1]*(count -1))\n   prev=snippet\n  else :\n   result.append('\\x90')\n   prev='\\x90'\n  result.append(snippet[1:])\n  \n return''.join(result)\n \ncrc_32_tab=[\n0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,\n0x706af48f,0xe963a535,0x9e6495a3,0x0edb8832,0x79dcb8a4,\n0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,\n0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,\n0x1adad47d,0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,\n0x646ba8c0,0xfd62f97a,0x8a65c9ec,0x14015c4f,0x63066cd9,\n0xfa0f3d63,0x8d080df5,0x3b6e20c8,0x4c69105e,0xd56041e4,\n0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,0xa50ab56b,\n0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,\n0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,0x51de003a,\n0xc8d75180,0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,\n0xb8bda50f,0x2802b89e,0x5f058808,0xc60cd9b2,0xb10be924,\n0x2f6f7c87,0x58684c11,0xc1611dab,0xb6662d3d,0x76dc4190,\n0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,0x06b6b51f,\n0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,\n0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,\n0x6b6b51f4,0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,\n0x1b01a57b,0x8208f4c1,0xf50fc457,0x65b0d9c6,0x12b7e950,\n0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,0x15da2d49,0x8cd37cf3,\n0xfbd44c65,0x4db26158,0x3ab551ce,0xa3bc0074,0xd4bb30e2,\n0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,\n0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,\n0xaa0a4c5f,0xdd0d7cc9,0x5005713c,0x270241aa,0xbe0b1010,\n0xc90c2086,0x5768b525,0x206f85b3,0xb966d409,0xce61e49f,\n0x5edef90e,0x29d9c998,0xb0d09822,0xc7d7a8b4,0x59b33d17,\n0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,0xedb88320,0x9abfb3b6,\n0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,\n0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,\n0xe40ecf0b,0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,\n0x8708a3d2,0x1e01f268,0x6906c2fe,0xf762575d,0x806567cb,\n0x196c3671,0x6e6b06e7,0xfed41b76,0x89d32be0,0x10da7a5a,\n0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,0x60b08ed5,\n0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,\n0xa6bc5767,0x3fb506dd,0x48b2364b,0xd80d2bda,0xaf0a1b4c,\n0x36034af6,0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,\n0x4669be79,0xcb61b38c,0xbc66831a,0x256fd2a0,0x5268e236,\n0xcc0c7795,0xbb0b4703,0x220216b9,0x5505262f,0xc5ba3bbe,\n0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,0xb5d0cf31,\n0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,\n0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,\n0x95bf4a82,0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,\n0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,0x86d3d2d4,0xf1d4e242,\n0x68ddb3f8,0x1fda836e,0x81be16cd,0xf6b9265b,0x6fb077e1,\n0x18b74777,0x88085ae6,0xff0f6a70,0x66063bca,0x11010b5c,\n0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,0xa00ae278,\n0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,\n0x4969474d,0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,\n0x37d83bf0,0xa9bcae53,0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,\n0xbdbdf21c,0xcabac28a,0x53b39330,0x24b4a3a6,0xbad03605,\n0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,0xc4614ab8,\n0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,\n0x2d02ef8d\n]\n\ndef crc32(s,crc=0):\n result=0\n crc=~int(crc)&0xffffffff\n \n for c in s:\n  crc=crc_32_tab[(crc ^int(ord(c)))&0xff]^(crc >>8)\n  \n  \n  \n result=crc ^0xffffffff\n \n if result >2 **31:\n  result=((result+2 **31)%2 **32)-2 **31\n  \n return result\n \ndef b2a_hex(s):\n result=[]\n for char in s:\n  c=(ord(char)>>4)&0xf\n  if c >9:\n   c=c+ord('a')-10\n  else :\n   c=c+ord('0')\n  result.append(chr(c))\n  c=ord(char)&0xf\n  if c >9:\n   c=c+ord('a')-10\n  else :\n   c=c+ord('0')\n  result.append(chr(c))\n return''.join(result)\n \nhexlify=b2a_hex\n\ntable_hex=[\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1,\n-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,\n-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1\n]\n\n\ndef a2b_hex(t):\n result=[]\n \n def pairs_gen(s):\n  while s:\n   try :\n    yield table_hex[ord(s[0])],table_hex[ord(s[1])]\n   except IndexError:\n    if len(s):\n     raise TypeError('Odd-length string')\n    return\n   s=s[2:]\n   \n for a,b in pairs_gen(t):\n  if a <0 or b <0:\n   raise TypeError('Non-hexadecimal digit found')\n  result.append(chr((a <<4)+b))\n return bytes(''.join(result),__BRYTHON__.charset)\n \n \nunhexlify=a2b_hex\n"], "tarfile": [".py", "#!/usr/bin/env python3\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n''\n\n\nversion=\"0.9.0\"\n__author__=\"Lars Gust\\u00e4bel (lars@gustaebel.de)\"\n__date__=\"$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $\"\n__cvsid__=\"$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $\"\n__credits__=\"Gustavo Niemeyer, Niels Gust\\u00e4bel, Richard Townsend.\"\n\n\n\n\nimport sys\nimport os\nimport io\nimport shutil\nimport stat\nimport time\nimport struct\nimport copy\nimport re\n\ntry :\n import grp,pwd\nexcept ImportError:\n grp=pwd=None\n \n \nsymlink_exception=(AttributeError,NotImplementedError)\ntry :\n\n\n symlink_exception +=(WindowsError,)\nexcept NameError:\n pass\n \n \n__all__=[\"TarFile\",\"TarInfo\",\"is_tarfile\",\"TarError\"]\n\nfrom builtins import open as _open\n\n\n\n\nNUL=b\"\\0\"\nBLOCKSIZE=512\nRECORDSIZE=BLOCKSIZE *20\nGNU_MAGIC=b\"ustar  \\0\"\nPOSIX_MAGIC=b\"ustar\\x0000\"\n\nLENGTH_NAME=100\nLENGTH_LINK=100\nLENGTH_PREFIX=155\n\nREGTYPE=b\"0\"\nAREGTYPE=b\"\\0\"\nLNKTYPE=b\"1\"\nSYMTYPE=b\"2\"\nCHRTYPE=b\"3\"\nBLKTYPE=b\"4\"\nDIRTYPE=b\"5\"\nFIFOTYPE=b\"6\"\nCONTTYPE=b\"7\"\n\nGNUTYPE_LONGNAME=b\"L\"\nGNUTYPE_LONGLINK=b\"K\"\nGNUTYPE_SPARSE=b\"S\"\n\nXHDTYPE=b\"x\"\nXGLTYPE=b\"g\"\nSOLARIS_XHDTYPE=b\"X\"\n\nUSTAR_FORMAT=0\nGNU_FORMAT=1\nPAX_FORMAT=2\nDEFAULT_FORMAT=GNU_FORMAT\n\n\n\n\n\nSUPPORTED_TYPES=(REGTYPE,AREGTYPE,LNKTYPE,\nSYMTYPE,DIRTYPE,FIFOTYPE,\nCONTTYPE,CHRTYPE,BLKTYPE,\nGNUTYPE_LONGNAME,GNUTYPE_LONGLINK,\nGNUTYPE_SPARSE)\n\n\nREGULAR_TYPES=(REGTYPE,AREGTYPE,\nCONTTYPE,GNUTYPE_SPARSE)\n\n\nGNU_TYPES=(GNUTYPE_LONGNAME,GNUTYPE_LONGLINK,\nGNUTYPE_SPARSE)\n\n\nPAX_FIELDS=(\"path\",\"linkpath\",\"size\",\"mtime\",\n\"uid\",\"gid\",\"uname\",\"gname\")\n\n\nPAX_NAME_FIELDS={\"path\",\"linkpath\",\"uname\",\"gname\"}\n\n\n\nPAX_NUMBER_FIELDS={\n\"atime\":float,\n\"ctime\":float,\n\"mtime\":float,\n\"uid\":int,\n\"gid\":int,\n\"size\":int\n}\n\n\n\n\nS_IFLNK=0o120000\nS_IFREG=0o100000\nS_IFBLK=0o060000\nS_IFDIR=0o040000\nS_IFCHR=0o020000\nS_IFIFO=0o010000\n\nTSUID=0o4000\nTSGID=0o2000\nTSVTX=0o1000\n\nTUREAD=0o400\nTUWRITE=0o200\nTUEXEC=0o100\nTGREAD=0o040\nTGWRITE=0o020\nTGEXEC=0o010\nTOREAD=0o004\nTOWRITE=0o002\nTOEXEC=0o001\n\n\n\n\nif os.name in (\"nt\",\"ce\"):\n ENCODING=\"utf-8\"\nelse :\n ENCODING=sys.getfilesystemencoding()\n \n \n \n \n \ndef stn(s,length,encoding,errors):\n ''\n \n s=s.encode(encoding,errors)\n return s[:length]+(length -len(s))*NUL\n \ndef nts(s,encoding,errors):\n ''\n \n p=s.find(b\"\\0\")\n if p !=-1:\n  s=s[:p]\n return s.decode(encoding,errors)\n \ndef nti(s):\n ''\n \n \n \n if s[0]in (0o200,0o377):\n  n=0\n  for i in range(len(s)-1):\n   n <<=8\n   n +=s[i+1]\n  if s[0]==0o377:\n   n=-(256 **(len(s)-1)-n)\n else :\n  try :\n   n=int(nts(s,\"ascii\",\"strict\")or\"0\",8)\n  except ValueError:\n   raise InvalidHeaderError(\"invalid header\")\n return n\n \ndef itn(n,digits=8,format=DEFAULT_FORMAT):\n ''\n \n \n \n \n \n \n \n \n \n if 0 <=n <8 **(digits -1):\n  s=bytes(\"%0*o\"%(digits -1,n),\"ascii\")+NUL\n elif format ==GNU_FORMAT and -256 **(digits -1)<=n <256 **(digits -1):\n  if n >=0:\n   s=bytearray([0o200])\n  else :\n   s=bytearray([0o377])\n   n=256 **digits+n\n   \n  for i in range(digits -1):\n   s.insert(1,n&0o377)\n   n >>=8\n else :\n  raise ValueError(\"overflow in number field\")\n  \n return s\n \ndef calc_chksums(buf):\n ''\n\n\n\n\n\n\n \n unsigned_chksum=256+sum(struct.unpack_from(\"148B8x356B\",buf))\n signed_chksum=256+sum(struct.unpack_from(\"148b8x356b\",buf))\n return unsigned_chksum,signed_chksum\n \ndef copyfileobj(src,dst,length=None ):\n ''\n\n \n if length ==0:\n  return\n if length is None :\n  shutil.copyfileobj(src,dst)\n  return\n  \n BUFSIZE=16 *1024\n blocks,remainder=divmod(length,BUFSIZE)\n for b in range(blocks):\n  buf=src.read(BUFSIZE)\n  if len(buf)<BUFSIZE:\n   raise IOError(\"end of file reached\")\n  dst.write(buf)\n  \n if remainder !=0:\n  buf=src.read(remainder)\n  if len(buf)<remainder:\n   raise IOError(\"end of file reached\")\n  dst.write(buf)\n return\n \ndef filemode(mode):\n ''\n import warnings\n warnings.warn(\"deprecated in favor of stat.filemode\",\n DeprecationWarning,2)\n return stat.filemode(mode)\n \n \nclass TarError(Exception):\n ''\n pass\nclass ExtractError(TarError):\n ''\n pass\nclass ReadError(TarError):\n ''\n pass\nclass CompressionError(TarError):\n ''\n pass\nclass StreamError(TarError):\n ''\n pass\nclass HeaderError(TarError):\n ''\n pass\nclass EmptyHeaderError(HeaderError):\n ''\n pass\nclass TruncatedHeaderError(HeaderError):\n ''\n pass\nclass EOFHeaderError(HeaderError):\n ''\n pass\nclass InvalidHeaderError(HeaderError):\n ''\n pass\nclass SubsequentHeaderError(HeaderError):\n ''\n pass\n \n \n \n \nclass _LowLevelFile:\n ''\n\n\n \n \n def __init__(self,name,mode):\n  mode={\n  \"r\":os.O_RDONLY,\n  \"w\":os.O_WRONLY |os.O_CREAT |os.O_TRUNC,\n  }[mode]\n  if hasattr(os,\"O_BINARY\"):\n   mode |=os.O_BINARY\n  self.fd=os.open(name,mode,0o666)\n  \n def close(self):\n  os.close(self.fd)\n  \n def read(self,size):\n  return os.read(self.fd,size)\n  \n def write(self,s):\n  os.write(self.fd,s)\n  \nclass _Stream:\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,name,mode,comptype,fileobj,bufsize):\n  ''\n  \n  self._extfileobj=True\n  if fileobj is None :\n   fileobj=_LowLevelFile(name,mode)\n   self._extfileobj=False\n   \n  if comptype =='*':\n  \n  \n   fileobj=_StreamProxy(fileobj)\n   comptype=fileobj.getcomptype()\n   \n  self.name=name or\"\"\n  self.mode=mode\n  self.comptype=comptype\n  self.fileobj=fileobj\n  self.bufsize=bufsize\n  self.buf=b\"\"\n  self.pos=0\n  self.closed=False\n  \n  try :\n   if comptype ==\"gz\":\n    try :\n     import zlib\n    except ImportError:\n     raise CompressionError(\"zlib module is not available\")\n    self.zlib=zlib\n    self.crc=zlib.crc32(b\"\")\n    if mode ==\"r\":\n     self._init_read_gz()\n     self.exception=zlib.error\n    else :\n     self._init_write_gz()\n     \n   elif comptype ==\"bz2\":\n    try :\n     import bz2\n    except ImportError:\n     raise CompressionError(\"bz2 module is not available\")\n    if mode ==\"r\":\n     self.dbuf=b\"\"\n     self.cmp=bz2.BZ2Decompressor()\n     self.exception=IOError\n    else :\n     self.cmp=bz2.BZ2Compressor()\n     \n   elif comptype ==\"xz\":\n    try :\n     import lzma\n    except ImportError:\n     raise CompressionError(\"lzma module is not available\")\n    if mode ==\"r\":\n     self.dbuf=b\"\"\n     self.cmp=lzma.LZMADecompressor()\n     self.exception=lzma.LZMAError\n    else :\n     self.cmp=lzma.LZMACompressor()\n     \n   elif comptype !=\"tar\":\n    raise CompressionError(\"unknown compression type %r\"%comptype)\n    \n  except :\n   if not self._extfileobj:\n    self.fileobj.close()\n   self.closed=True\n   raise\n   \n def __del__(self):\n  if hasattr(self,\"closed\")and not self.closed:\n   self.close()\n   \n def _init_write_gz(self):\n  ''\n  \n  self.cmp=self.zlib.compressobj(9,self.zlib.DEFLATED,\n  -self.zlib.MAX_WBITS,\n  self.zlib.DEF_MEM_LEVEL,\n  0)\n  timestamp=struct.pack(\"<L\",int(time.time()))\n  self.__write(b\"\\037\\213\\010\\010\"+timestamp+b\"\\002\\377\")\n  if self.name.endswith(\".gz\"):\n   self.name=self.name[:-3]\n   \n  self.__write(self.name.encode(\"iso-8859-1\",\"replace\")+NUL)\n  \n def write(self,s):\n  ''\n  \n  if self.comptype ==\"gz\":\n   self.crc=self.zlib.crc32(s,self.crc)\n  self.pos +=len(s)\n  if self.comptype !=\"tar\":\n   s=self.cmp.compress(s)\n  self.__write(s)\n  \n def __write(self,s):\n  ''\n\n  \n  self.buf +=s\n  while len(self.buf)>self.bufsize:\n   self.fileobj.write(self.buf[:self.bufsize])\n   self.buf=self.buf[self.bufsize:]\n   \n def close(self):\n  ''\n\n  \n  if self.closed:\n   return\n   \n  if self.mode ==\"w\"and self.comptype !=\"tar\":\n   self.buf +=self.cmp.flush()\n   \n  if self.mode ==\"w\"and self.buf:\n   self.fileobj.write(self.buf)\n   self.buf=b\"\"\n   if self.comptype ==\"gz\":\n   \n   \n   \n   \n   \n   \n    self.fileobj.write(struct.pack(\"<L\",self.crc&0xffffffff))\n    self.fileobj.write(struct.pack(\"<L\",self.pos&0xffffFFFF))\n    \n  if not self._extfileobj:\n   self.fileobj.close()\n   \n  self.closed=True\n  \n def _init_read_gz(self):\n  ''\n  \n  self.cmp=self.zlib.decompressobj(-self.zlib.MAX_WBITS)\n  self.dbuf=b\"\"\n  \n  \n  if self.__read(2)!=b\"\\037\\213\":\n   raise ReadError(\"not a gzip file\")\n  if self.__read(1)!=b\"\\010\":\n   raise CompressionError(\"unsupported compression method\")\n   \n  flag=ord(self.__read(1))\n  self.__read(6)\n  \n  if flag&4:\n   xlen=ord(self.__read(1))+256 *ord(self.__read(1))\n   self.read(xlen)\n  if flag&8:\n   while True :\n    s=self.__read(1)\n    if not s or s ==NUL:\n     break\n  if flag&16:\n   while True :\n    s=self.__read(1)\n    if not s or s ==NUL:\n     break\n  if flag&2:\n   self.__read(2)\n   \n def tell(self):\n  ''\n  \n  return self.pos\n  \n def seek(self,pos=0):\n  ''\n\n  \n  if pos -self.pos >=0:\n   blocks,remainder=divmod(pos -self.pos,self.bufsize)\n   for i in range(blocks):\n    self.read(self.bufsize)\n   self.read(remainder)\n  else :\n   raise StreamError(\"seeking backwards is not allowed\")\n  return self.pos\n  \n def read(self,size=None ):\n  ''\n\n\n  \n  if size is None :\n   t=[]\n   while True :\n    buf=self._read(self.bufsize)\n    if not buf:\n     break\n    t.append(buf)\n   buf=\"\".join(t)\n  else :\n   buf=self._read(size)\n  self.pos +=len(buf)\n  return buf\n  \n def _read(self,size):\n  ''\n  \n  if self.comptype ==\"tar\":\n   return self.__read(size)\n   \n  c=len(self.dbuf)\n  while c <size:\n   buf=self.__read(self.bufsize)\n   if not buf:\n    break\n   try :\n    buf=self.cmp.decompress(buf)\n   except self.exception:\n    raise ReadError(\"invalid compressed data\")\n   self.dbuf +=buf\n   c +=len(buf)\n  buf=self.dbuf[:size]\n  self.dbuf=self.dbuf[size:]\n  return buf\n  \n def __read(self,size):\n  ''\n\n  \n  c=len(self.buf)\n  while c <size:\n   buf=self.fileobj.read(self.bufsize)\n   if not buf:\n    break\n   self.buf +=buf\n   c +=len(buf)\n  buf=self.buf[:size]\n  self.buf=self.buf[size:]\n  return buf\n  \n  \nclass _StreamProxy(object):\n ''\n\n \n \n def __init__(self,fileobj):\n  self.fileobj=fileobj\n  self.buf=self.fileobj.read(BLOCKSIZE)\n  \n def read(self,size):\n  self.read=self.fileobj.read\n  return self.buf\n  \n def getcomptype(self):\n  if self.buf.startswith(b\"\\x1f\\x8b\\x08\"):\n   return\"gz\"\n  elif self.buf[0:3]==b\"BZh\"and self.buf[4:10]==b\"1AY&SY\":\n   return\"bz2\"\n  elif self.buf.startswith((b\"\\x5d\\x00\\x00\\x80\",b\"\\xfd7zXZ\")):\n   return\"xz\"\n  else :\n   return\"tar\"\n   \n def close(self):\n  self.fileobj.close()\n  \n  \n  \n  \n  \nclass _FileInFile(object):\n ''\n\n\n \n \n def __init__(self,fileobj,offset,size,blockinfo=None ):\n  self.fileobj=fileobj\n  self.offset=offset\n  self.size=size\n  self.position=0\n  self.name=getattr(fileobj,\"name\",None )\n  self.closed=False\n  \n  if blockinfo is None :\n   blockinfo=[(0,size)]\n   \n   \n  self.map_index=0\n  self.map=[]\n  lastpos=0\n  realpos=self.offset\n  for offset,size in blockinfo:\n   if offset >lastpos:\n    self.map.append((False ,lastpos,offset,None ))\n   self.map.append((True ,offset,offset+size,realpos))\n   realpos +=size\n   lastpos=offset+size\n  if lastpos <self.size:\n   self.map.append((False ,lastpos,self.size,None ))\n   \n def flush(self):\n  pass\n  \n def readable(self):\n  return True\n  \n def writable(self):\n  return False\n  \n def seekable(self):\n  return self.fileobj.seekable()\n  \n def tell(self):\n  ''\n  \n  return self.position\n  \n def seek(self,position,whence=io.SEEK_SET):\n  ''\n  \n  if whence ==io.SEEK_SET:\n   self.position=min(max(position,0),self.size)\n  elif whence ==io.SEEK_CUR:\n   if position <0:\n    self.position=max(self.position+position,0)\n   else :\n    self.position=min(self.position+position,self.size)\n  elif whence ==io.SEEK_END:\n   self.position=max(min(self.size+position,self.size),0)\n  else :\n   raise ValueError(\"Invalid argument\")\n  return self.position\n  \n def read(self,size=None ):\n  ''\n  \n  if size is None :\n   size=self.size -self.position\n  else :\n   size=min(size,self.size -self.position)\n   \n  buf=b\"\"\n  while size >0:\n   while True :\n    data,start,stop,offset=self.map[self.map_index]\n    if start <=self.position <stop:\n     break\n    else :\n     self.map_index +=1\n     if self.map_index ==len(self.map):\n      self.map_index=0\n   length=min(size,stop -self.position)\n   if data:\n    self.fileobj.seek(offset+(self.position -start))\n    buf +=self.fileobj.read(length)\n   else :\n    buf +=NUL *length\n   size -=length\n   self.position +=length\n  return buf\n  \n def readinto(self,b):\n  buf=self.read(len(b))\n  b[:len(buf)]=buf\n  return len(buf)\n  \n def close(self):\n  self.closed=True\n  \n  \nclass ExFileObject(io.BufferedReader):\n\n def __init__(self,tarfile,tarinfo):\n  fileobj=_FileInFile(tarfile.fileobj,tarinfo.offset_data,\n  tarinfo.size,tarinfo.sparse)\n  super().__init__(fileobj)\n  \n  \n  \n  \n  \nclass TarInfo(object):\n ''\n\n\n\n\n \n \n __slots__=(\"name\",\"mode\",\"uid\",\"gid\",\"size\",\"mtime\",\n \"chksum\",\"type\",\"linkname\",\"uname\",\"gname\",\n \"devmajor\",\"devminor\",\n \"offset\",\"offset_data\",\"pax_headers\",\"sparse\",\n \"tarfile\",\"_sparse_structs\",\"_link_target\")\n \n def __init__(self,name=\"\"):\n  ''\n\n  \n  self.name=name\n  self.mode=0o644\n  self.uid=0\n  self.gid=0\n  self.size=0\n  self.mtime=0\n  self.chksum=0\n  self.type=REGTYPE\n  self.linkname=\"\"\n  self.uname=\"\"\n  self.gname=\"\"\n  self.devmajor=0\n  self.devminor=0\n  \n  self.offset=0\n  self.offset_data=0\n  \n  self.sparse=None\n  self.pax_headers={}\n  \n  \n  \n def _getpath(self):\n  return self.name\n def _setpath(self,name):\n  self.name=name\n path=property(_getpath,_setpath)\n \n def _getlinkpath(self):\n  return self.linkname\n def _setlinkpath(self,linkname):\n  self.linkname=linkname\n linkpath=property(_getlinkpath,_setlinkpath)\n \n def __repr__(self):\n  return\"<%s %r at %#x>\"%(self.__class__.__name__,self.name,id(self))\n  \n def get_info(self):\n  ''\n  \n  info={\n  \"name\":self.name,\n  \"mode\":self.mode&0o7777,\n  \"uid\":self.uid,\n  \"gid\":self.gid,\n  \"size\":self.size,\n  \"mtime\":self.mtime,\n  \"chksum\":self.chksum,\n  \"type\":self.type,\n  \"linkname\":self.linkname,\n  \"uname\":self.uname,\n  \"gname\":self.gname,\n  \"devmajor\":self.devmajor,\n  \"devminor\":self.devminor\n  }\n  \n  if info[\"type\"]==DIRTYPE and not info[\"name\"].endswith(\"/\"):\n   info[\"name\"]+=\"/\"\n   \n  return info\n  \n def tobuf(self,format=DEFAULT_FORMAT,encoding=ENCODING,errors=\"surrogateescape\"):\n  ''\n  \n  info=self.get_info()\n  \n  if format ==USTAR_FORMAT:\n   return self.create_ustar_header(info,encoding,errors)\n  elif format ==GNU_FORMAT:\n   return self.create_gnu_header(info,encoding,errors)\n  elif format ==PAX_FORMAT:\n   return self.create_pax_header(info,encoding)\n  else :\n   raise ValueError(\"invalid format\")\n   \n def create_ustar_header(self,info,encoding,errors):\n  ''\n  \n  info[\"magic\"]=POSIX_MAGIC\n  \n  if len(info[\"linkname\"])>LENGTH_LINK:\n   raise ValueError(\"linkname is too long\")\n   \n  if len(info[\"name\"])>LENGTH_NAME:\n   info[\"prefix\"],info[\"name\"]=self._posix_split_name(info[\"name\"])\n   \n  return self._create_header(info,USTAR_FORMAT,encoding,errors)\n  \n def create_gnu_header(self,info,encoding,errors):\n  ''\n  \n  info[\"magic\"]=GNU_MAGIC\n  \n  buf=b\"\"\n  if len(info[\"linkname\"])>LENGTH_LINK:\n   buf +=self._create_gnu_long_header(info[\"linkname\"],GNUTYPE_LONGLINK,encoding,errors)\n   \n  if len(info[\"name\"])>LENGTH_NAME:\n   buf +=self._create_gnu_long_header(info[\"name\"],GNUTYPE_LONGNAME,encoding,errors)\n   \n  return buf+self._create_header(info,GNU_FORMAT,encoding,errors)\n  \n def create_pax_header(self,info,encoding):\n  ''\n\n\n  \n  info[\"magic\"]=POSIX_MAGIC\n  pax_headers=self.pax_headers.copy()\n  \n  \n  \n  for name,hname,length in (\n  (\"name\",\"path\",LENGTH_NAME),(\"linkname\",\"linkpath\",LENGTH_LINK),\n  (\"uname\",\"uname\",32),(\"gname\",\"gname\",32)):\n  \n   if hname in pax_headers:\n   \n    continue\n    \n    \n   try :\n    info[name].encode(\"ascii\",\"strict\")\n   except UnicodeEncodeError:\n    pax_headers[hname]=info[name]\n    continue\n    \n   if len(info[name])>length:\n    pax_headers[hname]=info[name]\n    \n    \n    \n  for name,digits in ((\"uid\",8),(\"gid\",8),(\"size\",12),(\"mtime\",12)):\n   if name in pax_headers:\n   \n    info[name]=0\n    continue\n    \n   val=info[name]\n   if not 0 <=val <8 **(digits -1)or isinstance(val,float):\n    pax_headers[name]=str(val)\n    info[name]=0\n    \n    \n  if pax_headers:\n   buf=self._create_pax_generic_header(pax_headers,XHDTYPE,encoding)\n  else :\n   buf=b\"\"\n   \n  return buf+self._create_header(info,USTAR_FORMAT,\"ascii\",\"replace\")\n  \n @classmethod\n def create_pax_global_header(cls,pax_headers):\n  ''\n  \n  return cls._create_pax_generic_header(pax_headers,XGLTYPE,\"utf-8\")\n  \n def _posix_split_name(self,name):\n  ''\n\n  \n  prefix=name[:LENGTH_PREFIX+1]\n  while prefix and prefix[-1]!=\"/\":\n   prefix=prefix[:-1]\n   \n  name=name[len(prefix):]\n  prefix=prefix[:-1]\n  \n  if not prefix or len(name)>LENGTH_NAME:\n   raise ValueError(\"name is too long\")\n  return prefix,name\n  \n @staticmethod\n def _create_header(info,format,encoding,errors):\n  ''\n\n  \n  parts=[\n  stn(info.get(\"name\",\"\"),100,encoding,errors),\n  itn(info.get(\"mode\",0)&0o7777,8,format),\n  itn(info.get(\"uid\",0),8,format),\n  itn(info.get(\"gid\",0),8,format),\n  itn(info.get(\"size\",0),12,format),\n  itn(info.get(\"mtime\",0),12,format),\n  b\"        \",\n  info.get(\"type\",REGTYPE),\n  stn(info.get(\"linkname\",\"\"),100,encoding,errors),\n  info.get(\"magic\",POSIX_MAGIC),\n  stn(info.get(\"uname\",\"\"),32,encoding,errors),\n  stn(info.get(\"gname\",\"\"),32,encoding,errors),\n  itn(info.get(\"devmajor\",0),8,format),\n  itn(info.get(\"devminor\",0),8,format),\n  stn(info.get(\"prefix\",\"\"),155,encoding,errors)\n  ]\n  \n  buf=struct.pack(\"%ds\"%BLOCKSIZE,b\"\".join(parts))\n  chksum=calc_chksums(buf[-BLOCKSIZE:])[0]\n  buf=buf[:-364]+bytes(\"%06o\\0\"%chksum,\"ascii\")+buf[-357:]\n  return buf\n  \n @staticmethod\n def _create_payload(payload):\n  ''\n\n  \n  blocks,remainder=divmod(len(payload),BLOCKSIZE)\n  if remainder >0:\n   payload +=(BLOCKSIZE -remainder)*NUL\n  return payload\n  \n @classmethod\n def _create_gnu_long_header(cls,name,type,encoding,errors):\n  ''\n\n  \n  name=name.encode(encoding,errors)+NUL\n  \n  info={}\n  info[\"name\"]=\"././@LongLink\"\n  info[\"type\"]=type\n  info[\"size\"]=len(name)\n  info[\"magic\"]=GNU_MAGIC\n  \n  \n  return cls._create_header(info,USTAR_FORMAT,encoding,errors)+  cls._create_payload(name)\n  \n @classmethod\n def _create_pax_generic_header(cls,pax_headers,type,encoding):\n  ''\n\n\n  \n  \n  \n  binary=False\n  for keyword,value in pax_headers.items():\n   try :\n    value.encode(\"utf-8\",\"strict\")\n   except UnicodeEncodeError:\n    binary=True\n    break\n    \n  records=b\"\"\n  if binary:\n  \n   records +=b\"21 hdrcharset=BINARY\\n\"\n   \n  for keyword,value in pax_headers.items():\n   keyword=keyword.encode(\"utf-8\")\n   if binary:\n   \n   \n    value=value.encode(encoding,\"surrogateescape\")\n   else :\n    value=value.encode(\"utf-8\")\n    \n   l=len(keyword)+len(value)+3\n   n=p=0\n   while True :\n    n=l+len(str(p))\n    if n ==p:\n     break\n    p=n\n   records +=bytes(str(p),\"ascii\")+b\" \"+keyword+b\"=\"+value+b\"\\n\"\n   \n   \n   \n  info={}\n  info[\"name\"]=\"././@PaxHeader\"\n  info[\"type\"]=type\n  info[\"size\"]=len(records)\n  info[\"magic\"]=POSIX_MAGIC\n  \n  \n  return cls._create_header(info,USTAR_FORMAT,\"ascii\",\"replace\")+  cls._create_payload(records)\n  \n @classmethod\n def frombuf(cls,buf,encoding,errors):\n  ''\n  \n  if len(buf)==0:\n   raise EmptyHeaderError(\"empty header\")\n  if len(buf)!=BLOCKSIZE:\n   raise TruncatedHeaderError(\"truncated header\")\n  if buf.count(NUL)==BLOCKSIZE:\n   raise EOFHeaderError(\"end of file header\")\n   \n  chksum=nti(buf[148:156])\n  if chksum not in calc_chksums(buf):\n   raise InvalidHeaderError(\"bad checksum\")\n   \n  obj=cls()\n  obj.name=nts(buf[0:100],encoding,errors)\n  obj.mode=nti(buf[100:108])\n  obj.uid=nti(buf[108:116])\n  obj.gid=nti(buf[116:124])\n  obj.size=nti(buf[124:136])\n  obj.mtime=nti(buf[136:148])\n  obj.chksum=chksum\n  obj.type=buf[156:157]\n  obj.linkname=nts(buf[157:257],encoding,errors)\n  obj.uname=nts(buf[265:297],encoding,errors)\n  obj.gname=nts(buf[297:329],encoding,errors)\n  obj.devmajor=nti(buf[329:337])\n  obj.devminor=nti(buf[337:345])\n  prefix=nts(buf[345:500],encoding,errors)\n  \n  \n  \n  if obj.type ==AREGTYPE and obj.name.endswith(\"/\"):\n   obj.type=DIRTYPE\n   \n   \n   \n   \n  if obj.type ==GNUTYPE_SPARSE:\n   pos=386\n   structs=[]\n   for i in range(4):\n    try :\n     offset=nti(buf[pos:pos+12])\n     numbytes=nti(buf[pos+12:pos+24])\n    except ValueError:\n     break\n    structs.append((offset,numbytes))\n    pos +=24\n   isextended=bool(buf[482])\n   origsize=nti(buf[483:495])\n   obj._sparse_structs=(structs,isextended,origsize)\n   \n   \n  if obj.isdir():\n   obj.name=obj.name.rstrip(\"/\")\n   \n   \n  if prefix and obj.type not in GNU_TYPES:\n   obj.name=prefix+\"/\"+obj.name\n  return obj\n  \n @classmethod\n def fromtarfile(cls,tarfile):\n  ''\n\n  \n  buf=tarfile.fileobj.read(BLOCKSIZE)\n  obj=cls.frombuf(buf,tarfile.encoding,tarfile.errors)\n  obj.offset=tarfile.fileobj.tell()-BLOCKSIZE\n  return obj._proc_member(tarfile)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n def _proc_member(self,tarfile):\n  ''\n\n  \n  if self.type in (GNUTYPE_LONGNAME,GNUTYPE_LONGLINK):\n   return self._proc_gnulong(tarfile)\n  elif self.type ==GNUTYPE_SPARSE:\n   return self._proc_sparse(tarfile)\n  elif self.type in (XHDTYPE,XGLTYPE,SOLARIS_XHDTYPE):\n   return self._proc_pax(tarfile)\n  else :\n   return self._proc_builtin(tarfile)\n   \n def _proc_builtin(self,tarfile):\n  ''\n\n  \n  self.offset_data=tarfile.fileobj.tell()\n  offset=self.offset_data\n  if self.isreg()or self.type not in SUPPORTED_TYPES:\n  \n   offset +=self._block(self.size)\n  tarfile.offset=offset\n  \n  \n  \n  self._apply_pax_info(tarfile.pax_headers,tarfile.encoding,tarfile.errors)\n  \n  return self\n  \n def _proc_gnulong(self,tarfile):\n  ''\n\n  \n  buf=tarfile.fileobj.read(self._block(self.size))\n  \n  \n  try :\n   next=self.fromtarfile(tarfile)\n  except HeaderError:\n   raise SubsequentHeaderError(\"missing or bad subsequent header\")\n   \n   \n   \n  next.offset=self.offset\n  if self.type ==GNUTYPE_LONGNAME:\n   next.name=nts(buf,tarfile.encoding,tarfile.errors)\n  elif self.type ==GNUTYPE_LONGLINK:\n   next.linkname=nts(buf,tarfile.encoding,tarfile.errors)\n   \n  return next\n  \n def _proc_sparse(self,tarfile):\n  ''\n  \n  \n  structs,isextended,origsize=self._sparse_structs\n  del self._sparse_structs\n  \n  \n  while isextended:\n   buf=tarfile.fileobj.read(BLOCKSIZE)\n   pos=0\n   for i in range(21):\n    try :\n     offset=nti(buf[pos:pos+12])\n     numbytes=nti(buf[pos+12:pos+24])\n    except ValueError:\n     break\n    if offset and numbytes:\n     structs.append((offset,numbytes))\n    pos +=24\n   isextended=bool(buf[504])\n  self.sparse=structs\n  \n  self.offset_data=tarfile.fileobj.tell()\n  tarfile.offset=self.offset_data+self._block(self.size)\n  self.size=origsize\n  return self\n  \n def _proc_pax(self,tarfile):\n  ''\n\n  \n  \n  buf=tarfile.fileobj.read(self._block(self.size))\n  \n  \n  \n  \n  if self.type ==XGLTYPE:\n   pax_headers=tarfile.pax_headers\n  else :\n   pax_headers=tarfile.pax_headers.copy()\n   \n   \n   \n   \n   \n   \n  match=re.search(br\"\\d+ hdrcharset=([^\\n]+)\\n\",buf)\n  if match is not None :\n   pax_headers[\"hdrcharset\"]=match.group(1).decode(\"utf-8\")\n   \n   \n   \n   \n  hdrcharset=pax_headers.get(\"hdrcharset\")\n  if hdrcharset ==\"BINARY\":\n   encoding=tarfile.encoding\n  else :\n   encoding=\"utf-8\"\n   \n   \n   \n   \n   \n  regex=re.compile(br\"(\\d+) ([^=]+)=\")\n  pos=0\n  while True :\n   match=regex.match(buf,pos)\n   if not match:\n    break\n    \n   length,keyword=match.groups()\n   length=int(length)\n   value=buf[match.end(2)+1:match.start(1)+length -1]\n   \n   \n   \n   \n   \n   \n   \n   \n   keyword=self._decode_pax_field(keyword,\"utf-8\",\"utf-8\",\n   tarfile.errors)\n   if keyword in PAX_NAME_FIELDS:\n    value=self._decode_pax_field(value,encoding,tarfile.encoding,\n    tarfile.errors)\n   else :\n    value=self._decode_pax_field(value,\"utf-8\",\"utf-8\",\n    tarfile.errors)\n    \n   pax_headers[keyword]=value\n   pos +=length\n   \n   \n  try :\n   next=self.fromtarfile(tarfile)\n  except HeaderError:\n   raise SubsequentHeaderError(\"missing or bad subsequent header\")\n   \n   \n  if\"GNU.sparse.map\"in pax_headers:\n  \n   self._proc_gnusparse_01(next,pax_headers)\n   \n  elif\"GNU.sparse.size\"in pax_headers:\n  \n   self._proc_gnusparse_00(next,pax_headers,buf)\n   \n  elif pax_headers.get(\"GNU.sparse.major\")==\"1\"and pax_headers.get(\"GNU.sparse.minor\")==\"0\":\n  \n   self._proc_gnusparse_10(next,pax_headers,tarfile)\n   \n  if self.type in (XHDTYPE,SOLARIS_XHDTYPE):\n  \n   next._apply_pax_info(pax_headers,tarfile.encoding,tarfile.errors)\n   next.offset=self.offset\n   \n   if\"size\"in pax_headers:\n   \n   \n   \n    offset=next.offset_data\n    if next.isreg()or next.type not in SUPPORTED_TYPES:\n     offset +=next._block(next.size)\n    tarfile.offset=offset\n    \n  return next\n  \n def _proc_gnusparse_00(self,next,pax_headers,buf):\n  ''\n  \n  offsets=[]\n  for match in re.finditer(br\"\\d+ GNU.sparse.offset=(\\d+)\\n\",buf):\n   offsets.append(int(match.group(1)))\n  numbytes=[]\n  for match in re.finditer(br\"\\d+ GNU.sparse.numbytes=(\\d+)\\n\",buf):\n   numbytes.append(int(match.group(1)))\n  next.sparse=list(zip(offsets,numbytes))\n  \n def _proc_gnusparse_01(self,next,pax_headers):\n  ''\n  \n  sparse=[int(x)for x in pax_headers[\"GNU.sparse.map\"].split(\",\")]\n  next.sparse=list(zip(sparse[::2],sparse[1::2]))\n  \n def _proc_gnusparse_10(self,next,pax_headers,tarfile):\n  ''\n  \n  fields=None\n  sparse=[]\n  buf=tarfile.fileobj.read(BLOCKSIZE)\n  fields,buf=buf.split(b\"\\n\",1)\n  fields=int(fields)\n  while len(sparse)<fields *2:\n   if b\"\\n\"not in buf:\n    buf +=tarfile.fileobj.read(BLOCKSIZE)\n   number,buf=buf.split(b\"\\n\",1)\n   sparse.append(int(number))\n  next.offset_data=tarfile.fileobj.tell()\n  next.sparse=list(zip(sparse[::2],sparse[1::2]))\n  \n def _apply_pax_info(self,pax_headers,encoding,errors):\n  ''\n\n  \n  for keyword,value in pax_headers.items():\n   if keyword ==\"GNU.sparse.name\":\n    setattr(self,\"path\",value)\n   elif keyword ==\"GNU.sparse.size\":\n    setattr(self,\"size\",int(value))\n   elif keyword ==\"GNU.sparse.realsize\":\n    setattr(self,\"size\",int(value))\n   elif keyword in PAX_FIELDS:\n    if keyword in PAX_NUMBER_FIELDS:\n     try :\n      value=PAX_NUMBER_FIELDS[keyword](value)\n     except ValueError:\n      value=0\n    if keyword ==\"path\":\n     value=value.rstrip(\"/\")\n    setattr(self,keyword,value)\n    \n  self.pax_headers=pax_headers.copy()\n  \n def _decode_pax_field(self,value,encoding,fallback_encoding,fallback_errors):\n  ''\n  \n  try :\n   return value.decode(encoding,\"strict\")\n  except UnicodeDecodeError:\n   return value.decode(fallback_encoding,fallback_errors)\n   \n def _block(self,count):\n  ''\n\n  \n  blocks,remainder=divmod(count,BLOCKSIZE)\n  if remainder:\n   blocks +=1\n  return blocks *BLOCKSIZE\n  \n def isreg(self):\n  return self.type in REGULAR_TYPES\n def isfile(self):\n  return self.isreg()\n def isdir(self):\n  return self.type ==DIRTYPE\n def issym(self):\n  return self.type ==SYMTYPE\n def islnk(self):\n  return self.type ==LNKTYPE\n def ischr(self):\n  return self.type ==CHRTYPE\n def isblk(self):\n  return self.type ==BLKTYPE\n def isfifo(self):\n  return self.type ==FIFOTYPE\n def issparse(self):\n  return self.sparse is not None\n def isdev(self):\n  return self.type in (CHRTYPE,BLKTYPE,FIFOTYPE)\n  \n  \nclass TarFile(object):\n ''\n \n \n debug=0\n \n dereference=False\n \n \n ignore_zeros=False\n \n \n errorlevel=1\n \n \n \n format=DEFAULT_FORMAT\n \n encoding=ENCODING\n \n errors=None\n \n tarinfo=TarInfo\n \n fileobject=ExFileObject\n \n def __init__(self,name=None ,mode=\"r\",fileobj=None ,format=None ,\n tarinfo=None ,dereference=None ,ignore_zeros=None ,encoding=None ,\n errors=\"surrogateescape\",pax_headers=None ,debug=None ,errorlevel=None ):\n  ''\n\n\n\n\n\n\n  \n  if len(mode)>1 or mode not in\"raw\":\n   raise ValueError(\"mode must be 'r', 'a' or 'w'\")\n  self.mode=mode\n  self._mode={\"r\":\"rb\",\"a\":\"r+b\",\"w\":\"wb\"}[mode]\n  \n  if not fileobj:\n   if self.mode ==\"a\"and not os.path.exists(name):\n   \n    self.mode=\"w\"\n    self._mode=\"wb\"\n   fileobj=bltn_open(name,self._mode)\n   self._extfileobj=False\n  else :\n   if name is None and hasattr(fileobj,\"name\"):\n    name=fileobj.name\n   if hasattr(fileobj,\"mode\"):\n    self._mode=fileobj.mode\n   self._extfileobj=True\n  self.name=os.path.abspath(name)if name else None\n  self.fileobj=fileobj\n  \n  \n  if format is not None :\n   self.format=format\n  if tarinfo is not None :\n   self.tarinfo=tarinfo\n  if dereference is not None :\n   self.dereference=dereference\n  if ignore_zeros is not None :\n   self.ignore_zeros=ignore_zeros\n  if encoding is not None :\n   self.encoding=encoding\n  self.errors=errors\n  \n  if pax_headers is not None and self.format ==PAX_FORMAT:\n   self.pax_headers=pax_headers\n  else :\n   self.pax_headers={}\n   \n  if debug is not None :\n   self.debug=debug\n  if errorlevel is not None :\n   self.errorlevel=errorlevel\n   \n   \n  self.closed=False\n  self.members=[]\n  self._loaded=False\n  self.offset=self.fileobj.tell()\n  \n  self.inodes={}\n  \n  \n  try :\n   if self.mode ==\"r\":\n    self.firstmember=None\n    self.firstmember=self.next()\n    \n   if self.mode ==\"a\":\n   \n   \n    while True :\n     self.fileobj.seek(self.offset)\n     try :\n      tarinfo=self.tarinfo.fromtarfile(self)\n      self.members.append(tarinfo)\n     except EOFHeaderError:\n      self.fileobj.seek(self.offset)\n      break\n     except HeaderError as e:\n      raise ReadError(str(e))\n      \n   if self.mode in\"aw\":\n    self._loaded=True\n    \n    if self.pax_headers:\n     buf=self.tarinfo.create_pax_global_header(self.pax_headers.copy())\n     self.fileobj.write(buf)\n     self.offset +=len(buf)\n  except :\n   if not self._extfileobj:\n    self.fileobj.close()\n   self.closed=True\n   raise\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n @classmethod\n def open(cls,name=None ,mode=\"r\",fileobj=None ,bufsize=RECORDSIZE,**kwargs):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if not name and not fileobj:\n   raise ValueError(\"nothing to open\")\n   \n  if mode in (\"r\",\"r:*\"):\n  \n   for comptype in cls.OPEN_METH:\n    func=getattr(cls,cls.OPEN_METH[comptype])\n    if fileobj is not None :\n     saved_pos=fileobj.tell()\n    try :\n     return func(name,\"r\",fileobj,**kwargs)\n    except (ReadError,CompressionError)as e:\n     if fileobj is not None :\n      fileobj.seek(saved_pos)\n     continue\n   raise ReadError(\"file could not be opened successfully\")\n   \n  elif\":\"in mode:\n   filemode,comptype=mode.split(\":\",1)\n   filemode=filemode or\"r\"\n   comptype=comptype or\"tar\"\n   \n   \n   \n   if comptype in cls.OPEN_METH:\n    func=getattr(cls,cls.OPEN_METH[comptype])\n   else :\n    raise CompressionError(\"unknown compression type %r\"%comptype)\n   return func(name,filemode,fileobj,**kwargs)\n   \n  elif\"|\"in mode:\n   filemode,comptype=mode.split(\"|\",1)\n   filemode=filemode or\"r\"\n   comptype=comptype or\"tar\"\n   \n   if filemode not in\"rw\":\n    raise ValueError(\"mode must be 'r' or 'w'\")\n    \n   stream=_Stream(name,filemode,comptype,fileobj,bufsize)\n   try :\n    t=cls(name,filemode,stream,**kwargs)\n   except :\n    stream.close()\n    raise\n   t._extfileobj=False\n   return t\n   \n  elif mode in\"aw\":\n   return cls.taropen(name,mode,fileobj,**kwargs)\n   \n  raise ValueError(\"undiscernible mode\")\n  \n @classmethod\n def taropen(cls,name,mode=\"r\",fileobj=None ,**kwargs):\n  ''\n  \n  if len(mode)>1 or mode not in\"raw\":\n   raise ValueError(\"mode must be 'r', 'a' or 'w'\")\n  return cls(name,mode,fileobj,**kwargs)\n  \n @classmethod\n def gzopen(cls,name,mode=\"r\",fileobj=None ,compresslevel=9,**kwargs):\n  ''\n\n  \n  if len(mode)>1 or mode not in\"rw\":\n   raise ValueError(\"mode must be 'r' or 'w'\")\n   \n  try :\n   import gzip\n   gzip.GzipFile\n  except (ImportError,AttributeError):\n   raise CompressionError(\"gzip module is not available\")\n   \n  extfileobj=fileobj is not None\n  try :\n   fileobj=gzip.GzipFile(name,mode+\"b\",compresslevel,fileobj)\n   t=cls.taropen(name,mode,fileobj,**kwargs)\n  except IOError:\n   if not extfileobj and fileobj is not None :\n    fileobj.close()\n   if fileobj is None :\n    raise\n   raise ReadError(\"not a gzip file\")\n  except :\n   if not extfileobj and fileobj is not None :\n    fileobj.close()\n   raise\n  t._extfileobj=extfileobj\n  return t\n  \n @classmethod\n def bz2open(cls,name,mode=\"r\",fileobj=None ,compresslevel=9,**kwargs):\n  ''\n\n  \n  if len(mode)>1 or mode not in\"rw\":\n   raise ValueError(\"mode must be 'r' or 'w'.\")\n   \n  try :\n   import bz2\n  except ImportError:\n   raise CompressionError(\"bz2 module is not available\")\n   \n  fileobj=bz2.BZ2File(fileobj or name,mode,\n  compresslevel=compresslevel)\n  \n  try :\n   t=cls.taropen(name,mode,fileobj,**kwargs)\n  except (IOError,EOFError):\n   fileobj.close()\n   raise ReadError(\"not a bzip2 file\")\n  t._extfileobj=False\n  return t\n  \n @classmethod\n def xzopen(cls,name,mode=\"r\",fileobj=None ,preset=None ,**kwargs):\n  ''\n\n  \n  if mode not in (\"r\",\"w\"):\n   raise ValueError(\"mode must be 'r' or 'w'\")\n   \n  try :\n   import lzma\n  except ImportError:\n   raise CompressionError(\"lzma module is not available\")\n   \n  fileobj=lzma.LZMAFile(fileobj or name,mode,preset=preset)\n  \n  try :\n   t=cls.taropen(name,mode,fileobj,**kwargs)\n  except (lzma.LZMAError,EOFError):\n   fileobj.close()\n   raise ReadError(\"not an lzma file\")\n  t._extfileobj=False\n  return t\n  \n  \n OPEN_METH={\n \"tar\":\"taropen\",\n \"gz\":\"gzopen\",\n \"bz2\":\"bz2open\",\n \"xz\":\"xzopen\"\n }\n \n \n \n \n def close(self):\n  ''\n\n  \n  if self.closed:\n   return\n   \n  if self.mode in\"aw\":\n   self.fileobj.write(NUL *(BLOCKSIZE *2))\n   self.offset +=(BLOCKSIZE *2)\n   \n   \n   blocks,remainder=divmod(self.offset,RECORDSIZE)\n   if remainder >0:\n    self.fileobj.write(NUL *(RECORDSIZE -remainder))\n    \n  if not self._extfileobj:\n   self.fileobj.close()\n  self.closed=True\n  \n def getmember(self,name):\n  ''\n\n\n\n  \n  tarinfo=self._getmember(name)\n  if tarinfo is None :\n   raise KeyError(\"filename %r not found\"%name)\n  return tarinfo\n  \n def getmembers(self):\n  ''\n\n  \n  self._check()\n  if not self._loaded:\n   self._load()\n   \n  return self.members\n  \n def getnames(self):\n  ''\n\n  \n  return [tarinfo.name for tarinfo in self.getmembers()]\n  \n def gettarinfo(self,name=None ,arcname=None ,fileobj=None ):\n  ''\n\n\n\n\n  \n  self._check(\"aw\")\n  \n  \n  \n  if fileobj is not None :\n   name=fileobj.name\n   \n   \n   \n   \n  if arcname is None :\n   arcname=name\n  drv,arcname=os.path.splitdrive(arcname)\n  arcname=arcname.replace(os.sep,\"/\")\n  arcname=arcname.lstrip(\"/\")\n  \n  \n  \n  tarinfo=self.tarinfo()\n  tarinfo.tarfile=self\n  \n  \n  \n  if fileobj is None :\n   if hasattr(os,\"lstat\")and not self.dereference:\n    statres=os.lstat(name)\n   else :\n    statres=os.stat(name)\n  else :\n   statres=os.fstat(fileobj.fileno())\n  linkname=\"\"\n  \n  stmd=statres.st_mode\n  if stat.S_ISREG(stmd):\n   inode=(statres.st_ino,statres.st_dev)\n   if not self.dereference and statres.st_nlink >1 and   inode in self.inodes and arcname !=self.inodes[inode]:\n   \n   \n    type=LNKTYPE\n    linkname=self.inodes[inode]\n   else :\n   \n   \n    type=REGTYPE\n    if inode[0]:\n     self.inodes[inode]=arcname\n  elif stat.S_ISDIR(stmd):\n   type=DIRTYPE\n  elif stat.S_ISFIFO(stmd):\n   type=FIFOTYPE\n  elif stat.S_ISLNK(stmd):\n   type=SYMTYPE\n   linkname=os.readlink(name)\n  elif stat.S_ISCHR(stmd):\n   type=CHRTYPE\n  elif stat.S_ISBLK(stmd):\n   type=BLKTYPE\n  else :\n   return None\n   \n   \n   \n  tarinfo.name=arcname\n  tarinfo.mode=stmd\n  tarinfo.uid=statres.st_uid\n  tarinfo.gid=statres.st_gid\n  if type ==REGTYPE:\n   tarinfo.size=statres.st_size\n  else :\n   tarinfo.size=0\n  tarinfo.mtime=statres.st_mtime\n  tarinfo.type=type\n  tarinfo.linkname=linkname\n  if pwd:\n   try :\n    tarinfo.uname=pwd.getpwuid(tarinfo.uid)[0]\n   except KeyError:\n    pass\n  if grp:\n   try :\n    tarinfo.gname=grp.getgrgid(tarinfo.gid)[0]\n   except KeyError:\n    pass\n    \n  if type in (CHRTYPE,BLKTYPE):\n   if hasattr(os,\"major\")and hasattr(os,\"minor\"):\n    tarinfo.devmajor=os.major(statres.st_rdev)\n    tarinfo.devminor=os.minor(statres.st_rdev)\n  return tarinfo\n  \n def list(self,verbose=True ):\n  ''\n\n\n  \n  self._check()\n  \n  for tarinfo in self:\n   if verbose:\n    print(stat.filemode(tarinfo.mode),end=' ')\n    print(\"%s/%s\"%(tarinfo.uname or tarinfo.uid,\n    tarinfo.gname or tarinfo.gid),end=' ')\n    if tarinfo.ischr()or tarinfo.isblk():\n     print(\"%10s\"%(\"%d,%d\"     %(tarinfo.devmajor,tarinfo.devminor)),end=' ')\n    else :\n     print(\"%10d\"%tarinfo.size,end=' ')\n    print(\"%d-%02d-%02d %02d:%02d:%02d\"    %time.localtime(tarinfo.mtime)[:6],end=' ')\n    \n   print(tarinfo.name+(\"/\"if tarinfo.isdir()else\"\"),end=' ')\n   \n   if verbose:\n    if tarinfo.issym():\n     print(\"->\",tarinfo.linkname,end=' ')\n    if tarinfo.islnk():\n     print(\"link to\",tarinfo.linkname,end=' ')\n   print()\n   \n def add(self,name,arcname=None ,recursive=True ,exclude=None ,*,filter=None ):\n  ''\n\n\n\n\n\n\n\n\n  \n  self._check(\"aw\")\n  \n  if arcname is None :\n   arcname=name\n   \n   \n  if exclude is not None :\n   import warnings\n   warnings.warn(\"use the filter argument instead\",\n   DeprecationWarning,2)\n   if exclude(name):\n    self._dbg(2,\"tarfile: Excluded %r\"%name)\n    return\n    \n    \n  if self.name is not None and os.path.abspath(name)==self.name:\n   self._dbg(2,\"tarfile: Skipped %r\"%name)\n   return\n   \n  self._dbg(1,name)\n  \n  \n  tarinfo=self.gettarinfo(name,arcname)\n  \n  if tarinfo is None :\n   self._dbg(1,\"tarfile: Unsupported type %r\"%name)\n   return\n   \n   \n  if filter is not None :\n   tarinfo=filter(tarinfo)\n   if tarinfo is None :\n    self._dbg(2,\"tarfile: Excluded %r\"%name)\n    return\n    \n    \n  if tarinfo.isreg():\n   with bltn_open(name,\"rb\")as f:\n    self.addfile(tarinfo,f)\n    \n  elif tarinfo.isdir():\n   self.addfile(tarinfo)\n   if recursive:\n    for f in os.listdir(name):\n     self.add(os.path.join(name,f),os.path.join(arcname,f),\n     recursive,exclude,filter=filter)\n     \n  else :\n   self.addfile(tarinfo)\n   \n def addfile(self,tarinfo,fileobj=None ):\n  ''\n\n\n\n\n  \n  self._check(\"aw\")\n  \n  tarinfo=copy.copy(tarinfo)\n  \n  buf=tarinfo.tobuf(self.format,self.encoding,self.errors)\n  self.fileobj.write(buf)\n  self.offset +=len(buf)\n  \n  \n  if fileobj is not None :\n   copyfileobj(fileobj,self.fileobj,tarinfo.size)\n   blocks,remainder=divmod(tarinfo.size,BLOCKSIZE)\n   if remainder >0:\n    self.fileobj.write(NUL *(BLOCKSIZE -remainder))\n    blocks +=1\n   self.offset +=blocks *BLOCKSIZE\n   \n  self.members.append(tarinfo)\n  \n def extractall(self,path=\".\",members=None ):\n  ''\n\n\n\n\n  \n  directories=[]\n  \n  if members is None :\n   members=self\n   \n  for tarinfo in members:\n   if tarinfo.isdir():\n   \n    directories.append(tarinfo)\n    tarinfo=copy.copy(tarinfo)\n    tarinfo.mode=0o700\n    \n   self.extract(tarinfo,path,set_attrs=not tarinfo.isdir())\n   \n   \n  directories.sort(key=lambda a:a.name)\n  directories.reverse()\n  \n  \n  for tarinfo in directories:\n   dirpath=os.path.join(path,tarinfo.name)\n   try :\n    self.chown(tarinfo,dirpath)\n    self.utime(tarinfo,dirpath)\n    self.chmod(tarinfo,dirpath)\n   except ExtractError as e:\n    if self.errorlevel >1:\n     raise\n    else :\n     self._dbg(1,\"tarfile: %s\"%e)\n     \n def extract(self,member,path=\"\",set_attrs=True ):\n  ''\n\n\n\n\n  \n  self._check(\"r\")\n  \n  if isinstance(member,str):\n   tarinfo=self.getmember(member)\n  else :\n   tarinfo=member\n   \n   \n  if tarinfo.islnk():\n   tarinfo._link_target=os.path.join(path,tarinfo.linkname)\n   \n  try :\n   self._extract_member(tarinfo,os.path.join(path,tarinfo.name),\n   set_attrs=set_attrs)\n  except EnvironmentError as e:\n   if self.errorlevel >0:\n    raise\n   else :\n    if e.filename is None :\n     self._dbg(1,\"tarfile: %s\"%e.strerror)\n    else :\n     self._dbg(1,\"tarfile: %s %r\"%(e.strerror,e.filename))\n  except ExtractError as e:\n   if self.errorlevel >1:\n    raise\n   else :\n    self._dbg(1,\"tarfile: %s\"%e)\n    \n def extractfile(self,member):\n  ''\n\n\n\n  \n  self._check(\"r\")\n  \n  if isinstance(member,str):\n   tarinfo=self.getmember(member)\n  else :\n   tarinfo=member\n   \n  if tarinfo.isreg()or tarinfo.type not in SUPPORTED_TYPES:\n  \n   return self.fileobject(self,tarinfo)\n   \n  elif tarinfo.islnk()or tarinfo.issym():\n   if isinstance(self.fileobj,_Stream):\n   \n   \n   \n    raise StreamError(\"cannot extract (sym)link as file object\")\n   else :\n   \n    return self.extractfile(self._find_link_target(tarinfo))\n  else :\n  \n  \n   return None\n   \n def _extract_member(self,tarinfo,targetpath,set_attrs=True ):\n  ''\n\n  \n  \n  \n  \n  targetpath=targetpath.rstrip(\"/\")\n  targetpath=targetpath.replace(\"/\",os.sep)\n  \n  \n  upperdirs=os.path.dirname(targetpath)\n  if upperdirs and not os.path.exists(upperdirs):\n  \n  \n   os.makedirs(upperdirs)\n   \n  if tarinfo.islnk()or tarinfo.issym():\n   self._dbg(1,\"%s -> %s\"%(tarinfo.name,tarinfo.linkname))\n  else :\n   self._dbg(1,tarinfo.name)\n   \n  if tarinfo.isreg():\n   self.makefile(tarinfo,targetpath)\n  elif tarinfo.isdir():\n   self.makedir(tarinfo,targetpath)\n  elif tarinfo.isfifo():\n   self.makefifo(tarinfo,targetpath)\n  elif tarinfo.ischr()or tarinfo.isblk():\n   self.makedev(tarinfo,targetpath)\n  elif tarinfo.islnk()or tarinfo.issym():\n   self.makelink(tarinfo,targetpath)\n  elif tarinfo.type not in SUPPORTED_TYPES:\n   self.makeunknown(tarinfo,targetpath)\n  else :\n   self.makefile(tarinfo,targetpath)\n   \n  if set_attrs:\n   self.chown(tarinfo,targetpath)\n   if not tarinfo.issym():\n    self.chmod(tarinfo,targetpath)\n    self.utime(tarinfo,targetpath)\n    \n    \n    \n    \n    \n    \n def makedir(self,tarinfo,targetpath):\n  ''\n  \n  try :\n  \n  \n   os.mkdir(targetpath,0o700)\n  except FileExistsError:\n   pass\n   \n def makefile(self,tarinfo,targetpath):\n  ''\n  \n  source=self.fileobj\n  source.seek(tarinfo.offset_data)\n  with bltn_open(targetpath,\"wb\")as target:\n   if tarinfo.sparse is not None :\n    for offset,size in tarinfo.sparse:\n     target.seek(offset)\n     copyfileobj(source,target,size)\n   else :\n    copyfileobj(source,target,tarinfo.size)\n   target.seek(tarinfo.size)\n   target.truncate()\n   \n def makeunknown(self,tarinfo,targetpath):\n  ''\n\n  \n  self.makefile(tarinfo,targetpath)\n  self._dbg(1,\"tarfile: Unknown file type %r, \"  \"extracted as regular file.\"%tarinfo.type)\n  \n def makefifo(self,tarinfo,targetpath):\n  ''\n  \n  if hasattr(os,\"mkfifo\"):\n   os.mkfifo(targetpath)\n  else :\n   raise ExtractError(\"fifo not supported by system\")\n   \n def makedev(self,tarinfo,targetpath):\n  ''\n  \n  if not hasattr(os,\"mknod\")or not hasattr(os,\"makedev\"):\n   raise ExtractError(\"special devices not supported by system\")\n   \n  mode=tarinfo.mode\n  if tarinfo.isblk():\n   mode |=stat.S_IFBLK\n  else :\n   mode |=stat.S_IFCHR\n   \n  os.mknod(targetpath,mode,\n  os.makedev(tarinfo.devmajor,tarinfo.devminor))\n  \n def makelink(self,tarinfo,targetpath):\n  ''\n\n\n  \n  try :\n  \n   if tarinfo.issym():\n    os.symlink(tarinfo.linkname,targetpath)\n   else :\n   \n    if os.path.exists(tarinfo._link_target):\n     os.link(tarinfo._link_target,targetpath)\n    else :\n     self._extract_member(self._find_link_target(tarinfo),\n     targetpath)\n  except symlink_exception:\n   try :\n    self._extract_member(self._find_link_target(tarinfo),\n    targetpath)\n   except KeyError:\n    raise ExtractError(\"unable to resolve link inside archive\")\n    \n def chown(self,tarinfo,targetpath):\n  ''\n  \n  if pwd and hasattr(os,\"geteuid\")and os.geteuid()==0:\n  \n   try :\n    g=grp.getgrnam(tarinfo.gname)[2]\n   except KeyError:\n    g=tarinfo.gid\n   try :\n    u=pwd.getpwnam(tarinfo.uname)[2]\n   except KeyError:\n    u=tarinfo.uid\n   try :\n    if tarinfo.issym()and hasattr(os,\"lchown\"):\n     os.lchown(targetpath,u,g)\n    else :\n     if sys.platform !=\"os2emx\":\n      os.chown(targetpath,u,g)\n   except EnvironmentError as e:\n    raise ExtractError(\"could not change owner\")\n    \n def chmod(self,tarinfo,targetpath):\n  ''\n  \n  if hasattr(os,'chmod'):\n   try :\n    os.chmod(targetpath,tarinfo.mode)\n   except EnvironmentError as e:\n    raise ExtractError(\"could not change mode\")\n    \n def utime(self,tarinfo,targetpath):\n  ''\n  \n  if not hasattr(os,'utime'):\n   return\n  try :\n   os.utime(targetpath,(tarinfo.mtime,tarinfo.mtime))\n  except EnvironmentError as e:\n   raise ExtractError(\"could not change modification time\")\n   \n   \n def next(self):\n  ''\n\n\n  \n  self._check(\"ra\")\n  if self.firstmember is not None :\n   m=self.firstmember\n   self.firstmember=None\n   return m\n   \n   \n  self.fileobj.seek(self.offset)\n  tarinfo=None\n  while True :\n   try :\n    tarinfo=self.tarinfo.fromtarfile(self)\n   except EOFHeaderError as e:\n    if self.ignore_zeros:\n     self._dbg(2,\"0x%X: %s\"%(self.offset,e))\n     self.offset +=BLOCKSIZE\n     continue\n   except InvalidHeaderError as e:\n    if self.ignore_zeros:\n     self._dbg(2,\"0x%X: %s\"%(self.offset,e))\n     self.offset +=BLOCKSIZE\n     continue\n    elif self.offset ==0:\n     raise ReadError(str(e))\n   except EmptyHeaderError:\n    if self.offset ==0:\n     raise ReadError(\"empty file\")\n   except TruncatedHeaderError as e:\n    if self.offset ==0:\n     raise ReadError(str(e))\n   except SubsequentHeaderError as e:\n    raise ReadError(str(e))\n   break\n   \n  if tarinfo is not None :\n   self.members.append(tarinfo)\n  else :\n   self._loaded=True\n   \n  return tarinfo\n  \n  \n  \n  \n def _getmember(self,name,tarinfo=None ,normalize=False ):\n  ''\n\n  \n  \n  members=self.getmembers()\n  \n  \n  if tarinfo is not None :\n   members=members[:members.index(tarinfo)]\n   \n  if normalize:\n   name=os.path.normpath(name)\n   \n  for member in reversed(members):\n   if normalize:\n    member_name=os.path.normpath(member.name)\n   else :\n    member_name=member.name\n    \n   if name ==member_name:\n    return member\n    \n def _load(self):\n  ''\n\n  \n  while True :\n   tarinfo=self.next()\n   if tarinfo is None :\n    break\n  self._loaded=True\n  \n def _check(self,mode=None ):\n  ''\n\n  \n  if self.closed:\n   raise IOError(\"%s is closed\"%self.__class__.__name__)\n  if mode is not None and self.mode not in mode:\n   raise IOError(\"bad operation for mode %r\"%self.mode)\n   \n def _find_link_target(self,tarinfo):\n  ''\n\n  \n  if tarinfo.issym():\n  \n   linkname=\"/\".join(filter(None ,(os.path.dirname(tarinfo.name),tarinfo.linkname)))\n   limit=None\n  else :\n  \n  \n   linkname=tarinfo.linkname\n   limit=tarinfo\n   \n  member=self._getmember(linkname,tarinfo=limit,normalize=True )\n  if member is None :\n   raise KeyError(\"linkname %r not found\"%linkname)\n  return member\n  \n def __iter__(self):\n  ''\n  \n  if self._loaded:\n   return iter(self.members)\n  else :\n   return TarIter(self)\n   \n def _dbg(self,level,msg):\n  ''\n  \n  if level <=self.debug:\n   print(msg,file=sys.stderr)\n   \n def __enter__(self):\n  self._check()\n  return self\n  \n def __exit__(self,type,value,traceback):\n  if type is None :\n   self.close()\n  else :\n  \n  \n   if not self._extfileobj:\n    self.fileobj.close()\n   self.closed=True\n   \n   \nclass TarIter:\n ''\n\n\n\n \n \n def __init__(self,tarfile):\n  ''\n  \n  self.tarfile=tarfile\n  self.index=0\n def __iter__(self):\n  ''\n  \n  return self\n def __next__(self):\n  ''\n\n  \n  \n  \n  \n  \n  if self.index ==0 and self.tarfile.firstmember is not None :\n   tarinfo=self.tarfile.next()\n  elif self.index <len(self.tarfile.members):\n   tarinfo=self.tarfile.members[self.index]\n  elif not self.tarfile._loaded:\n   tarinfo=self.tarfile.next()\n   if not tarinfo:\n    self.tarfile._loaded=True\n    raise StopIteration\n  else :\n   raise StopIteration\n  self.index +=1\n  return tarinfo\n  \n  \n  \n  \ndef is_tarfile(name):\n ''\n\n \n try :\n  t=open(name)\n  t.close()\n  return True\n except TarError:\n  return False\n  \nbltn_open=open\nopen=TarFile.open\n"], "xml.dom.xmlbuilder": [".py", "''\n\nimport copy\nimport xml.dom\n\nfrom xml.dom.NodeFilter import NodeFilter\n\n\n__all__=[\"DOMBuilder\",\"DOMEntityResolver\",\"DOMInputSource\"]\n\n\nclass Options:\n ''\n\n\n\n \n \n \n \n \n namespaces=1\n namespace_declarations=True\n validation=False\n external_parameter_entities=True\n external_general_entities=True\n external_dtd_subset=True\n validate_if_schema=False\n validate=False\n datatype_normalization=False\n create_entity_ref_nodes=True\n entities=True\n whitespace_in_element_content=True\n cdata_sections=True\n comments=True\n charset_overrides_xml_encoding=True\n infoset=False\n supported_mediatypes_only=False\n \n errorHandler=None\n filter=None\n \n \nclass DOMBuilder:\n entityResolver=None\n errorHandler=None\n filter=None\n \n ACTION_REPLACE=1\n ACTION_APPEND_AS_CHILDREN=2\n ACTION_INSERT_AFTER=3\n ACTION_INSERT_BEFORE=4\n \n _legal_actions=(ACTION_REPLACE,ACTION_APPEND_AS_CHILDREN,\n ACTION_INSERT_AFTER,ACTION_INSERT_BEFORE)\n \n def __init__(self):\n  self._options=Options()\n  \n def _get_entityResolver(self):\n  return self.entityResolver\n def _set_entityResolver(self,entityResolver):\n  self.entityResolver=entityResolver\n  \n def _get_errorHandler(self):\n  return self.errorHandler\n def _set_errorHandler(self,errorHandler):\n  self.errorHandler=errorHandler\n  \n def _get_filter(self):\n  return self.filter\n def _set_filter(self,filter):\n  self.filter=filter\n  \n def setFeature(self,name,state):\n  if self.supportsFeature(name):\n   state=state and 1 or 0\n   try :\n    settings=self._settings[(_name_xform(name),state)]\n   except KeyError:\n    raise xml.dom.NotSupportedErr(\n    \"unsupported feature: %r\"%(name,))\n   else :\n    for name,value in settings:\n     setattr(self._options,name,value)\n  else :\n   raise xml.dom.NotFoundErr(\"unknown feature: \"+repr(name))\n   \n def supportsFeature(self,name):\n  return hasattr(self._options,_name_xform(name))\n  \n def canSetFeature(self,name,state):\n  key=(_name_xform(name),state and 1 or 0)\n  return key in self._settings\n  \n  \n  \n  \n  \n  \n _settings={\n (\"namespace_declarations\",0):[\n (\"namespace_declarations\",0)],\n (\"namespace_declarations\",1):[\n (\"namespace_declarations\",1)],\n (\"validation\",0):[\n (\"validation\",0)],\n (\"external_general_entities\",0):[\n (\"external_general_entities\",0)],\n (\"external_general_entities\",1):[\n (\"external_general_entities\",1)],\n (\"external_parameter_entities\",0):[\n (\"external_parameter_entities\",0)],\n (\"external_parameter_entities\",1):[\n (\"external_parameter_entities\",1)],\n (\"validate_if_schema\",0):[\n (\"validate_if_schema\",0)],\n (\"create_entity_ref_nodes\",0):[\n (\"create_entity_ref_nodes\",0)],\n (\"create_entity_ref_nodes\",1):[\n (\"create_entity_ref_nodes\",1)],\n (\"entities\",0):[\n (\"create_entity_ref_nodes\",0),\n (\"entities\",0)],\n (\"entities\",1):[\n (\"entities\",1)],\n (\"whitespace_in_element_content\",0):[\n (\"whitespace_in_element_content\",0)],\n (\"whitespace_in_element_content\",1):[\n (\"whitespace_in_element_content\",1)],\n (\"cdata_sections\",0):[\n (\"cdata_sections\",0)],\n (\"cdata_sections\",1):[\n (\"cdata_sections\",1)],\n (\"comments\",0):[\n (\"comments\",0)],\n (\"comments\",1):[\n (\"comments\",1)],\n (\"charset_overrides_xml_encoding\",0):[\n (\"charset_overrides_xml_encoding\",0)],\n (\"charset_overrides_xml_encoding\",1):[\n (\"charset_overrides_xml_encoding\",1)],\n (\"infoset\",0):[],\n (\"infoset\",1):[\n (\"namespace_declarations\",0),\n (\"validate_if_schema\",0),\n (\"create_entity_ref_nodes\",0),\n (\"entities\",0),\n (\"cdata_sections\",0),\n (\"datatype_normalization\",1),\n (\"whitespace_in_element_content\",1),\n (\"comments\",1),\n (\"charset_overrides_xml_encoding\",1)],\n (\"supported_mediatypes_only\",0):[\n (\"supported_mediatypes_only\",0)],\n (\"namespaces\",0):[\n (\"namespaces\",0)],\n (\"namespaces\",1):[\n (\"namespaces\",1)],\n }\n \n def getFeature(self,name):\n  xname=_name_xform(name)\n  try :\n   return getattr(self._options,xname)\n  except AttributeError:\n   if name ==\"infoset\":\n    options=self._options\n    return (options.datatype_normalization\n    and options.whitespace_in_element_content\n    and options.comments\n    and options.charset_overrides_xml_encoding\n    and not (options.namespace_declarations\n    or options.validate_if_schema\n    or options.create_entity_ref_nodes\n    or options.entities\n    or options.cdata_sections))\n   raise xml.dom.NotFoundErr(\"feature %s not known\"%repr(name))\n   \n def parseURI(self,uri):\n  if self.entityResolver:\n   input=self.entityResolver.resolveEntity(None ,uri)\n  else :\n   input=DOMEntityResolver().resolveEntity(None ,uri)\n  return self.parse(input)\n  \n def parse(self,input):\n  options=copy.copy(self._options)\n  options.filter=self.filter\n  options.errorHandler=self.errorHandler\n  fp=input.byteStream\n  if fp is None and options.systemId:\n   import urllib.request\n   fp=urllib.request.urlopen(input.systemId)\n  return self._parse_bytestream(fp,options)\n  \n def parseWithContext(self,input,cnode,action):\n  if action not in self._legal_actions:\n   raise ValueError(\"not a legal action\")\n  raise NotImplementedError(\"Haven't written this yet...\")\n  \n def _parse_bytestream(self,stream,options):\n  import xml.dom.expatbuilder\n  builder=xml.dom.expatbuilder.makeBuilder(options)\n  return builder.parseFile(stream)\n  \n  \ndef _name_xform(name):\n return name.lower().replace('-','_')\n \n \nclass DOMEntityResolver(object):\n __slots__='_opener',\n \n def resolveEntity(self,publicId,systemId):\n  assert systemId is not None\n  source=DOMInputSource()\n  source.publicId=publicId\n  source.systemId=systemId\n  source.byteStream=self._get_opener().open(systemId)\n  \n  \n  source.encoding=self._guess_media_encoding(source)\n  \n  \n  import posixpath,urllib.parse\n  parts=urllib.parse.urlparse(systemId)\n  scheme,netloc,path,params,query,fragment=parts\n  \n  if path and not path.endswith(\"/\"):\n   path=posixpath.dirname(path)+\"/\"\n   parts=scheme,netloc,path,params,query,fragment\n   source.baseURI=urllib.parse.urlunparse(parts)\n   \n  return source\n  \n def _get_opener(self):\n  try :\n   return self._opener\n  except AttributeError:\n   self._opener=self._create_opener()\n   return self._opener\n   \n def _create_opener(self):\n  import urllib.request\n  return urllib.request.build_opener()\n  \n def _guess_media_encoding(self,source):\n  info=source.byteStream.info()\n  if\"Content-Type\"in info:\n   for param in info.getplist():\n    if param.startswith(\"charset=\"):\n     return param.split(\"=\",1)[1].lower()\n     \n     \nclass DOMInputSource(object):\n __slots__=('byteStream','characterStream','stringData',\n 'encoding','publicId','systemId','baseURI')\n \n def __init__(self):\n  self.byteStream=None\n  self.characterStream=None\n  self.stringData=None\n  self.encoding=None\n  self.publicId=None\n  self.systemId=None\n  self.baseURI=None\n  \n def _get_byteStream(self):\n  return self.byteStream\n def _set_byteStream(self,byteStream):\n  self.byteStream=byteStream\n  \n def _get_characterStream(self):\n  return self.characterStream\n def _set_characterStream(self,characterStream):\n  self.characterStream=characterStream\n  \n def _get_stringData(self):\n  return self.stringData\n def _set_stringData(self,data):\n  self.stringData=data\n  \n def _get_encoding(self):\n  return self.encoding\n def _set_encoding(self,encoding):\n  self.encoding=encoding\n  \n def _get_publicId(self):\n  return self.publicId\n def _set_publicId(self,publicId):\n  self.publicId=publicId\n  \n def _get_systemId(self):\n  return self.systemId\n def _set_systemId(self,systemId):\n  self.systemId=systemId\n  \n def _get_baseURI(self):\n  return self.baseURI\n def _set_baseURI(self,uri):\n  self.baseURI=uri\n  \n  \nclass DOMBuilderFilter:\n ''\n\n \n \n \n \n \n \n \n FILTER_ACCEPT=1\n FILTER_REJECT=2\n FILTER_SKIP=3\n FILTER_INTERRUPT=4\n \n whatToShow=NodeFilter.SHOW_ALL\n \n def _get_whatToShow(self):\n  return self.whatToShow\n  \n def acceptNode(self,element):\n  return self.FILTER_ACCEPT\n  \n def startContainer(self,element):\n  return self.FILTER_ACCEPT\n  \ndel NodeFilter\n\n\nclass DocumentLS:\n ''\n \n async=False\n \n def _get_async(self):\n  return False\n def _set_async(self,async):\n  if async:\n   raise xml.dom.NotSupportedErr(\n   \"asynchronous document loading is not supported\")\n   \n def abort(self):\n \n \n  raise NotImplementedError(\n  \"haven't figured out what this means yet\")\n  \n def load(self,uri):\n  raise NotImplementedError(\"haven't written this yet\")\n  \n def loadXML(self,source):\n  raise NotImplementedError(\"haven't written this yet\")\n  \n def saveXML(self,snode):\n  if snode is None :\n   snode=self\n  elif snode.ownerDocument is not self:\n   raise xml.dom.WrongDocumentErr()\n  return snode.toxml()\n  \n  \nclass DOMImplementationLS:\n MODE_SYNCHRONOUS=1\n MODE_ASYNCHRONOUS=2\n \n def createDOMBuilder(self,mode,schemaType):\n  if schemaType is not None :\n   raise xml.dom.NotSupportedErr(\n   \"schemaType not yet supported\")\n  if mode ==self.MODE_SYNCHRONOUS:\n   return DOMBuilder()\n  if mode ==self.MODE_ASYNCHRONOUS:\n   raise xml.dom.NotSupportedErr(\n   \"asynchronous builders are not supported\")\n  raise ValueError(\"unknown value for mode\")\n  \n def createDOMWriter(self):\n  raise NotImplementedError(\n  \"the writer interface hasn't been written yet!\")\n  \n def createDOMInputSource(self):\n  return DOMInputSource()\n"], "http": [".py", "", 1], "_struct": [".py", "\n\n\n\n\n\n\n\n\n\n\n\"\"\"Functions to convert between Python values and C structs.\nPython strings are used to hold the data representing the C struct\nand also as format strings to describe the layout of data in the C struct.\n\nThe optional first format char indicates byte order, size and alignment:\n @: native order, size & alignment (default)\n =: native order, std. size & alignment\n <: little-endian, std. size & alignment\n >: big-endian, std. size & alignment\n !: same as >\n\nThe remaining chars indicate types of args and must match exactly;\nthese can be preceded by a decimal repeat count:\n   x: pad byte (no data);\n   c:char;\n   b:signed byte;\n   B:unsigned byte;\n   h:short;\n   H:unsigned short;\n   i:int;\n   I:unsigned int;\n   l:long;\n   L:unsigned long;\n   f:float;\n   d:double.\nSpecial cases (preceding decimal count indicates length):\n   s:string (array of char); p: pascal string (with count byte).\nSpecial case (only available in native format):\n   P:an integer type that is wide enough to hold a pointer.\nSpecial case (not in native mode unless 'long long' in platform C):\n   q:long long;\n   Q:unsigned long long\nWhitespace between formats is ignored.\n\nThe variable struct.error is an exception raised on errors.\"\"\"\n\nimport math,sys\n\n\nclass StructError(Exception):\n pass\nerror=StructError\ndef unpack_int(data,index,size,le):\n bytes=[b for b in data[index:index+size]]\n if le =='little':\n  bytes.reverse()\n number=0\n for b in bytes:\n  number=number <<8 |b\n return int(number)\n \ndef unpack_signed_int(data,index,size,le):\n number=unpack_int(data,index,size,le)\n max=2 **(size *8)\n if number >2 **(size *8 -1)-1:\n  number=int(-1 *(max -number))\n return number\n \nINFINITY=1e200 *1e200\nNAN=INFINITY /INFINITY\n\ndef unpack_char(data,index,size,le):\n return data[index:index+size]\n \ndef pack_int(number,size,le):\n x=number\n res=[]\n for i in range(size):\n  res.append(x&0xff)\n  x >>=8\n if le =='big':\n  res.reverse()\n return bytes(res)\n \ndef pack_signed_int(number,size,le):\n if not isinstance(number,int):\n  raise StructError(\"argument for i,I,l,L,q,Q,h,H must be integer\")\n if number >2 **(8 *size -1)-1 or number <-1 *2 **(8 *size -1):\n  raise OverflowError(\"Number:%i too large to convert\"%number)\n return pack_int(number,size,le)\n \ndef pack_unsigned_int(number,size,le):\n if not isinstance(number,int):\n  raise StructError(\"argument for i,I,l,L,q,Q,h,H must be integer\")\n if number <0:\n  raise TypeError(\"can't convert negative long to unsigned\")\n if number >2 **(8 *size)-1:\n  raise OverflowError(\"Number:%i too large to convert\"%number)\n return pack_int(number,size,le)\n \ndef pack_char(char,size,le):\n return bytes(char)\n \ndef isinf(x):\n return x !=0.0 and x /2 ==x\ndef isnan(v):\n return v !=v *1.0 or (v ==1.0 and v ==2.0)\n \ndef pack_float(x,size,le):\n unsigned=float_pack(x,size)\n result=[]\n for i in range(size):\n  result.append((unsigned >>(i *8))&0xFF)\n if le ==\"big\":\n  result.reverse()\n return bytes(result)\n \ndef unpack_float(data,index,size,le):\n binary=[data[i]for i in range(index,index+size)]\n if le ==\"big\":\n  binary.reverse()\n unsigned=0\n for i in range(size):\n  unsigned |=binary[i]<<(i *8)\n return float_unpack(unsigned,size,le)\n \ndef round_to_nearest(x):\n ''\n\n\n\n\n\n\n\n\n \n int_part=int(x)\n frac_part=x -int_part\n if frac_part >0.5 or frac_part ==0.5 and int_part&1 ==1:\n  int_part +=1\n return int_part\n \ndef float_unpack(Q,size,le):\n ''\n \n \n if size ==8:\n  MIN_EXP=-1021\n  MAX_EXP=1024\n  MANT_DIG=53\n  BITS=64\n elif size ==4:\n  MIN_EXP=-125\n  MAX_EXP=128\n  MANT_DIG=24\n  BITS=32\n else :\n  raise ValueError(\"invalid size value\")\n  \n if Q >>BITS:\n  raise ValueError(\"input out of range\")\n  \n  \n sign=Q >>BITS -1\n exp=(Q&((1 <<BITS -1)-(1 <<MANT_DIG -1)))>>MANT_DIG -1\n mant=Q&((1 <<MANT_DIG -1)-1)\n \n if exp ==MAX_EXP -MIN_EXP+2:\n \n  result=float('nan')if mant else float('inf')\n elif exp ==0:\n \n  result=math.ldexp(float(mant),MIN_EXP -MANT_DIG)\n else :\n \n  mant +=1 <<MANT_DIG -1\n  result=math.ldexp(float(mant),exp+MIN_EXP -MANT_DIG -1)\n return -result if sign else result\n \n \ndef float_pack(x,size):\n ''\n \n \n if size ==8:\n  MIN_EXP=-1021\n  MAX_EXP=1024\n  MANT_DIG=53\n  BITS=64\n elif size ==4:\n  MIN_EXP=-125\n  MAX_EXP=128\n  MANT_DIG=24\n  BITS=32\n else :\n  raise ValueError(\"invalid size value\")\n  \n sign=math.copysign(1.0,x)<0.0\n if math.isinf(x):\n  mant=0\n  exp=MAX_EXP -MIN_EXP+2\n elif math.isnan(x):\n  mant=1 <<(MANT_DIG -2)\n  exp=MAX_EXP -MIN_EXP+2\n elif x ==0.0:\n  mant=0\n  exp=0\n else :\n  m,e=math.frexp(abs(x))\n  exp=e -(MIN_EXP -1)\n  if exp >0:\n  \n   mant=round_to_nearest(m *(1 <<MANT_DIG))\n   mant -=1 <<MANT_DIG -1\n  else :\n  \n   if exp+MANT_DIG -1 >=0:\n    mant=round_to_nearest(m *(1 <<exp+MANT_DIG -1))\n   else :\n    mant=0\n   exp=0\n   \n   \n  assert 0 <=mant <=1 <<MANT_DIG -1\n  if mant ==1 <<MANT_DIG -1:\n   mant=0\n   exp +=1\n   \n   \n   \n  if exp >=MAX_EXP -MIN_EXP+2:\n   raise OverflowError(\"float too large to pack in this format\")\n   \n   \n assert 0 <=mant <1 <<MANT_DIG -1\n assert 0 <=exp <=MAX_EXP -MIN_EXP+2\n assert 0 <=sign <=1\n return ((sign <<BITS -1)|(exp <<MANT_DIG -1))|mant\n \n \nbig_endian_format={\n'x':{'size':1,'alignment':0,'pack':None ,'unpack':None },\n'b':{'size':1,'alignment':0,'pack':pack_signed_int,'unpack':unpack_signed_int},\n'B':{'size':1,'alignment':0,'pack':pack_unsigned_int,'unpack':unpack_int},\n'c':{'size':1,'alignment':0,'pack':pack_char,'unpack':unpack_char},\n's':{'size':1,'alignment':0,'pack':None ,'unpack':None },\n'p':{'size':1,'alignment':0,'pack':None ,'unpack':None },\n'h':{'size':2,'alignment':0,'pack':pack_signed_int,'unpack':unpack_signed_int},\n'H':{'size':2,'alignment':0,'pack':pack_unsigned_int,'unpack':unpack_int},\n'i':{'size':4,'alignment':0,'pack':pack_signed_int,'unpack':unpack_signed_int},\n'I':{'size':4,'alignment':0,'pack':pack_unsigned_int,'unpack':unpack_int},\n'l':{'size':4,'alignment':0,'pack':pack_signed_int,'unpack':unpack_signed_int},\n'L':{'size':4,'alignment':0,'pack':pack_unsigned_int,'unpack':unpack_int},\n'q':{'size':8,'alignment':0,'pack':pack_signed_int,'unpack':unpack_signed_int},\n'Q':{'size':8,'alignment':0,'pack':pack_unsigned_int,'unpack':unpack_int},\n'f':{'size':4,'alignment':0,'pack':pack_float,'unpack':unpack_float},\n'd':{'size':8,'alignment':0,'pack':pack_float,'unpack':unpack_float},\n}\ndefault=big_endian_format\nformatmode={'<':(default,'little'),\n'>':(default,'big'),\n'!':(default,'big'),\n'=':(default,sys.byteorder),\n'@':(default,sys.byteorder)\n}\n\ndef getmode(fmt):\n try :\n  formatdef,endianness=formatmode[fmt[0]]\n  alignment=fmt[0]not in formatmode or fmt[0]=='@'\n  index=1\n except (IndexError,KeyError):\n  formatdef,endianness=formatmode['@']\n  alignment=True\n  index=0\n return formatdef,endianness,index,alignment\n \ndef getNum(fmt,i):\n num=None\n cur=fmt[i]\n while ('0'<=cur)and (cur <='9'):\n  if num ==None :\n   num=int(cur)\n  else :\n   num=10 *num+int(cur)\n  i +=1\n  cur=fmt[i]\n return num,i\n \ndef calcsize(fmt):\n ''\n\n \n \n formatdef,endianness,i,alignment=getmode(fmt)\n num=0\n result=0\n while i <len(fmt):\n  num,i=getNum(fmt,i)\n  cur=fmt[i]\n  try :\n   format=formatdef[cur]\n  except KeyError:\n   raise StructError(\"%s is not a valid format\"%cur)\n  if num !=None :\n   result +=num *format['size']\n  else :\n  \n  \n   if alignment:\n    result +=format['size']-result %format['size']\n   result +=format['size']\n  num=0\n  i +=1\n return result\n \ndef pack(fmt,*args):\n ''\n\n \n formatdef,endianness,i,alignment=getmode(fmt)\n args=list(args)\n n_args=len(args)\n result=[]\n while i <len(fmt):\n  num,i=getNum(fmt,i)\n  cur=fmt[i]\n  try :\n   format=formatdef[cur]\n  except KeyError:\n   raise StructError(\"%s is not a valid format\"%cur)\n  if num ==None :\n   num_s=0\n   num=1\n  else :\n   num_s=num\n   \n  if cur =='x':\n   result +=[b'\\0'*num]\n  elif cur =='s':\n   if isinstance(args[0],bytes):\n    padding=num -len(args[0])\n    result +=[args[0][:num]+b'\\0'*padding]\n    args.pop(0)\n   else :\n    raise StructError(\"arg for string format not a string\")\n  elif cur =='p':\n   if isinstance(args[0],bytes):\n    padding=num -len(args[0])-1\n    \n    if padding >0:\n     result +=[bytes([len(args[0])])+args[0][:num -1]+b'\\0'*padding]\n    else :\n     if num <255:\n      result +=[bytes([num -1])+args[0][:num -1]]\n     else :\n      result +=[bytes([255])+args[0][:num -1]]\n    args.pop(0)\n   else :\n    raise StructError(\"arg for string format not a string\")\n    \n  else :\n   if len(args)<num:\n    raise StructError(\"insufficient arguments to pack\")\n   for var in args[:num]:\n   \n    if len(result)and alignment:\n     padding=format['size']-len(result)%format['size']\n     result +=[bytes([0])]*padding\n    result +=[format['pack'](var,format['size'],endianness)]\n   args=args[num:]\n  num=None\n  i +=1\n if len(args)!=0:\n  raise StructError(\"too many arguments for pack format\")\n return b''.join(result)\n \ndef unpack(fmt,data):\n ''\n\n\n \n formatdef,endianness,i,alignment=getmode(fmt)\n j=0\n num=0\n result=[]\n length=calcsize(fmt)\n if length !=len(data):\n  raise StructError(\"unpack str size does not match format\")\n while i <len(fmt):\n  num,i=getNum(fmt,i)\n  cur=fmt[i]\n  i +=1\n  try :\n   format=formatdef[cur]\n  except KeyError:\n   raise StructError(\"%s is not a valid format\"%cur)\n   \n  if not num:\n   num=1\n   \n  if cur =='x':\n   j +=num\n  elif cur =='s':\n   result.append(data[j:j+num])\n   j +=num\n  elif cur =='p':\n   n=data[j]\n   if n >=num:\n    n=num -1\n   result.append(data[j+1:j+n+1])\n   j +=num\n  else :\n  \n   if j >0 and alignment:\n    padding=format['size']-j %format['size']\n    j +=padding\n   for n in range(num):\n    result +=[format['unpack'](data,j,format['size'],endianness)]\n    j +=format['size']\n    \n return tuple(result)\n \ndef pack_into(fmt,buf,offset,*args):\n data=pack(fmt,*args)\n buf[offset:offset+len(data)]=data\n \ndef unpack_from(fmt,buf,offset=0):\n size=calcsize(fmt)\n data=buf[offset:offset+size]\n if len(data)!=size:\n  raise error(\"unpack_from requires a buffer of at least %d bytes\"\n  %(size,))\n return unpack(fmt,data)\n \ndef _clearcache():\n ''\n \n \nif __name__ =='__main__':\n t=pack('Bf',1,2)\n print(t,len(t))\n print(unpack('Bf',t))\n print(calcsize('Bf'))\n \n"], "encodings.iso8859_7": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-7',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u2018'\n'\\u2019'\n'\\xa3'\n'\\u20ac'\n'\\u20af'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\u037a'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\ufffe'\n'\\u2015'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\u0384'\n'\\u0385'\n'\\u0386'\n'\\xb7'\n'\\u0388'\n'\\u0389'\n'\\u038a'\n'\\xbb'\n'\\u038c'\n'\\xbd'\n'\\u038e'\n'\\u038f'\n'\\u0390'\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0398'\n'\\u0399'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u039e'\n'\\u039f'\n'\\u03a0'\n'\\u03a1'\n'\\ufffe'\n'\\u03a3'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03aa'\n'\\u03ab'\n'\\u03ac'\n'\\u03ad'\n'\\u03ae'\n'\\u03af'\n'\\u03b0'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u03b4'\n'\\u03b5'\n'\\u03b6'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c2'\n'\\u03c3'\n'\\u03c4'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\u03c8'\n'\\u03c9'\n'\\u03ca'\n'\\u03cb'\n'\\u03cc'\n'\\u03cd'\n'\\u03ce'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "weakref": [".py", "''\n\n\n\n\n\n\n\n\n\n\nfrom _weakref import (\ngetweakrefcount,\ngetweakrefs,\nref,\nproxy,\nCallableProxyType,\nProxyType,\nReferenceType)\n\nfrom _weakrefset import WeakSet,_IterationGuard\n\nimport collections\n\nProxyTypes=(ProxyType,CallableProxyType)\n\n__all__=[\"ref\",\"proxy\",\"getweakrefcount\",\"getweakrefs\",\n\"WeakKeyDictionary\",\"ReferenceType\",\"ProxyType\",\n\"CallableProxyType\",\"ProxyTypes\",\"WeakValueDictionary\",\n\"WeakSet\"]\n\n\nclass WeakValueDictionary(collections.MutableMapping):\n ''\n\n\n\n \n \n \n \n \n \n \n def __init__(self,*args,**kw):\n  def remove(wr,selfref=ref(self)):\n   self=selfref()\n   if self is not None :\n    if self._iterating:\n     self._pending_removals.append(wr.key)\n    else :\n     del self.data[wr.key]\n  self._remove=remove\n  \n  self._pending_removals=[]\n  self._iterating=set()\n  self.data=d={}\n  self.update(*args,**kw)\n  \n def _commit_removals(self):\n  l=self._pending_removals\n  d=self.data\n  \n  \n  while l:\n   del d[l.pop()]\n   \n def __getitem__(self,key):\n  o=self.data[key]()\n  if o is None :\n   raise KeyError(key)\n  else :\n   return o\n   \n def __delitem__(self,key):\n  if self._pending_removals:\n   self._commit_removals()\n  del self.data[key]\n  \n def __len__(self):\n  return len(self.data)-len(self._pending_removals)\n  \n def __contains__(self,key):\n  try :\n   o=self.data[key]()\n  except KeyError:\n   return False\n  return o is not None\n  \n def __repr__(self):\n  return\"<WeakValueDictionary at %s>\"%id(self)\n  \n def __setitem__(self,key,value):\n  if self._pending_removals:\n   self._commit_removals()\n  self.data[key]=KeyedRef(value,self._remove,key)\n  \n def copy(self):\n  new=WeakValueDictionary()\n  for key,wr in self.data.items():\n   o=wr()\n   if o is not None :\n    new[key]=o\n  return new\n  \n __copy__=copy\n \n def __deepcopy__(self,memo):\n  from copy import deepcopy\n  new=self.__class__()\n  for key,wr in self.data.items():\n   o=wr()\n   if o is not None :\n    new[deepcopy(key,memo)]=o\n  return new\n  \n def get(self,key,default=None ):\n  try :\n   wr=self.data[key]\n  except KeyError:\n   return default\n  else :\n   o=wr()\n   if o is None :\n   \n    return default\n   else :\n    return o\n    \n def items(self):\n  with _IterationGuard(self):\n   for k,wr in self.data.items():\n    v=wr()\n    if v is not None :\n     yield k,v\n     \n def keys(self):\n  with _IterationGuard(self):\n   for k,wr in self.data.items():\n    if wr()is not None :\n     yield k\n     \n __iter__=keys\n \n def itervaluerefs(self):\n  ''\n\n\n\n\n\n\n\n  \n  with _IterationGuard(self):\n   for wr in self.data.values():\n    yield wr\n    \n def values(self):\n  with _IterationGuard(self):\n   for wr in self.data.values():\n    obj=wr()\n    if obj is not None :\n     yield obj\n     \n def popitem(self):\n  if self._pending_removals:\n   self._commit_removals()\n  while True :\n   key,wr=self.data.popitem()\n   o=wr()\n   if o is not None :\n    return key,o\n    \n def pop(self,key,*args):\n  if self._pending_removals:\n   self._commit_removals()\n  try :\n   o=self.data.pop(key)()\n  except KeyError:\n   if args:\n    return args[0]\n   raise\n  if o is None :\n   raise KeyError(key)\n  else :\n   return o\n   \n def setdefault(self,key,default=None ):\n  try :\n   wr=self.data[key]\n  except KeyError:\n   if self._pending_removals:\n    self._commit_removals()\n   self.data[key]=KeyedRef(default,self._remove,key)\n   return default\n  else :\n   return wr()\n   \n def update(self,dict=None ,**kwargs):\n  if self._pending_removals:\n   self._commit_removals()\n  d=self.data\n  if dict is not None :\n   if not hasattr(dict,\"items\"):\n    dict=type({})(dict)\n   for key,o in dict.items():\n    d[key]=KeyedRef(o,self._remove,key)\n  if len(kwargs):\n   self.update(kwargs)\n   \n def valuerefs(self):\n  ''\n\n\n\n\n\n\n\n  \n  return list(self.data.values())\n  \n  \nclass KeyedRef(ref):\n ''\n\n\n\n\n\n\n \n \n __slots__=\"key\",\n \n def __new__(type,ob,callback,key):\n  self=ref.__new__(type,ob,callback)\n  self.key=key\n  return self\n  \n def __init__(self,ob,callback,key):\n  super().__init__(ob,callback)\n  \n  \nclass WeakKeyDictionary(collections.MutableMapping):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,dict=None ):\n  self.data={}\n  def remove(k,selfref=ref(self)):\n   self=selfref()\n   if self is not None :\n    if self._iterating:\n     self._pending_removals.append(k)\n    else :\n     del self.data[k]\n  self._remove=remove\n  \n  self._pending_removals=[]\n  self._iterating=set()\n  if dict is not None :\n   self.update(dict)\n   \n def _commit_removals(self):\n \n \n \n \n  l=self._pending_removals\n  d=self.data\n  while l:\n   try :\n    del d[l.pop()]\n   except KeyError:\n    pass\n    \n def __delitem__(self,key):\n  del self.data[ref(key)]\n  \n def __getitem__(self,key):\n  return self.data[ref(key)]\n  \n def __len__(self):\n  return len(self.data)-len(self._pending_removals)\n  \n def __repr__(self):\n  return\"<WeakKeyDictionary at %s>\"%id(self)\n  \n def __setitem__(self,key,value):\n  self.data[ref(key,self._remove)]=value\n  \n def copy(self):\n  new=WeakKeyDictionary()\n  for key,value in self.data.items():\n   o=key()\n   if o is not None :\n    new[o]=value\n  return new\n  \n __copy__=copy\n \n def __deepcopy__(self,memo):\n  from copy import deepcopy\n  new=self.__class__()\n  for key,value in self.data.items():\n   o=key()\n   if o is not None :\n    new[o]=deepcopy(value,memo)\n  return new\n  \n def get(self,key,default=None ):\n  return self.data.get(ref(key),default)\n  \n def __contains__(self,key):\n  try :\n   wr=ref(key)\n  except TypeError:\n   return False\n  return wr in self.data\n  \n def items(self):\n  with _IterationGuard(self):\n   for wr,value in self.data.items():\n    key=wr()\n    if key is not None :\n     yield key,value\n     \n def keys(self):\n  with _IterationGuard(self):\n   for wr in self.data:\n    obj=wr()\n    if obj is not None :\n     yield obj\n     \n __iter__=keys\n \n def values(self):\n  with _IterationGuard(self):\n   for wr,value in self.data.items():\n    if wr()is not None :\n     yield value\n     \n def keyrefs(self):\n  ''\n\n\n\n\n\n\n\n  \n  return list(self.data)\n  \n def popitem(self):\n  while True :\n   key,value=self.data.popitem()\n   o=key()\n   if o is not None :\n    return o,value\n    \n def pop(self,key,*args):\n  return self.data.pop(ref(key),*args)\n  \n def setdefault(self,key,default=None ):\n  return self.data.setdefault(ref(key,self._remove),default)\n  \n def update(self,dict=None ,**kwargs):\n  d=self.data\n  if dict is not None :\n   if not hasattr(dict,\"items\"):\n    dict=type({})(dict)\n   for key,value in dict.items():\n    d[ref(key,self._remove)]=value\n  if len(kwargs):\n   self.update(kwargs)\n"], "xml.sax": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfrom .xmlreader import InputSource\nfrom .handler import ContentHandler,ErrorHandler\nfrom ._exceptions import SAXException,SAXNotRecognizedException,SAXParseException,SAXNotSupportedException,SAXReaderNotAvailable\n\n\ndef parse(source,handler,errorHandler=ErrorHandler()):\n parser=make_parser()\n parser.setContentHandler(handler)\n parser.setErrorHandler(errorHandler)\n parser.parse(source)\n \ndef parseString(string,handler,errorHandler=ErrorHandler()):\n from io import BytesIO\n \n if errorHandler is None :\n  errorHandler=ErrorHandler()\n parser=make_parser()\n parser.setContentHandler(handler)\n parser.setErrorHandler(errorHandler)\n \n inpsrc=InputSource()\n inpsrc.setByteStream(BytesIO(string))\n parser.parse(inpsrc)\n \n \n \n \ndefault_parser_list=[\"xml.sax.expatreader\"]\n\n\n_false=0\nif _false:\n import xml.sax.expatreader\n \nimport os,sys\n\n\ndel os\n\n_key=\"python.xml.sax.parser\"\nif sys.platform[:4]==\"java\"and sys.registry.containsKey(_key):\n default_parser_list=sys.registry.getProperty(_key).split(\",\")\n \n \ndef make_parser(parser_list=[]):\n ''\n\n\n\n\n \n \n for parser_name in parser_list+default_parser_list:\n  try :\n   return _create_parser(parser_name)\n  except ImportError as e:\n   import sys\n   if parser_name in sys.modules:\n   \n   \n    raise\n  except SAXReaderNotAvailable:\n  \n  \n   pass\n   \n raise SAXReaderNotAvailable(\"No parsers found\",None )\n \n \n \nif sys.platform[:4]==\"java\":\n def _create_parser(parser_name):\n  from org.python.core import imp\n  drv_module=imp.importName(parser_name,0,globals())\n  return drv_module.create_parser()\n  \nelse :\n def _create_parser(parser_name):\n  drv_module=__import__(parser_name,{},{},['create_parser'])\n  return drv_module.create_parser()\n  \ndel sys\n", 1], "browser": [".py", "import javascript\n\nfrom _browser import *\n\nfrom .local_storage import LocalStorage\nfrom .session_storage import SessionStorage\nfrom .object_storage import ObjectStorage\n\nWebSocket=javascript.JSConstructor(window.WebSocket)", 1], "browser.ajax": [".py", "import _ajax\n\nfrom browser import window,timer\nfrom javascript import JSConstructor\n\nreadyStates={\n0:\"uninitialized\",\n1:\"open\",\n2:\"sent\",\n\n3:\"receiving\",\n\n4:\"loaded\"\n}\n\nclass ajax:\n\n def __init__(self):\n  self.xmlhttp=JSConstructor(window.XMLHttpRequest)()\n  self.xmlhttp.onreadystatechange=self.state_change\n  self.bindings={}\n  self.timer=None\n  \n def state_change(self,req):\n \n \n \n  event=readyStates[self.xmlhttp.readyState]\n  \n  \n  if event in self.bindings:\n   self.bindings[event](self.xmlhttp)\n   \n def open(self,method,url,async=True ):\n  self.xmlhttp.open(method,url,async)\n  \n def bind(self,event,callback):\n \n  if event =='complete':\n   event='loaded'\n   \n  if not event in readyStates.values():\n   raise ValueError('event must be one of %s'\n   %str(list(readyStates.values())))\n   \n  def func(obj):\n   if event ==\"loaded\"and self.timer is not None :\n    timer.clear_timeout(self.timer)\n    self.timer=None\n   obj.text=obj.responseText\n   obj.xml=obj.responseXML\n   try :\n    return callback(obj)\n   except Exception as exc:\n    import sys\n    msg=exc.__name__\n    if exc.args:\n     msg +=': %s'%exc.args[0]\n    msg +='\\n'+exc.info\n    sys.stderr.write(msg)\n    \n  self.bindings[event]=func\n  \n def send(self,data=None ):\n  if data is None :\n   self.xmlhttp.send()\n  elif isinstance(data,str):\n   self.xmlhttp.send(data)\n  elif isinstance(data,dict):\n   self.xmlhttp.send(_ajax.urlencode(data))\n  else :\n   raise TypeError('send argument must be str or dict')\n   \n def set_header(self,key,value):\n  self.xmlhttp.setRequestHeader(key,value)\n  \n def set_timeout(self,seconds,func):\n  def callback():\n   self.xmlhttp.abort()\n   timer.clear_timeout(self.timer)\n   self.timer=None\n   func()\n  self.timer=timer.set_timeout(callback,seconds *1000)"], "encodings.cp437": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp437',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00a2,\n0x009c:0x00a3,\n0x009d:0x00a5,\n0x009e:0x20a7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\u20a7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x009b,\n0x00a3:0x009c,\n0x00a5:0x009d,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c9:0x0090,\n0x00d1:0x00a5,\n0x00d6:0x0099,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00ff:0x0098,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "encodings.cp737": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp737',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0391,\n0x0081:0x0392,\n0x0082:0x0393,\n0x0083:0x0394,\n0x0084:0x0395,\n0x0085:0x0396,\n0x0086:0x0397,\n0x0087:0x0398,\n0x0088:0x0399,\n0x0089:0x039a,\n0x008a:0x039b,\n0x008b:0x039c,\n0x008c:0x039d,\n0x008d:0x039e,\n0x008e:0x039f,\n0x008f:0x03a0,\n0x0090:0x03a1,\n0x0091:0x03a3,\n0x0092:0x03a4,\n0x0093:0x03a5,\n0x0094:0x03a6,\n0x0095:0x03a7,\n0x0096:0x03a8,\n0x0097:0x03a9,\n0x0098:0x03b1,\n0x0099:0x03b2,\n0x009a:0x03b3,\n0x009b:0x03b4,\n0x009c:0x03b5,\n0x009d:0x03b6,\n0x009e:0x03b7,\n0x009f:0x03b8,\n0x00a0:0x03b9,\n0x00a1:0x03ba,\n0x00a2:0x03bb,\n0x00a3:0x03bc,\n0x00a4:0x03bd,\n0x00a5:0x03be,\n0x00a6:0x03bf,\n0x00a7:0x03c0,\n0x00a8:0x03c1,\n0x00a9:0x03c3,\n0x00aa:0x03c2,\n0x00ab:0x03c4,\n0x00ac:0x03c5,\n0x00ad:0x03c6,\n0x00ae:0x03c7,\n0x00af:0x03c8,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03c9,\n0x00e1:0x03ac,\n0x00e2:0x03ad,\n0x00e3:0x03ae,\n0x00e4:0x03ca,\n0x00e5:0x03af,\n0x00e6:0x03cc,\n0x00e7:0x03cd,\n0x00e8:0x03cb,\n0x00e9:0x03ce,\n0x00ea:0x0386,\n0x00eb:0x0388,\n0x00ec:0x0389,\n0x00ed:0x038a,\n0x00ee:0x038c,\n0x00ef:0x038e,\n0x00f0:0x038f,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x03aa,\n0x00f5:0x03ab,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0398'\n'\\u0399'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u039e'\n'\\u039f'\n'\\u03a0'\n'\\u03a1'\n'\\u03a3'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u03b4'\n'\\u03b5'\n'\\u03b6'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c3'\n'\\u03c2'\n'\\u03c4'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\u03c8'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03c9'\n'\\u03ac'\n'\\u03ad'\n'\\u03ae'\n'\\u03ca'\n'\\u03af'\n'\\u03cc'\n'\\u03cd'\n'\\u03cb'\n'\\u03ce'\n'\\u0386'\n'\\u0388'\n'\\u0389'\n'\\u038a'\n'\\u038c'\n'\\u038e'\n'\\u038f'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u03aa'\n'\\u03ab'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b7:0x00fa,\n0x00f7:0x00f6,\n0x0386:0x00ea,\n0x0388:0x00eb,\n0x0389:0x00ec,\n0x038a:0x00ed,\n0x038c:0x00ee,\n0x038e:0x00ef,\n0x038f:0x00f0,\n0x0391:0x0080,\n0x0392:0x0081,\n0x0393:0x0082,\n0x0394:0x0083,\n0x0395:0x0084,\n0x0396:0x0085,\n0x0397:0x0086,\n0x0398:0x0087,\n0x0399:0x0088,\n0x039a:0x0089,\n0x039b:0x008a,\n0x039c:0x008b,\n0x039d:0x008c,\n0x039e:0x008d,\n0x039f:0x008e,\n0x03a0:0x008f,\n0x03a1:0x0090,\n0x03a3:0x0091,\n0x03a4:0x0092,\n0x03a5:0x0093,\n0x03a6:0x0094,\n0x03a7:0x0095,\n0x03a8:0x0096,\n0x03a9:0x0097,\n0x03aa:0x00f4,\n0x03ab:0x00f5,\n0x03ac:0x00e1,\n0x03ad:0x00e2,\n0x03ae:0x00e3,\n0x03af:0x00e5,\n0x03b1:0x0098,\n0x03b2:0x0099,\n0x03b3:0x009a,\n0x03b4:0x009b,\n0x03b5:0x009c,\n0x03b6:0x009d,\n0x03b7:0x009e,\n0x03b8:0x009f,\n0x03b9:0x00a0,\n0x03ba:0x00a1,\n0x03bb:0x00a2,\n0x03bc:0x00a3,\n0x03bd:0x00a4,\n0x03be:0x00a5,\n0x03bf:0x00a6,\n0x03c0:0x00a7,\n0x03c1:0x00a8,\n0x03c2:0x00aa,\n0x03c3:0x00a9,\n0x03c4:0x00ab,\n0x03c5:0x00ac,\n0x03c6:0x00ad,\n0x03c7:0x00ae,\n0x03c8:0x00af,\n0x03c9:0x00e0,\n0x03ca:0x00e4,\n0x03cb:0x00e8,\n0x03cc:0x00e6,\n0x03cd:0x00e7,\n0x03ce:0x00e9,\n0x207f:0x00fc,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x2248:0x00f7,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "_dummy_thread": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=['error','start_new_thread','exit','get_ident','allocate_lock',\n'interrupt_main','LockType']\n\n\nTIMEOUT_MAX=2 **31\n\n\n\n\n\n\nerror=RuntimeError\n\ndef start_new_thread(function,args,kwargs={}):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if type(args)!=type(tuple()):\n  raise TypeError(\"2nd arg must be a tuple\")\n if type(kwargs)!=type(dict()):\n  raise TypeError(\"3rd arg must be a dict\")\n global _main\n _main=False\n try :\n  function(*args,**kwargs)\n except SystemExit:\n  pass\n except :\n  import traceback\n  traceback.print_exc()\n _main=True\n global _interrupt\n if _interrupt:\n  _interrupt=False\n  raise KeyboardInterrupt\n  \ndef exit():\n ''\n raise SystemExit\n \ndef get_ident():\n ''\n\n\n\n\n \n return -1\n \ndef allocate_lock():\n ''\n return LockType()\n \ndef stack_size(size=None ):\n ''\n if size is not None :\n  raise error(\"setting thread stack size not supported\")\n return 0\n \nclass LockType(object):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self):\n  self.locked_status=False\n  \n def acquire(self,waitflag=None ,timeout=-1):\n  ''\n\n\n\n\n\n\n\n\n  \n  if waitflag is None or waitflag:\n   self.locked_status=True\n   return True\n  else :\n   if not self.locked_status:\n    self.locked_status=True\n    return True\n   else :\n    if timeout >0:\n     import time\n     time.sleep(timeout)\n    return False\n    \n __enter__=acquire\n \n def __exit__(self,typ,val,tb):\n  self.release()\n  \n def release(self):\n  ''\n  \n  \n  if not self.locked_status:\n   raise error\n  self.locked_status=False\n  return True\n  \n def locked(self):\n  return self.locked_status\n  \n  \n_interrupt=False\n\n_main=True\n\ndef interrupt_main():\n ''\n \n if _main:\n  raise KeyboardInterrupt\n else :\n  global _interrupt\n  _interrupt=True\n"], "encodings.cp862": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp862',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x05d0,\n0x0081:0x05d1,\n0x0082:0x05d2,\n0x0083:0x05d3,\n0x0084:0x05d4,\n0x0085:0x05d5,\n0x0086:0x05d6,\n0x0087:0x05d7,\n0x0088:0x05d8,\n0x0089:0x05d9,\n0x008a:0x05da,\n0x008b:0x05db,\n0x008c:0x05dc,\n0x008d:0x05dd,\n0x008e:0x05de,\n0x008f:0x05df,\n0x0090:0x05e0,\n0x0091:0x05e1,\n0x0092:0x05e2,\n0x0093:0x05e3,\n0x0094:0x05e4,\n0x0095:0x05e5,\n0x0096:0x05e6,\n0x0097:0x05e7,\n0x0098:0x05e8,\n0x0099:0x05e9,\n0x009a:0x05ea,\n0x009b:0x00a2,\n0x009c:0x00a3,\n0x009d:0x00a5,\n0x009e:0x20a7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\u20a7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x009b,\n0x00a3:0x009c,\n0x00a5:0x009d,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00d1:0x00a5,\n0x00df:0x00e1,\n0x00e1:0x00a0,\n0x00ed:0x00a1,\n0x00f1:0x00a4,\n0x00f3:0x00a2,\n0x00f7:0x00f6,\n0x00fa:0x00a3,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x05d0:0x0080,\n0x05d1:0x0081,\n0x05d2:0x0082,\n0x05d3:0x0083,\n0x05d4:0x0084,\n0x05d5:0x0085,\n0x05d6:0x0086,\n0x05d7:0x0087,\n0x05d8:0x0088,\n0x05d9:0x0089,\n0x05da:0x008a,\n0x05db:0x008b,\n0x05dc:0x008c,\n0x05dd:0x008d,\n0x05de:0x008e,\n0x05df:0x008f,\n0x05e0:0x0090,\n0x05e1:0x0091,\n0x05e2:0x0092,\n0x05e3:0x0093,\n0x05e4:0x0094,\n0x05e5:0x0095,\n0x05e6:0x0096,\n0x05e7:0x0097,\n0x05e8:0x0098,\n0x05e9:0x0099,\n0x05ea:0x009a,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "uuid": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__author__='Ka-Ping Yee <ping@zesty.ca>'\n\nRESERVED_NCS,RFC_4122,RESERVED_MICROSOFT,RESERVED_FUTURE=[\n'reserved for NCS compatibility','specified in RFC 4122',\n'reserved for Microsoft compatibility','reserved for future definition']\n\nint_=int\nbytes_=bytes\n\nclass UUID(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,hex=None ,bytes=None ,bytes_le=None ,fields=None ,\n int=None ,version=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if [hex,bytes,bytes_le,fields,int].count(None )!=4:\n   raise TypeError('need one of hex, bytes, bytes_le, fields, or int')\n  if hex is not None :\n   hex=hex.replace('urn:','').replace('uuid:','')\n   hex=hex.strip('{}').replace('-','')\n   if len(hex)!=32:\n    raise ValueError('badly formed hexadecimal UUID string')\n   int=int_(hex,16)\n  if bytes_le is not None :\n   if len(bytes_le)!=16:\n    raise ValueError('bytes_le is not a 16-char string')\n   bytes=(bytes_(reversed(bytes_le[0:4]))+\n   bytes_(reversed(bytes_le[4:6]))+\n   bytes_(reversed(bytes_le[6:8]))+\n   bytes_le[8:])\n  if bytes is not None :\n   if len(bytes)!=16:\n    raise ValueError('bytes is not a 16-char string')\n   assert isinstance(bytes,bytes_),repr(bytes)\n   int=int_.from_bytes(bytes,byteorder='big')\n  if fields is not None :\n   if len(fields)!=6:\n    raise ValueError('fields is not a 6-tuple')\n   (time_low,time_mid,time_hi_version,\n   clock_seq_hi_variant,clock_seq_low,node)=fields\n   if not 0 <=time_low <1 <<32:\n    raise ValueError('field 1 out of range (need a 32-bit value)')\n   if not 0 <=time_mid <1 <<16:\n    raise ValueError('field 2 out of range (need a 16-bit value)')\n   if not 0 <=time_hi_version <1 <<16:\n    raise ValueError('field 3 out of range (need a 16-bit value)')\n   if not 0 <=clock_seq_hi_variant <1 <<8:\n    raise ValueError('field 4 out of range (need an 8-bit value)')\n   if not 0 <=clock_seq_low <1 <<8:\n    raise ValueError('field 5 out of range (need an 8-bit value)')\n   if not 0 <=node <1 <<48:\n    raise ValueError('field 6 out of range (need a 48-bit value)')\n   clock_seq=(clock_seq_hi_variant <<8)|clock_seq_low\n   int=((time_low <<96)|(time_mid <<80)|\n   (time_hi_version <<64)|(clock_seq <<48)|node)\n  if int is not None :\n   if not 0 <=int <1 <<128:\n    raise ValueError('int is out of range (need a 128-bit value)')\n  if version is not None :\n   if not 1 <=version <=5:\n    raise ValueError('illegal version number')\n    \n   int &=~(0xc000 <<48)\n   int |=0x8000 <<48\n   \n   int &=~(0xf000 <<64)\n   int |=version <<76\n  self.__dict__['int']=int\n  \n def __eq__(self,other):\n  if isinstance(other,UUID):\n   return self.int ==other.int\n  return NotImplemented\n  \n def __ne__(self,other):\n  if isinstance(other,UUID):\n   return self.int !=other.int\n  return NotImplemented\n  \n  \n  \n  \n def __lt__(self,other):\n  if isinstance(other,UUID):\n   return self.int <other.int\n  return NotImplemented\n  \n def __gt__(self,other):\n  if isinstance(other,UUID):\n   return self.int >other.int\n  return NotImplemented\n  \n def __le__(self,other):\n  if isinstance(other,UUID):\n   return self.int <=other.int\n  return NotImplemented\n  \n def __ge__(self,other):\n  if isinstance(other,UUID):\n   return self.int >=other.int\n  return NotImplemented\n  \n def __hash__(self):\n  return hash(self.int)\n  \n def __int__(self):\n  return self.int\n  \n def __repr__(self):\n  return'UUID(%r)'%str(self)\n  \n def __setattr__(self,name,value):\n  raise TypeError('UUID objects are immutable')\n  \n def __str__(self):\n  hex='%032x'%self.int\n  return'%s-%s-%s-%s-%s'%(\n  hex[:8],hex[8:12],hex[12:16],hex[16:20],hex[20:])\n  \n @property\n def bytes(self):\n  bytes=bytearray()\n  for shift in range(0,128,8):\n   bytes.insert(0,(self.int >>shift)&0xff)\n  return bytes_(bytes)\n  \n @property\n def bytes_le(self):\n  bytes=self.bytes\n  return (bytes_(reversed(bytes[0:4]))+\n  bytes_(reversed(bytes[4:6]))+\n  bytes_(reversed(bytes[6:8]))+\n  bytes[8:])\n  \n @property\n def fields(self):\n  return (self.time_low,self.time_mid,self.time_hi_version,\n  self.clock_seq_hi_variant,self.clock_seq_low,self.node)\n  \n @property\n def time_low(self):\n  return self.int >>96\n  \n @property\n def time_mid(self):\n  return (self.int >>80)&0xffff\n  \n @property\n def time_hi_version(self):\n  return (self.int >>64)&0xffff\n  \n @property\n def clock_seq_hi_variant(self):\n  return (self.int >>56)&0xff\n  \n @property\n def clock_seq_low(self):\n  return (self.int >>48)&0xff\n  \n @property\n def time(self):\n  return (((self.time_hi_version&0x0fff)<<48)|\n  (self.time_mid <<32)|self.time_low)\n  \n @property\n def clock_seq(self):\n  return (((self.clock_seq_hi_variant&0x3f)<<8)|\n  self.clock_seq_low)\n  \n @property\n def node(self):\n  return self.int&0xffffffffffff\n  \n @property\n def hex(self):\n  return'%032x'%self.int\n  \n @property\n def urn(self):\n  return'urn:uuid:'+str(self)\n  \n @property\n def variant(self):\n  if not self.int&(0x8000 <<48):\n   return RESERVED_NCS\n  elif not self.int&(0x4000 <<48):\n   return RFC_4122\n  elif not self.int&(0x2000 <<48):\n   return RESERVED_MICROSOFT\n  else :\n   return RESERVED_FUTURE\n   \n @property\n def version(self):\n \n  if self.variant ==RFC_4122:\n   return int((self.int >>76)&0xf)\n   \ndef _find_mac(command,args,hw_identifiers,get_index):\n import os,shutil\n executable=shutil.which(command)\n if executable is None :\n  path=os.pathsep.join(('/sbin','/usr/sbin'))\n  executable=shutil.which(command,path=path)\n  if executable is None :\n   return None\n   \n try :\n \n \n \n  cmd='LC_ALL=C %s %s 2>/dev/null'%(executable,args)\n  with os.popen(cmd)as pipe:\n   for line in pipe:\n    words=line.lower().split()\n    for i in range(len(words)):\n     if words[i]in hw_identifiers:\n      try :\n       return int(\n       words[get_index(i)].replace(':',''),16)\n      except (ValueError,IndexError):\n      \n      \n      \n      \n      \n       pass\n except OSError:\n  pass\n  \ndef _ifconfig_getnode():\n ''\n \n \n for args in ('','-a','-av'):\n  mac=_find_mac('ifconfig',args,['hwaddr','ether'],lambda i:i+1)\n  if mac:\n   return mac\n   \n import socket\n ip_addr=socket.gethostbyname(socket.gethostname())\n \n \n mac=_find_mac('arp','-an',[ip_addr],lambda i:-1)\n if mac:\n  return mac\n  \n  \n mac=_find_mac('lanscan','-ai',['lan0'],lambda i:0)\n if mac:\n  return mac\n  \n return None\n \ndef _ipconfig_getnode():\n ''\n import os,re\n dirs=['',r'c:\\windows\\system32',r'c:\\winnt\\system32']\n try :\n  import ctypes\n  buffer=ctypes.create_string_buffer(300)\n  ctypes.windll.kernel32.GetSystemDirectoryA(buffer,300)\n  dirs.insert(0,buffer.value.decode('mbcs'))\n except :\n  pass\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \ndef _netbios_getnode():\n ''\n \n import win32wnet,netbios\n ncb=netbios.NCB()\n ncb.Command=netbios.NCBENUM\n ncb.Buffer=adapters=netbios.LANA_ENUM()\n adapters._pack()\n if win32wnet.Netbios(ncb)!=0:\n  return\n adapters._unpack()\n for i in range(adapters.length):\n  ncb.Reset()\n  ncb.Command=netbios.NCBRESET\n  ncb.Lana_num=ord(adapters.lana[i])\n  if win32wnet.Netbios(ncb)!=0:\n   continue\n  ncb.Reset()\n  ncb.Command=netbios.NCBASTAT\n  ncb.Lana_num=ord(adapters.lana[i])\n  ncb.Callname='*'.ljust(16)\n  ncb.Buffer=status=netbios.ADAPTER_STATUS()\n  if win32wnet.Netbios(ncb)!=0:\n   continue\n  status._unpack()\n  bytes=status.adapter_address\n  return ((bytes[0]<<40)+(bytes[1]<<32)+(bytes[2]<<24)+\n  (bytes[3]<<16)+(bytes[4]<<8)+bytes[5])\n  \n  \n  \n  \n  \n_uuid_generate_random=_uuid_generate_time=_UuidCreate=None\ntry :\n import ctypes,ctypes.util\n \n \n \n for libname in ['uuid','c']:\n  try :\n   lib=ctypes.CDLL(ctypes.util.find_library(libname))\n  except :\n   continue\n  if hasattr(lib,'uuid_generate_random'):\n   _uuid_generate_random=lib.uuid_generate_random\n  if hasattr(lib,'uuid_generate_time'):\n   _uuid_generate_time=lib.uuid_generate_time\n   if _uuid_generate_random is not None :\n    break\n    \n    \n    \n    \n    \n    \n    \n    \n import sys\n if sys.platform =='darwin':\n  import os\n  if int(os.uname().release.split('.')[0])>=9:\n   _uuid_generate_random=_uuid_generate_time=None\n   \n   \n   \n   \n   \n   \n   \n   \n   \n try :\n  lib=ctypes.windll.rpcrt4\n except :\n  lib=None\n _UuidCreate=getattr(lib,'UuidCreateSequential',\n getattr(lib,'UuidCreate',None ))\nexcept :\n pass\n \ndef _unixdll_getnode():\n ''\n _buffer=ctypes.create_string_buffer(16)\n _uuid_generate_time(_buffer)\n return UUID(bytes=bytes_(_buffer.raw)).node\n \ndef _windll_getnode():\n ''\n _buffer=ctypes.create_string_buffer(16)\n if _UuidCreate(_buffer)==0:\n  return UUID(bytes=bytes_(_buffer.raw)).node\n  \ndef _random_getnode():\n ''\n import random\n return random.randrange(0,1 <<48)|0x010000000000\n \n_node=None\n\ndef getnode():\n ''\n\n\n\n\n\n \n \n global _node\n if _node is not None :\n  return _node\n  \n import sys\n if sys.platform =='win32':\n  getters=[_windll_getnode,_netbios_getnode,_ipconfig_getnode]\n else :\n  getters=[_unixdll_getnode,_ifconfig_getnode]\n  \n for getter in getters+[_random_getnode]:\n  try :\n   _node=getter()\n  except :\n   continue\n  if _node is not None :\n   return _node\n   \n_last_timestamp=None\n\ndef uuid1(node=None ,clock_seq=None ):\n ''\n\n\n \n \n \n \n if _uuid_generate_time and node is clock_seq is None :\n  _buffer=ctypes.create_string_buffer(16)\n  _uuid_generate_time(_buffer)\n  return UUID(bytes=bytes_(_buffer.raw))\n  \n global _last_timestamp\n import time\n nanoseconds=int(time.time()*1e9)\n \n \n timestamp=int(nanoseconds /100)+0x01b21dd213814000\n if _last_timestamp is not None and timestamp <=_last_timestamp:\n  timestamp=_last_timestamp+1\n _last_timestamp=timestamp\n if clock_seq is None :\n  import random\n  clock_seq=random.randrange(1 <<14)\n time_low=timestamp&0xffffffff\n time_mid=(timestamp >>32)&0xffff\n time_hi_version=(timestamp >>48)&0x0fff\n clock_seq_low=clock_seq&0xff\n clock_seq_hi_variant=(clock_seq >>8)&0x3f\n if node is None :\n  node=getnode()\n return UUID(fields=(time_low,time_mid,time_hi_version,\n clock_seq_hi_variant,clock_seq_low,node),version=1)\n \ndef uuid3(namespace,name):\n ''\n from hashlib import md5\n hash=md5(namespace.bytes+bytes(name,\"utf-8\")).digest()\n return UUID(bytes=hash[:16],version=3)\n \ndef uuid4():\n ''\n \n \n if _uuid_generate_random:\n  _buffer=ctypes.create_string_buffer(16)\n  _uuid_generate_random(_buffer)\n  return UUID(bytes=bytes_(_buffer.raw))\n  \n  \n try :\n  import os\n  return UUID(bytes=os.urandom(16),version=4)\n except :\n  import random\n  bytes=bytes_(random.randrange(256)for i in range(16))\n  return UUID(bytes=bytes,version=4)\n  \ndef uuid5(namespace,name):\n ''\n from hashlib import sha1\n hash=sha1(namespace.bytes+bytes(name,\"utf-8\")).digest()\n return UUID(bytes=hash[:16],version=5)\n \n \n \nNAMESPACE_DNS=UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8')\nNAMESPACE_URL=UUID('6ba7b811-9dad-11d1-80b4-00c04fd430c8')\nNAMESPACE_OID=UUID('6ba7b812-9dad-11d1-80b4-00c04fd430c8')\nNAMESPACE_X500=UUID('6ba7b814-9dad-11d1-80b4-00c04fd430c8')\n"], "xml.dom.pulldom": [".py", "import xml.sax\nimport xml.sax.handler\n\nSTART_ELEMENT=\"START_ELEMENT\"\nEND_ELEMENT=\"END_ELEMENT\"\nCOMMENT=\"COMMENT\"\nSTART_DOCUMENT=\"START_DOCUMENT\"\nEND_DOCUMENT=\"END_DOCUMENT\"\nPROCESSING_INSTRUCTION=\"PROCESSING_INSTRUCTION\"\nIGNORABLE_WHITESPACE=\"IGNORABLE_WHITESPACE\"\nCHARACTERS=\"CHARACTERS\"\n\nclass PullDOM(xml.sax.ContentHandler):\n _locator=None\n document=None\n \n def __init__(self,documentFactory=None ):\n  from xml.dom import XML_NAMESPACE\n  self.documentFactory=documentFactory\n  self.firstEvent=[None ,None ]\n  self.lastEvent=self.firstEvent\n  self.elementStack=[]\n  self.push=self.elementStack.append\n  try :\n   self.pop=self.elementStack.pop\n  except AttributeError:\n  \n   pass\n  self._ns_contexts=[{XML_NAMESPACE:'xml'}]\n  self._current_context=self._ns_contexts[-1]\n  self.pending_events=[]\n  \n def pop(self):\n  result=self.elementStack[-1]\n  del self.elementStack[-1]\n  return result\n  \n def setDocumentLocator(self,locator):\n  self._locator=locator\n  \n def startPrefixMapping(self,prefix,uri):\n  if not hasattr(self,'_xmlns_attrs'):\n   self._xmlns_attrs=[]\n  self._xmlns_attrs.append((prefix or'xmlns',uri))\n  self._ns_contexts.append(self._current_context.copy())\n  self._current_context[uri]=prefix or None\n  \n def endPrefixMapping(self,prefix):\n  self._current_context=self._ns_contexts.pop()\n  \n def startElementNS(self,name,tagName,attrs):\n \n  xmlns_uri='http://www.w3.org/2000/xmlns/'\n  xmlns_attrs=getattr(self,'_xmlns_attrs',None )\n  if xmlns_attrs is not None :\n   for aname,value in xmlns_attrs:\n    attrs._attrs[(xmlns_uri,aname)]=value\n   self._xmlns_attrs=[]\n  uri,localname=name\n  if uri:\n  \n  \n  \n   if tagName is None :\n    prefix=self._current_context[uri]\n    if prefix:\n     tagName=prefix+\":\"+localname\n    else :\n     tagName=localname\n   if self.document:\n    node=self.document.createElementNS(uri,tagName)\n   else :\n    node=self.buildDocument(uri,tagName)\n  else :\n  \n  \n   if self.document:\n    node=self.document.createElement(localname)\n   else :\n    node=self.buildDocument(None ,localname)\n    \n  for aname,value in attrs.items():\n   a_uri,a_localname=aname\n   if a_uri ==xmlns_uri:\n    if a_localname =='xmlns':\n     qname=a_localname\n    else :\n     qname='xmlns:'+a_localname\n    attr=self.document.createAttributeNS(a_uri,qname)\n    node.setAttributeNodeNS(attr)\n   elif a_uri:\n    prefix=self._current_context[a_uri]\n    if prefix:\n     qname=prefix+\":\"+a_localname\n    else :\n     qname=a_localname\n    attr=self.document.createAttributeNS(a_uri,qname)\n    node.setAttributeNodeNS(attr)\n   else :\n    attr=self.document.createAttribute(a_localname)\n    node.setAttributeNode(attr)\n   attr.value=value\n   \n  self.lastEvent[1]=[(START_ELEMENT,node),None ]\n  self.lastEvent=self.lastEvent[1]\n  self.push(node)\n  \n def endElementNS(self,name,tagName):\n  self.lastEvent[1]=[(END_ELEMENT,self.pop()),None ]\n  self.lastEvent=self.lastEvent[1]\n  \n def startElement(self,name,attrs):\n  if self.document:\n   node=self.document.createElement(name)\n  else :\n   node=self.buildDocument(None ,name)\n   \n  for aname,value in attrs.items():\n   attr=self.document.createAttribute(aname)\n   attr.value=value\n   node.setAttributeNode(attr)\n   \n  self.lastEvent[1]=[(START_ELEMENT,node),None ]\n  self.lastEvent=self.lastEvent[1]\n  self.push(node)\n  \n def endElement(self,name):\n  self.lastEvent[1]=[(END_ELEMENT,self.pop()),None ]\n  self.lastEvent=self.lastEvent[1]\n  \n def comment(self,s):\n  if self.document:\n   node=self.document.createComment(s)\n   self.lastEvent[1]=[(COMMENT,node),None ]\n   self.lastEvent=self.lastEvent[1]\n  else :\n   event=[(COMMENT,s),None ]\n   self.pending_events.append(event)\n   \n def processingInstruction(self,target,data):\n  if self.document:\n   node=self.document.createProcessingInstruction(target,data)\n   self.lastEvent[1]=[(PROCESSING_INSTRUCTION,node),None ]\n   self.lastEvent=self.lastEvent[1]\n  else :\n   event=[(PROCESSING_INSTRUCTION,target,data),None ]\n   self.pending_events.append(event)\n   \n def ignorableWhitespace(self,chars):\n  node=self.document.createTextNode(chars)\n  self.lastEvent[1]=[(IGNORABLE_WHITESPACE,node),None ]\n  self.lastEvent=self.lastEvent[1]\n  \n def characters(self,chars):\n  node=self.document.createTextNode(chars)\n  self.lastEvent[1]=[(CHARACTERS,node),None ]\n  self.lastEvent=self.lastEvent[1]\n  \n def startDocument(self):\n  if self.documentFactory is None :\n   import xml.dom.minidom\n   self.documentFactory=xml.dom.minidom.Document.implementation\n   \n def buildDocument(self,uri,tagname):\n \n \n  node=self.documentFactory.createDocument(uri,tagname,None )\n  self.document=node\n  self.lastEvent[1]=[(START_DOCUMENT,node),None ]\n  self.lastEvent=self.lastEvent[1]\n  self.push(node)\n  \n  for e in self.pending_events:\n   if e[0][0]==PROCESSING_INSTRUCTION:\n    _,target,data=e[0]\n    n=self.document.createProcessingInstruction(target,data)\n    e[0]=(PROCESSING_INSTRUCTION,n)\n   elif e[0][0]==COMMENT:\n    n=self.document.createComment(e[0][1])\n    e[0]=(COMMENT,n)\n   else :\n    raise AssertionError(\"Unknown pending event \",e[0][0])\n   self.lastEvent[1]=e\n   self.lastEvent=e\n  self.pending_events=None\n  return node.firstChild\n  \n def endDocument(self):\n  self.lastEvent[1]=[(END_DOCUMENT,self.document),None ]\n  self.pop()\n  \n def clear(self):\n  ''\n  self.document=None\n  \nclass ErrorHandler:\n def warning(self,exception):\n  print(exception)\n def error(self,exception):\n  raise exception\n def fatalError(self,exception):\n  raise exception\n  \nclass DOMEventStream:\n def __init__(self,stream,parser,bufsize):\n  self.stream=stream\n  self.parser=parser\n  self.bufsize=bufsize\n  if not hasattr(self.parser,'feed'):\n   self.getEvent=self._slurp\n  self.reset()\n  \n def reset(self):\n  self.pulldom=PullDOM()\n  \n  self.parser.setFeature(xml.sax.handler.feature_namespaces,1)\n  self.parser.setContentHandler(self.pulldom)\n  \n def __getitem__(self,pos):\n  rc=self.getEvent()\n  if rc:\n   return rc\n  raise IndexError\n  \n def __next__(self):\n  rc=self.getEvent()\n  if rc:\n   return rc\n  raise StopIteration\n  \n def __iter__(self):\n  return self\n  \n def expandNode(self,node):\n  event=self.getEvent()\n  parents=[node]\n  while event:\n   token,cur_node=event\n   if cur_node is node:\n    return\n   if token !=END_ELEMENT:\n    parents[-1].appendChild(cur_node)\n   if token ==START_ELEMENT:\n    parents.append(cur_node)\n   elif token ==END_ELEMENT:\n    del parents[-1]\n   event=self.getEvent()\n   \n def getEvent(self):\n \n \n  if not self.pulldom.firstEvent[1]:\n   self.pulldom.lastEvent=self.pulldom.firstEvent\n  while not self.pulldom.firstEvent[1]:\n   buf=self.stream.read(self.bufsize)\n   if not buf:\n    self.parser.close()\n    return None\n   self.parser.feed(buf)\n  rc=self.pulldom.firstEvent[1][0]\n  self.pulldom.firstEvent[1]=self.pulldom.firstEvent[1][1]\n  return rc\n  \n def _slurp(self):\n  ''\n\n\n\n  \n  self.parser.parse(self.stream)\n  self.getEvent=self._emit\n  return self._emit()\n  \n def _emit(self):\n  ''\n\n  \n  rc=self.pulldom.firstEvent[1][0]\n  self.pulldom.firstEvent[1]=self.pulldom.firstEvent[1][1]\n  return rc\n  \n def clear(self):\n  ''\n  self.pulldom.clear()\n  del self.pulldom\n  self.parser=None\n  self.stream=None\n  \nclass SAX2DOM(PullDOM):\n\n def startElementNS(self,name,tagName,attrs):\n  PullDOM.startElementNS(self,name,tagName,attrs)\n  curNode=self.elementStack[-1]\n  parentNode=self.elementStack[-2]\n  parentNode.appendChild(curNode)\n  \n def startElement(self,name,attrs):\n  PullDOM.startElement(self,name,attrs)\n  curNode=self.elementStack[-1]\n  parentNode=self.elementStack[-2]\n  parentNode.appendChild(curNode)\n  \n def processingInstruction(self,target,data):\n  PullDOM.processingInstruction(self,target,data)\n  node=self.lastEvent[0][1]\n  parentNode=self.elementStack[-1]\n  parentNode.appendChild(node)\n  \n def ignorableWhitespace(self,chars):\n  PullDOM.ignorableWhitespace(self,chars)\n  node=self.lastEvent[0][1]\n  parentNode=self.elementStack[-1]\n  parentNode.appendChild(node)\n  \n def characters(self,chars):\n  PullDOM.characters(self,chars)\n  node=self.lastEvent[0][1]\n  parentNode=self.elementStack[-1]\n  parentNode.appendChild(node)\n  \n  \ndefault_bufsize=(2 **14)-20\n\ndef parse(stream_or_string,parser=None ,bufsize=None ):\n if bufsize is None :\n  bufsize=default_bufsize\n if isinstance(stream_or_string,str):\n  stream=open(stream_or_string,'rb')\n else :\n  stream=stream_or_string\n if not parser:\n  parser=xml.sax.make_parser()\n return DOMEventStream(stream,parser,bufsize)\n \ndef parseString(string,parser=None ):\n from io import StringIO\n \n bufsize=len(string)\n buf=StringIO(string)\n if not parser:\n  parser=xml.sax.make_parser()\n return DOMEventStream(buf,parser,bufsize)\n"], "browser.html": [".py", "from _html import *"], "crypto_js.rollups.sha3": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(v,p){var d={},u=d.lib={},r=function(){},f=u.Base={extend:function(a){r.prototype=this;var b=new r;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\ns=u.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=p?b:4*a.length},toString:function(a){return(a||y).stringify(this)},concat:function(a){var b=this.words,c=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var n=0;n<a;n++)b[j+n>>>2]|=(c[n>>>2]>>>24-8*(n%4)&255)<<24-8*((j+n)%4);else if(65535<c.length)for(n=0;n<a;n+=4)b[j+n>>>2]=c[n>>>2];else b.push.apply(b,c);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<\n32-8*(b%4);a.length=v.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],c=0;c<a;c+=4)b.push(4294967296*v.random()|0);return new s.init(b,a)}}),x=d.enc={},y=x.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var c=[],j=0;j<a;j++){var n=b[j>>>2]>>>24-8*(j%4)&255;c.push((n>>>4).toString(16));c.push((n&15).toString(16))}return c.join(\"\")},parse:function(a){for(var b=a.length,c=[],j=0;j<b;j+=2)c[j>>>3]|=parseInt(a.substr(j,\n2),16)<<24-4*(j%8);return new s.init(c,b/2)}},e=x.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var c=[],j=0;j<a;j++)c.push(String.fromCharCode(b[j>>>2]>>>24-8*(j%4)&255));return c.join(\"\")},parse:function(a){for(var b=a.length,c=[],j=0;j<b;j++)c[j>>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new s.init(c,b)}},q=x.Utf8={stringify:function(a){try{return decodeURIComponent(escape(e.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return e.parse(unescape(encodeURIComponent(a)))}},\nt=u.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new s.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=q.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,c=b.words,j=b.sigBytes,n=this.blockSize,e=j/(4*n),e=a?v.ceil(e):v.max((e|0)-this._minBufferSize,0);a=e*n;j=v.min(4*a,j);if(a){for(var f=0;f<a;f+=n)this._doProcessBlock(c,f);f=c.splice(0,a);b.sigBytes-=j}return new s.init(f,j)},clone:function(){var a=f.clone.call(this);\na._data=this._data.clone();return a},_minBufferSize:0});u.Hasher=t.extend({cfg:f.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){t.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,c){return(new a.init(c)).finalize(b)}},_createHmacHelper:function(a){return function(b,c){return(new w.HMAC.init(a,\nc)).finalize(b)}}});var w=d.algo={};return d}(Math);\n(function(v){var p=CryptoJS,d=p.lib,u=d.Base,r=d.WordArray,p=p.x64={};p.Word=u.extend({init:function(f,s){this.high=f;this.low=s}});p.WordArray=u.extend({init:function(f,s){f=this.words=f||[];this.sigBytes=s!=v?s:8*f.length},toX32:function(){for(var f=this.words,s=f.length,d=[],p=0;p<s;p++){var e=f[p];d.push(e.high);d.push(e.low)}return r.create(d,this.sigBytes)},clone:function(){for(var f=u.clone.call(this),d=f.words=this.words.slice(0),p=d.length,r=0;r<p;r++)d[r]=d[r].clone();return f}})})();\n(function(v){for(var p=CryptoJS,d=p.lib,u=d.WordArray,r=d.Hasher,f=p.x64.Word,d=p.algo,s=[],x=[],y=[],e=1,q=0,t=0;24>t;t++){s[e+5*q]=(t+1)*(t+2)/2%64;var w=(2*e+3*q)%5,e=q%5,q=w}for(e=0;5>e;e++)for(q=0;5>q;q++)x[e+5*q]=q+5*((2*e+3*q)%5);e=1;for(q=0;24>q;q++){for(var a=w=t=0;7>a;a++){if(e&1){var b=(1<<a)-1;32>b?w^=1<<b:t^=1<<b-32}e=e&128?e<<1^113:e<<1}y[q]=f.create(t,w)}for(var c=[],e=0;25>e;e++)c[e]=f.create();d=d.SHA3=r.extend({cfg:r.cfg.extend({outputLength:512}),_doReset:function(){for(var a=this._state=\n[],b=0;25>b;b++)a[b]=new f.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(a,b){for(var e=this._state,f=this.blockSize/2,h=0;h<f;h++){var l=a[b+2*h],m=a[b+2*h+1],l=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360,m=(m<<8|m>>>24)&16711935|(m<<24|m>>>8)&4278255360,g=e[h];g.high^=m;g.low^=l}for(f=0;24>f;f++){for(h=0;5>h;h++){for(var d=l=0,k=0;5>k;k++)g=e[h+5*k],l^=g.high,d^=g.low;g=c[h];g.high=l;g.low=d}for(h=0;5>h;h++){g=c[(h+4)%5];l=c[(h+1)%5];m=l.high;k=l.low;l=g.high^\n(m<<1|k>>>31);d=g.low^(k<<1|m>>>31);for(k=0;5>k;k++)g=e[h+5*k],g.high^=l,g.low^=d}for(m=1;25>m;m++)g=e[m],h=g.high,g=g.low,k=s[m],32>k?(l=h<<k|g>>>32-k,d=g<<k|h>>>32-k):(l=g<<k-32|h>>>64-k,d=h<<k-32|g>>>64-k),g=c[x[m]],g.high=l,g.low=d;g=c[0];h=e[0];g.high=h.high;g.low=h.low;for(h=0;5>h;h++)for(k=0;5>k;k++)m=h+5*k,g=e[m],l=c[m],m=c[(h+1)%5+5*k],d=c[(h+2)%5+5*k],g.high=l.high^~m.high&d.high,g.low=l.low^~m.low&d.low;g=e[0];h=y[f];g.high^=h.high;g.low^=h.low}},_doFinalize:function(){var a=this._data,\nb=a.words,c=8*a.sigBytes,e=32*this.blockSize;b[c>>>5]|=1<<24-c%32;b[(v.ceil((c+1)/e)*e>>>5)-1]|=128;a.sigBytes=4*b.length;this._process();for(var a=this._state,b=this.cfg.outputLength/8,c=b/8,e=[],h=0;h<c;h++){var d=a[h],f=d.high,d=d.low,f=(f<<8|f>>>24)&16711935|(f<<24|f>>>8)&4278255360,d=(d<<8|d>>>24)&16711935|(d<<24|d>>>8)&4278255360;e.push(d);e.push(f)}return new u.init(e,b)},clone:function(){for(var a=r.clone.call(this),b=a._state=this._state.slice(0),c=0;25>c;c++)b[c]=b[c].clone();return a}});\np.SHA3=r._createHelper(d);p.HmacSHA3=r._createHmacHelper(d)})(Math);\n"], "queue": [".py", "''\n\ntry :\n import threading\nexcept ImportError:\n import dummy_threading as threading\nfrom collections import deque\nfrom heapq import heappush,heappop\ntry :\n from time import monotonic as time\nexcept ImportError:\n from time import time\n \n__all__=['Empty','Full','Queue','PriorityQueue','LifoQueue']\n\nclass Empty(Exception):\n ''\n pass\n \nclass Full(Exception):\n ''\n pass\n \nclass Queue:\n ''\n\n\n \n \n def __init__(self,maxsize=0):\n  self.maxsize=maxsize\n  self._init(maxsize)\n  \n  \n  \n  \n  \n  self.mutex=threading.Lock()\n  \n  \n  \n  self.not_empty=threading.Condition(self.mutex)\n  \n  \n  \n  self.not_full=threading.Condition(self.mutex)\n  \n  \n  \n  self.all_tasks_done=threading.Condition(self.mutex)\n  self.unfinished_tasks=0\n  \n def task_done(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  with self.all_tasks_done:\n   unfinished=self.unfinished_tasks -1\n   if unfinished <=0:\n    if unfinished <0:\n     raise ValueError('task_done() called too many times')\n    self.all_tasks_done.notify_all()\n   self.unfinished_tasks=unfinished\n   \n def join(self):\n  ''\n\n\n\n\n\n\n  \n  with self.all_tasks_done:\n   while self.unfinished_tasks:\n    self.all_tasks_done.wait()\n    \n def qsize(self):\n  ''\n  with self.mutex:\n   return self._qsize()\n   \n def empty(self):\n  ''\n\n\n\n\n\n\n\n\n  \n  with self.mutex:\n   return not self._qsize()\n   \n def full(self):\n  ''\n\n\n\n\n\n  \n  with self.mutex:\n   return 0 <self.maxsize <=self._qsize()\n   \n def put(self,item,block=True ,timeout=None ):\n  ''\n\n\n\n\n\n\n\n\n  \n  with self.not_full:\n   if self.maxsize >0:\n    if not block:\n     if self._qsize()>=self.maxsize:\n      raise Full\n    elif timeout is None :\n     while self._qsize()>=self.maxsize:\n      self.not_full.wait()\n    elif timeout <0:\n     raise ValueError(\"'timeout' must be a non-negative number\")\n    else :\n     endtime=time()+timeout\n     while self._qsize()>=self.maxsize:\n      remaining=endtime -time()\n      if remaining <=0.0:\n       raise Full\n      self.not_full.wait(remaining)\n   self._put(item)\n   self.unfinished_tasks +=1\n   self.not_empty.notify()\n   \n def get(self,block=True ,timeout=None ):\n  ''\n\n\n\n\n\n\n\n\n  \n  with self.not_empty:\n   if not block:\n    if not self._qsize():\n     raise Empty\n   elif timeout is None :\n    while not self._qsize():\n     self.not_empty.wait()\n   elif timeout <0:\n    raise ValueError(\"'timeout' must be a non-negative number\")\n   else :\n    endtime=time()+timeout\n    while not self._qsize():\n     remaining=endtime -time()\n     if remaining <=0.0:\n      raise Empty\n     self.not_empty.wait(remaining)\n   item=self._get()\n   self.not_full.notify()\n   return item\n   \n def put_nowait(self,item):\n  ''\n\n\n\n  \n  return self.put(item,block=False )\n  \n def get_nowait(self):\n  ''\n\n\n\n  \n  return self.get(block=False )\n  \n  \n  \n  \n  \n  \n def _init(self,maxsize):\n  self.queue=deque()\n  \n def _qsize(self):\n  return len(self.queue)\n  \n  \n def _put(self,item):\n  self.queue.append(item)\n  \n  \n def _get(self):\n  return self.queue.popleft()\n  \n  \nclass PriorityQueue(Queue):\n ''\n\n\n \n \n def _init(self,maxsize):\n  self.queue=[]\n  \n def _qsize(self):\n  return len(self.queue)\n  \n def _put(self,item):\n  heappush(self.queue,item)\n  \n def _get(self):\n  return heappop(self.queue)\n  \n  \nclass LifoQueue(Queue):\n ''\n \n def _init(self,maxsize):\n  self.queue=[]\n  \n def _qsize(self):\n  return len(self.queue)\n  \n def _put(self,item):\n  self.queue.append(item)\n  \n def _get(self):\n  return self.queue.pop()\n"], "_imp": [".py", "''\n\n\nclass __loader__(object):pass\n\ndef _fix_co_filename(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:_fix_co_filename'))\n \ndef acquire_lock(*args,**kw):\n ''\n\n\n \n pass\n \n \ndef extension_suffixes(*args,**kw):\n ''\n return ['.pyd']\n \ndef get_frozen_object(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:get_frozen_object'))\n \ndef init_builtin(module,*args,**kw):\n return __import__(module)\n \ndef init_frozen(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:init_frozen'))\n \ndef is_builtin(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:is_builtin'))\n \ndef is_frozen(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:is_frozen'))\n \ndef is_frozen_package(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:is_frozen_package'))\n \ndef load_dynamic(*args,**kw):\n raise NotImplementedError(\"%s:not implemented\"%('_imp.py:load_dynamic'))\n \ndef lock_held(*args,**kw):\n ''\n \n \n return False\n \n \ndef release_lock(*args,**kw):\n ''\n \n \n pass\n \n"], "encodings.cp865": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp865',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x20a7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00a4,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\u20a7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xa4'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a3:0x009c,\n0x00a4:0x00af,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00ba:0x00a7,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c9:0x0090,\n0x00d1:0x00a5,\n0x00d6:0x0099,\n0x00d8:0x009d,\n0x00dc:0x009a,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00ff:0x0098,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "types": [".py", "''\n\n\nimport sys\n\n\n\n\n\n\ndef _f():pass\nFunctionType=type(_f)\nLambdaType=type(lambda :None )\nCodeType=type(_f.__code__)\nMappingProxyType=type(type.__dict__)\nSimpleNamespace=type(sys.implementation)\n\ndef _g():\n yield 1\nGeneratorType=type(_g())\n\nclass _C:\n def _m(self):pass\nMethodType=type(_C()._m)\n\nBuiltinFunctionType=type(len)\nBuiltinMethodType=type([].append)\n\nModuleType=type(sys)\n\ntry :\n raise TypeError\nexcept TypeError:\n tb=sys.exc_info()[2]\n TracebackType=type(tb)\n FrameType=type(tb.tb_frame)\n tb=None ;del tb\n \n \nGetSetDescriptorType=type(FunctionType.__code__)\nMemberDescriptorType=type(FunctionType.__globals__)\n\ndel sys,_f,_g,_C,\n\n\n\ndef new_class(name,bases=(),kwds=None ,exec_body=None ):\n ''\n meta,ns,kwds=prepare_class(name,bases,kwds)\n if exec_body is not None :\n  exec_body(ns)\n return meta(name,bases,ns,**kwds)\n \ndef prepare_class(name,bases=(),kwds=None ):\n ''\n\n\n\n\n\n\n\n\n \n if kwds is None :\n  kwds={}\n else :\n  kwds=dict(kwds)\n if'metaclass'in kwds:\n  meta=kwds.pop('metaclass')\n else :\n  if bases:\n   meta=type(bases[0])\n  else :\n   meta=type\n if isinstance(meta,type):\n \n \n  meta=_calculate_meta(meta,bases)\n if hasattr(meta,'__prepare__'):\n  ns=meta.__prepare__(name,bases,**kwds)\n else :\n  ns={}\n return meta,ns,kwds\n \ndef _calculate_meta(meta,bases):\n ''\n winner=meta\n for base in bases:\n  base_meta=type(base)\n  if issubclass(winner,base_meta):\n   continue\n  if issubclass(base_meta,winner):\n   winner=base_meta\n   continue\n   \n  raise TypeError(\"metaclass conflict: \"\n  \"the metaclass of a derived class \"\n  \"must be a (non-strict) subclass \"\n  \"of the metaclasses of all its bases\")\n return winner\n"], "token": [".py", "''\n\n__all__=['tok_name','ISTERMINAL','ISNONTERMINAL','ISEOF']\n\n\n\n\n\n\n\n\n\nENDMARKER=0\nNAME=1\nNUMBER=2\nSTRING=3\nNEWLINE=4\nINDENT=5\nDEDENT=6\nLPAR=7\nRPAR=8\nLSQB=9\nRSQB=10\nCOLON=11\nCOMMA=12\nSEMI=13\nPLUS=14\nMINUS=15\nSTAR=16\nSLASH=17\nVBAR=18\nAMPER=19\nLESS=20\nGREATER=21\nEQUAL=22\nDOT=23\nPERCENT=24\nLBRACE=25\nRBRACE=26\nEQEQUAL=27\nNOTEQUAL=28\nLESSEQUAL=29\nGREATEREQUAL=30\nTILDE=31\nCIRCUMFLEX=32\nLEFTSHIFT=33\nRIGHTSHIFT=34\nDOUBLESTAR=35\nPLUSEQUAL=36\nMINEQUAL=37\nSTAREQUAL=38\nSLASHEQUAL=39\nPERCENTEQUAL=40\nAMPEREQUAL=41\nVBAREQUAL=42\nCIRCUMFLEXEQUAL=43\nLEFTSHIFTEQUAL=44\nRIGHTSHIFTEQUAL=45\nDOUBLESTAREQUAL=46\nDOUBLESLASH=47\nDOUBLESLASHEQUAL=48\nAT=49\nRARROW=50\nELLIPSIS=51\nOP=52\nERRORTOKEN=53\nN_TOKENS=54\nNT_OFFSET=256\n\n\ntok_name={value:name\nfor name,value in globals().items()\nif isinstance(value,int)and not name.startswith('_')}\n__all__.extend(tok_name.values())\n\ndef ISTERMINAL(x):\n return x <NT_OFFSET\n \ndef ISNONTERMINAL(x):\n return x >=NT_OFFSET\n \ndef ISEOF(x):\n return x ==ENDMARKER\n \n \ndef _main():\n import re\n import sys\n args=sys.argv[1:]\n inFileName=args and args[0]or\"Include/token.h\"\n outFileName=\"Lib/token.py\"\n if len(args)>1:\n  outFileName=args[1]\n try :\n  fp=open(inFileName)\n except IOError as err:\n  sys.stdout.write(\"I/O error: %s\\n\"%str(err))\n  sys.exit(1)\n lines=fp.read().split(\"\\n\")\n fp.close()\n prog=re.compile(\n \"#define[ \\t][ \\t]*([A-Z0-9][A-Z0-9_]*)[ \\t][ \\t]*([0-9][0-9]*)\",\n re.IGNORECASE)\n tokens={}\n for line in lines:\n  match=prog.match(line)\n  if match:\n   name,val=match.group(1,2)\n   val=int(val)\n   tokens[val]=name\n keys=sorted(tokens.keys())\n \n try :\n  fp=open(outFileName)\n except IOError as err:\n  sys.stderr.write(\"I/O error: %s\\n\"%str(err))\n  sys.exit(2)\n format=fp.read().split(\"\\n\")\n fp.close()\n try :\n  start=format.index(\"#--start constants--\")+1\n  end=format.index(\"#--end constants--\")\n except ValueError:\n  sys.stderr.write(\"target does not contain format markers\")\n  sys.exit(3)\n lines=[]\n for val in keys:\n  lines.append(\"%s = %d\"%(tokens[val],val))\n format[start:end]=lines\n try :\n  fp=open(outFileName,'w')\n except IOError as err:\n  sys.stderr.write(\"I/O error: %s\\n\"%str(err))\n  sys.exit(4)\n fp.write(\"\\n\".join(format))\n fp.close()\n \n \nif __name__ ==\"__main__\":\n _main()\n"], "sre_parse": [".py", "\n\n\n\n\n\n\n\n\n\n\"\"\"Internal support module for sre\"\"\"\n\n\n\nimport sys\n\nfrom sre_constants import *\nfrom _sre import MAXREPEAT\n\nSPECIAL_CHARS=\".\\\\[{()*+?^$|\"\nREPEAT_CHARS=\"*+?{\"\n\nDIGITS=set(\"0123456789\")\n\nOCTDIGITS=set(\"01234567\")\nHEXDIGITS=set(\"0123456789abcdefABCDEF\")\n\nWHITESPACE=set(\" \\t\\n\\r\\v\\f\")\n\nESCAPES={\nr\"\\a\":(LITERAL,ord(\"\\a\")),\nr\"\\b\":(LITERAL,ord(\"\\b\")),\nr\"\\f\":(LITERAL,ord(\"\\f\")),\nr\"\\n\":(LITERAL,ord(\"\\n\")),\nr\"\\r\":(LITERAL,ord(\"\\r\")),\nr\"\\t\":(LITERAL,ord(\"\\t\")),\nr\"\\v\":(LITERAL,ord(\"\\v\")),\nr\"\\\\\":(LITERAL,ord(\"\\\\\"))\n}\n\nCATEGORIES={\nr\"\\A\":(AT,AT_BEGINNING_STRING),\nr\"\\b\":(AT,AT_BOUNDARY),\nr\"\\B\":(AT,AT_NON_BOUNDARY),\nr\"\\d\":(IN,[(CATEGORY,CATEGORY_DIGIT)]),\nr\"\\D\":(IN,[(CATEGORY,CATEGORY_NOT_DIGIT)]),\nr\"\\s\":(IN,[(CATEGORY,CATEGORY_SPACE)]),\nr\"\\S\":(IN,[(CATEGORY,CATEGORY_NOT_SPACE)]),\nr\"\\w\":(IN,[(CATEGORY,CATEGORY_WORD)]),\nr\"\\W\":(IN,[(CATEGORY,CATEGORY_NOT_WORD)]),\nr\"\\Z\":(AT,AT_END_STRING),\n}\n\nFLAGS={\n\n\"i\":SRE_FLAG_IGNORECASE,\n\"L\":SRE_FLAG_LOCALE,\n\"m\":SRE_FLAG_MULTILINE,\n\"s\":SRE_FLAG_DOTALL,\n\"x\":SRE_FLAG_VERBOSE,\n\n\"a\":SRE_FLAG_ASCII,\n\"t\":SRE_FLAG_TEMPLATE,\n\"u\":SRE_FLAG_UNICODE,\n}\n\nclass Pattern:\n\n def __init__(self):\n  self.flags=0\n  self.open=[]\n  self.groups=1\n  self.groupdict={}\n def opengroup(self,name=None ):\n  gid=self.groups\n  self.groups=gid+1\n  if name is not None :\n   ogid=self.groupdict.get(name,None )\n   if ogid is not None :\n    raise error(\"redefinition of group name %s as group %d; \"\n    \"was group %d\"%(repr(name),gid,ogid))\n   self.groupdict[name]=gid\n  self.open.append(gid)\n  return gid\n def closegroup(self,gid):\n  self.open.remove(gid)\n def checkgroup(self,gid):\n  return gid <self.groups and gid not in self.open\n  \nclass SubPattern:\n\n def __init__(self,pattern,data=None ):\n  self.pattern=pattern\n  if data is None :\n   data=[]\n  self.data=data\n  self.width=None\n def __iter__(self):\n  return iter(self.data)\n  \n def dump(self,level=0):\n  nl=1\n  seqtypes=(tuple,list)\n  for op,av in self.data:\n   print(level *\"  \"+op,end=' ');nl=0\n   if op ==\"in\":\n   \n    print();nl=1\n    for op,a in av:\n     print((level+1)*\"  \"+op,a)\n   elif op ==\"branch\":\n    print();nl=1\n    i=0\n    for a in av[1]:\n     if i >0:\n      print(level *\"  \"+\"or\")\n     a.dump(level+1);nl=1\n     i=i+1\n   elif isinstance(av,seqtypes):\n    for a in av:\n     if isinstance(a,SubPattern):\n      if not nl:print()\n      a.dump(level+1);nl=1\n     else :\n      print(a,end=' ');nl=0\n   else :\n    print(av,end=' ');nl=0\n   if not nl:print()\n def __repr__(self):\n  return repr(self.data)\n def __len__(self):\n  return len(self.data)\n def __delitem__(self,index):\n  del self.data[index]\n def __getitem__(self,index):\n  if isinstance(index,slice):\n   return SubPattern(self.pattern,self.data[index])\n  return self.data[index]\n def __setitem__(self,index,code):\n  self.data[index]=code\n def insert(self,index,code):\n  self.data.insert(index,code)\n def append(self,code):\n  self.data.append(code)\n def getwidth(self):\n \n  if self.width:\n   return self.width\n  lo=hi=0\n  UNITCODES=(ANY,RANGE,IN,LITERAL,NOT_LITERAL,CATEGORY)\n  REPEATCODES=(MIN_REPEAT,MAX_REPEAT)\n  for op,av in self.data:\n   if op is BRANCH:\n    i=sys.maxsize\n    j=0\n    for av in av[1]:\n     l,h=av.getwidth()\n     i=min(i,l)\n     j=max(j,h)\n    lo=lo+i\n    hi=hi+j\n   elif op is CALL:\n    i,j=av.getwidth()\n    lo=lo+i\n    hi=hi+j\n   elif op is SUBPATTERN:\n    i,j=av[1].getwidth()\n    lo=lo+i\n    hi=hi+j\n   elif op in REPEATCODES:\n    i,j=av[2].getwidth()\n    lo=lo+int(i)*av[0]\n    hi=hi+int(j)*av[1]\n   elif op in UNITCODES:\n    lo=lo+1\n    hi=hi+1\n   elif op ==SUCCESS:\n    break\n  self.width=int(min(lo,sys.maxsize)),int(min(hi,sys.maxsize))\n  return self.width\n  \nclass Tokenizer:\n def __init__(self,string):\n  self.istext=isinstance(string,str)\n  self.string=string\n  self.index=0\n  self.__next()\n def __next(self):\n  if self.index >=len(self.string):\n   self.next=None\n   return\n  char=self.string[self.index:self.index+1]\n  \n  \n  if char and not self.istext:\n   char=chr(char[0])\n  if char ==\"\\\\\":\n   try :\n    c=self.string[self.index+1]\n   except IndexError:\n    raise error(\"bogus escape (end of line)\")\n   if not self.istext:\n    c=chr(c)\n   char=char+c\n  self.index=self.index+len(char)\n  self.next=char\n def match(self,char,skip=1):\n  if char ==self.next:\n   if skip:\n    self.__next()\n   return 1\n  return 0\n def get(self):\n  this=self.next\n  self.__next()\n  return this\n def getwhile(self,n,charset):\n  result=''\n  for _ in range(n):\n   c=self.next\n   if c not in charset:\n    break\n   result +=c\n   self.__next()\n  return result\n def tell(self):\n  return self.index,self.next\n def seek(self,index):\n  self.index,self.next=index\n  \ndef isident(char):\n return\"a\"<=char <=\"z\"or\"A\"<=char <=\"Z\"or char ==\"_\"\n \ndef isdigit(char):\n return\"0\"<=char <=\"9\"\n \ndef isname(name):\n\n if not isident(name[0]):\n  return False\n for char in name[1:]:\n  if not isident(char)and not isdigit(char):\n   return False\n return True\n \ndef _class_escape(source,escape):\n\n code=ESCAPES.get(escape)\n if code:\n  return code\n code=CATEGORIES.get(escape)\n if code and code[0]==IN:\n  return code\n try :\n  c=escape[1:2]\n  if c ==\"x\":\n  \n   escape +=source.getwhile(2,HEXDIGITS)\n   if len(escape)!=4:\n    raise ValueError\n   return LITERAL,int(escape[2:],16)&0xff\n  elif c ==\"u\"and source.istext:\n  \n   escape +=source.getwhile(4,HEXDIGITS)\n   if len(escape)!=6:\n    raise ValueError\n   return LITERAL,int(escape[2:],16)\n  elif c ==\"U\"and source.istext:\n  \n   escape +=source.getwhile(8,HEXDIGITS)\n   if len(escape)!=10:\n    raise ValueError\n   c=int(escape[2:],16)\n   chr(c)\n   return LITERAL,c\n  elif c in OCTDIGITS:\n  \n   escape +=source.getwhile(2,OCTDIGITS)\n   return LITERAL,int(escape[1:],8)&0xff\n  elif c in DIGITS:\n   raise ValueError\n  if len(escape)==2:\n   return LITERAL,ord(escape[1])\n except ValueError:\n  pass\n raise error(\"bogus escape: %s\"%repr(escape))\n \ndef _escape(source,escape,state):\n\n code=CATEGORIES.get(escape)\n if code:\n  return code\n code=ESCAPES.get(escape)\n if code:\n  return code\n try :\n  c=escape[1:2]\n  if c ==\"x\":\n  \n   escape +=source.getwhile(2,HEXDIGITS)\n   if len(escape)!=4:\n    raise ValueError\n   return LITERAL,int(escape[2:],16)&0xff\n  elif c ==\"u\"and source.istext:\n  \n   escape +=source.getwhile(4,HEXDIGITS)\n   if len(escape)!=6:\n    raise ValueError\n   return LITERAL,int(escape[2:],16)\n  elif c ==\"U\"and source.istext:\n  \n   escape +=source.getwhile(8,HEXDIGITS)\n   if len(escape)!=10:\n    raise ValueError\n   c=int(escape[2:],16)\n   chr(c)\n   return LITERAL,c\n  elif c ==\"0\":\n  \n   escape +=source.getwhile(2,OCTDIGITS)\n   return LITERAL,int(escape[1:],8)&0xff\n  elif c in DIGITS:\n  \n   if source.next in DIGITS:\n    escape=escape+source.get()\n    if (escape[1]in OCTDIGITS and escape[2]in OCTDIGITS and\n    source.next in OCTDIGITS):\n    \n     escape=escape+source.get()\n     return LITERAL,int(escape[1:],8)&0xff\n     \n   group=int(escape[1:])\n   if group <state.groups:\n    if not state.checkgroup(group):\n     raise error(\"cannot refer to open group\")\n    return GROUPREF,group\n   raise ValueError\n  if len(escape)==2:\n   return LITERAL,ord(escape[1])\n except ValueError:\n  pass\n raise error(\"bogus escape: %s\"%repr(escape))\n \ndef _parse_sub(source,state,nested=1):\n\n\n items=[]\n itemsappend=items.append\n sourcematch=source.match\n while 1:\n  itemsappend(_parse(source,state))\n  if sourcematch(\"|\"):\n   continue\n  if not nested:\n   break\n  if not source.next or sourcematch(\")\",0):\n   break\n  else :\n   raise error(\"pattern not properly closed\")\n   \n if len(items)==1:\n  return items[0]\n  \n subpattern=SubPattern(state)\n subpatternappend=subpattern.append\n \n \n while 1:\n  prefix=None\n  for item in items:\n   if not item:\n    break\n   if prefix is None :\n    prefix=item[0]\n   elif item[0]!=prefix:\n    break\n  else :\n  \n  \n   for item in items:\n    del item[0]\n   subpatternappend(prefix)\n   continue\n  break\n  \n  \n for item in items:\n  if len(item)!=1 or item[0][0]!=LITERAL:\n   break\n else :\n \n \n  set=[]\n  setappend=set.append\n  for item in items:\n   setappend(item[0])\n  subpatternappend((IN,set))\n  return subpattern\n  \n subpattern.append((BRANCH,(None ,items)))\n return subpattern\n \ndef _parse_sub_cond(source,state,condgroup):\n item_yes=_parse(source,state)\n if source.match(\"|\"):\n  item_no=_parse(source,state)\n  if source.match(\"|\"):\n   raise error(\"conditional backref with more than two branches\")\n else :\n  item_no=None\n if source.next and not source.match(\")\",0):\n  raise error(\"pattern not properly closed\")\n subpattern=SubPattern(state)\n subpattern.append((GROUPREF_EXISTS,(condgroup,item_yes,item_no)))\n return subpattern\n \n_PATTERNENDERS=set(\"|)\")\n_ASSERTCHARS=set(\"=!<\")\n_LOOKBEHINDASSERTCHARS=set(\"=!\")\n_REPEATCODES=set([MIN_REPEAT,MAX_REPEAT])\n\ndef _parse(source,state):\n\n subpattern=SubPattern(state)\n \n \n subpatternappend=subpattern.append\n sourceget=source.get\n sourcematch=source.match\n _len=len\n PATTERNENDERS=_PATTERNENDERS\n ASSERTCHARS=_ASSERTCHARS\n LOOKBEHINDASSERTCHARS=_LOOKBEHINDASSERTCHARS\n REPEATCODES=_REPEATCODES\n \n while 1:\n \n  if source.next in PATTERNENDERS:\n   break\n  this=sourceget()\n  if this is None :\n   break\n   \n  if state.flags&SRE_FLAG_VERBOSE:\n  \n   if this in WHITESPACE:\n    continue\n   if this ==\"#\":\n    while 1:\n     this=sourceget()\n     if this in (None ,\"\\n\"):\n      break\n    continue\n    \n  if this and this[0]not in SPECIAL_CHARS:\n   subpatternappend((LITERAL,ord(this)))\n   \n  elif this ==\"[\":\n  \n   set=[]\n   setappend=set.append\n   \n   \n   if sourcematch(\"^\"):\n    setappend((NEGATE,None ))\n    \n   start=set[:]\n   while 1:\n    this=sourceget()\n    if this ==\"]\"and set !=start:\n     break\n    elif this and this[0]==\"\\\\\":\n     code1=_class_escape(source,this)\n    elif this:\n     code1=LITERAL,ord(this)\n    else :\n     raise error(\"unexpected end of regular expression\")\n    if sourcematch(\"-\"):\n    \n     this=sourceget()\n     if this ==\"]\":\n      if code1[0]is IN:\n       code1=code1[1][0]\n      setappend(code1)\n      setappend((LITERAL,ord(\"-\")))\n      break\n     elif this:\n      if this[0]==\"\\\\\":\n       code2=_class_escape(source,this)\n      else :\n       code2=LITERAL,ord(this)\n      if code1[0]!=LITERAL or code2[0]!=LITERAL:\n       raise error(\"bad character range\")\n      lo=code1[1]\n      hi=code2[1]\n      if hi <lo:\n       raise error(\"bad character range\")\n      setappend((RANGE,(lo,hi)))\n     else :\n      raise error(\"unexpected end of regular expression\")\n    else :\n     if code1[0]is IN:\n      code1=code1[1][0]\n     setappend(code1)\n     \n     \n   if _len(set)==1 and set[0][0]is LITERAL:\n    subpatternappend(set[0])\n   elif _len(set)==2 and set[0][0]is NEGATE and set[1][0]is LITERAL:\n    subpatternappend((NOT_LITERAL,set[1][1]))\n   else :\n   \n    subpatternappend((IN,set))\n    \n  elif this and this[0]in REPEAT_CHARS:\n  \n   if this ==\"?\":\n    min,max=0,1\n   elif this ==\"*\":\n    min,max=0,MAXREPEAT\n    \n   elif this ==\"+\":\n    min,max=1,MAXREPEAT\n   elif this ==\"{\":\n    if source.next ==\"}\":\n     subpatternappend((LITERAL,ord(this)))\n     continue\n    here=source.tell()\n    min,max=0,MAXREPEAT\n    lo=hi=\"\"\n    while source.next in DIGITS:\n     lo=lo+source.get()\n    if sourcematch(\",\"):\n     while source.next in DIGITS:\n      hi=hi+sourceget()\n    else :\n     hi=lo\n    if not sourcematch(\"}\"):\n     subpatternappend((LITERAL,ord(this)))\n     source.seek(here)\n     continue\n    if lo:\n     min=int(lo)\n     if min >=MAXREPEAT:\n      raise OverflowError(\"the repetition number is too large\")\n    if hi:\n     max=int(hi)\n     if max >=MAXREPEAT:\n      raise OverflowError(\"the repetition number is too large\")\n     if max <min:\n      raise error(\"bad repeat interval\")\n   else :\n    raise error(\"not supported\")\n    \n   if subpattern:\n    item=subpattern[-1:]\n   else :\n    item=None\n   if not item or (_len(item)==1 and item[0][0]==AT):\n    raise error(\"nothing to repeat\")\n   if item[0][0]in REPEATCODES:\n    raise error(\"multiple repeat\")\n   if sourcematch(\"?\"):\n    subpattern[-1]=(MIN_REPEAT,(min,max,item))\n   else :\n    subpattern[-1]=(MAX_REPEAT,(min,max,item))\n    \n  elif this ==\".\":\n   subpatternappend((ANY,None ))\n   \n  elif this ==\"(\":\n   group=1\n   name=None\n   condgroup=None\n   if sourcematch(\"?\"):\n    group=0\n    \n    if sourcematch(\"P\"):\n    \n     if sourcematch(\"<\"):\n     \n      name=\"\"\n      while 1:\n       char=sourceget()\n       if char is None :\n        raise error(\"unterminated name\")\n       if char ==\">\":\n        break\n       name=name+char\n      group=1\n      if not name:\n       raise error(\"missing group name\")\n      if not isname(name):\n       raise error(\"bad character in group name\")\n     elif sourcematch(\"=\"):\n     \n      name=\"\"\n      while 1:\n       char=sourceget()\n       if char is None :\n        raise error(\"unterminated name\")\n       if char ==\")\":\n        break\n       name=name+char\n      if not name:\n       raise error(\"missing group name\")\n      if not isname(name):\n       raise error(\"bad character in group name\")\n      gid=state.groupdict.get(name)\n      if gid is None :\n       raise error(\"unknown group name\")\n      subpatternappend((GROUPREF,gid))\n      continue\n     else :\n      char=sourceget()\n      if char is None :\n       raise error(\"unexpected end of pattern\")\n      raise error(\"unknown specifier: ?P%s\"%char)\n    elif sourcematch(\":\"):\n    \n     group=2\n    elif sourcematch(\"#\"):\n    \n     while 1:\n      if source.next is None or source.next ==\")\":\n       break\n      sourceget()\n     if not sourcematch(\")\"):\n      raise error(\"unbalanced parenthesis\")\n     continue\n    elif source.next in ASSERTCHARS:\n    \n     char=sourceget()\n     dir=1\n     if char ==\"<\":\n      if source.next not in LOOKBEHINDASSERTCHARS:\n       raise error(\"syntax error\")\n      dir=-1\n      char=sourceget()\n     p=_parse_sub(source,state)\n     if not sourcematch(\")\"):\n      raise error(\"unbalanced parenthesis\")\n     if char ==\"=\":\n      subpatternappend((ASSERT,(dir,p)))\n     else :\n      subpatternappend((ASSERT_NOT,(dir,p)))\n     continue\n    elif sourcematch(\"(\"):\n    \n     condname=\"\"\n     while 1:\n      char=sourceget()\n      if char is None :\n       raise error(\"unterminated name\")\n      if char ==\")\":\n       break\n      condname=condname+char\n     group=2\n     if not condname:\n      raise error(\"missing group name\")\n     if isname(condname):\n      condgroup=state.groupdict.get(condname)\n      if condgroup is None :\n       raise error(\"unknown group name\")\n     else :\n      try :\n       condgroup=int(condname)\n      except ValueError:\n       raise error(\"bad character in group name\")\n    else :\n    \n     if not source.next in FLAGS:\n      raise error(\"unexpected end of pattern\")\n     while source.next in FLAGS:\n      state.flags=state.flags |FLAGS[sourceget()]\n   if group:\n   \n    if group ==2:\n    \n     group=None\n    else :\n     group=state.opengroup(name)\n    if condgroup:\n     p=_parse_sub_cond(source,state,condgroup)\n    else :\n     p=_parse_sub(source,state)\n    if not sourcematch(\")\"):\n     raise error(\"unbalanced parenthesis\")\n    if group is not None :\n     state.closegroup(group)\n    subpatternappend((SUBPATTERN,(group,p)))\n   else :\n    while 1:\n     char=sourceget()\n     if char is None :\n      raise error(\"unexpected end of pattern\")\n     if char ==\")\":\n      break\n     raise error(\"unknown extension\")\n     \n  elif this ==\"^\":\n   subpatternappend((AT,AT_BEGINNING))\n   \n  elif this ==\"$\":\n   subpattern.append((AT,AT_END))\n   \n  elif this and this[0]==\"\\\\\":\n   code=_escape(source,this,state)\n   subpatternappend(code)\n   \n  else :\n   raise error(\"parser error\")\n   \n return subpattern\n \ndef fix_flags(src,flags):\n\n if isinstance(src,str):\n  if not flags&SRE_FLAG_ASCII:\n   flags |=SRE_FLAG_UNICODE\n  elif flags&SRE_FLAG_UNICODE:\n   raise ValueError(\"ASCII and UNICODE flags are incompatible\")\n else :\n  if flags&SRE_FLAG_UNICODE:\n   raise ValueError(\"can't use UNICODE flag with a bytes pattern\")\n return flags\n \ndef parse(str,flags=0,pattern=None ):\n\n source=Tokenizer(str)\n \n if pattern is None :\n  pattern=Pattern()\n pattern.flags=flags\n pattern.str=str\n p=_parse_sub(source,pattern,0)\n p.pattern.flags=fix_flags(str,p.pattern.flags)\n \n tail=source.get()\n if tail ==\")\":\n  raise error(\"unbalanced parenthesis\")\n elif tail:\n  raise error(\"bogus characters at end of regular expression\")\n  \n if flags&SRE_FLAG_DEBUG:\n  p.dump()\n  \n if not (flags&SRE_FLAG_VERBOSE)and p.pattern.flags&SRE_FLAG_VERBOSE:\n \n \n  return parse(str,p.pattern.flags)\n  \n return p\n \ndef parse_template(source,pattern):\n\n\n s=Tokenizer(source)\n sget=s.get\n p=[]\n a=p.append\n def literal(literal,p=p,pappend=a):\n  if p and p[-1][0]is LITERAL:\n   p[-1]=LITERAL,p[-1][1]+literal\n  else :\n   pappend((LITERAL,literal))\n sep=source[:0]\n if isinstance(sep,str):\n  makechar=chr\n else :\n  makechar=chr\n while 1:\n  this=sget()\n  if this is None :\n   break\n  if this and this[0]==\"\\\\\":\n  \n   c=this[1:2]\n   if c ==\"g\":\n    name=\"\"\n    if s.match(\"<\"):\n     while 1:\n      char=sget()\n      if char is None :\n       raise error(\"unterminated group name\")\n      if char ==\">\":\n       break\n      name=name+char\n    if not name:\n     raise error(\"missing group name\")\n    try :\n     index=int(name)\n     if index <0:\n      raise error(\"negative group number\")\n    except ValueError:\n     if not isname(name):\n      raise error(\"bad character in group name\")\n     try :\n      index=pattern.groupindex[name]\n     except KeyError:\n      raise IndexError(\"unknown group name\")\n    a((MARK,index))\n   elif c ==\"0\":\n    if s.next in OCTDIGITS:\n     this=this+sget()\n     if s.next in OCTDIGITS:\n      this=this+sget()\n    literal(makechar(int(this[1:],8)&0xff))\n   elif c in DIGITS:\n    isoctal=False\n    if s.next in DIGITS:\n     this=this+sget()\n     if (c in OCTDIGITS and this[2]in OCTDIGITS and\n     s.next in OCTDIGITS):\n      this=this+sget()\n      isoctal=True\n      literal(makechar(int(this[1:],8)&0xff))\n    if not isoctal:\n     a((MARK,int(this[1:])))\n   else :\n    try :\n     this=makechar(ESCAPES[this][1])\n    except KeyError:\n     pass\n    literal(this)\n  else :\n   literal(this)\n   \n i=0\n groups=[]\n groupsappend=groups.append\n literals=[None ]*len(p)\n if isinstance(source,str):\n  encode=lambda x:x\n else :\n \n \n  encode=lambda x:x.encode('latin-1')\n for c,s in p:\n  if c is MARK:\n   groupsappend((i,s))\n   \n  else :\n   literals[i]=encode(s)\n  i=i+1\n return groups,literals\n \ndef expand_template(template,match):\n g=match.group\n sep=match.string[:0]\n groups,literals=template\n literals=literals[:]\n try :\n  for index,group in groups:\n   literals[index]=s=g(group)\n   if s is None :\n    raise error(\"unmatched group\")\n except IndexError:\n  raise error(\"invalid group reference\")\n return sep.join(literals)\n \n \n"], "optparse": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__version__=\"1.5.3\"\n\n__all__=['Option',\n'make_option',\n'SUPPRESS_HELP',\n'SUPPRESS_USAGE',\n'Values',\n'OptionContainer',\n'OptionGroup',\n'OptionParser',\n'HelpFormatter',\n'IndentedHelpFormatter',\n'TitledHelpFormatter',\n'OptParseError',\n'OptionError',\n'OptionConflictError',\n'OptionValueError',\n'BadOptionError']\n\n__copyright__=\"\"\"\nCopyright (c) 2001-2006 Gregory P. Ward.  All rights reserved.\nCopyright (c) 2002-2006 Python Software Foundation.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\n  * Neither the name of the author nor the names of its\n    contributors may be used to endorse or promote products derived from\n    this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\"\"\"\n\nimport sys,os\nimport textwrap\n\ndef _repr(self):\n return\"<%s at 0x%x: %s>\"%(self.__class__.__name__,id(self),self)\n \n \n \n \n \n \n \n \ntry :\n from gettext import gettext,ngettext\nexcept ImportError:\n def gettext(message):\n  return message\n  \n def ngettext(singular,plural,n):\n  if n ==1:\n   return singular\n  return plural\n  \n_=gettext\n\n\nclass OptParseError(Exception):\n def __init__(self,msg):\n  self.msg=msg\n  \n def __str__(self):\n  return self.msg\n  \n  \nclass OptionError(OptParseError):\n ''\n\n\n \n \n def __init__(self,msg,option):\n  self.msg=msg\n  self.option_id=str(option)\n  \n def __str__(self):\n  if self.option_id:\n   return\"option %s: %s\"%(self.option_id,self.msg)\n  else :\n   return self.msg\n   \nclass OptionConflictError(OptionError):\n ''\n\n \n \nclass OptionValueError(OptParseError):\n ''\n\n\n \n \nclass BadOptionError(OptParseError):\n ''\n\n \n def __init__(self,opt_str):\n  self.opt_str=opt_str\n  \n def __str__(self):\n  return _(\"no such option: %s\")%self.opt_str\n  \nclass AmbiguousOptionError(BadOptionError):\n ''\n\n \n def __init__(self,opt_str,possibilities):\n  BadOptionError.__init__(self,opt_str)\n  self.possibilities=possibilities\n  \n def __str__(self):\n  return (_(\"ambiguous option: %s (%s?)\")\n  %(self.opt_str,\", \".join(self.possibilities)))\n  \n  \nclass HelpFormatter:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n NO_DEFAULT_VALUE=\"none\"\n \n def __init__(self,\n indent_increment,\n max_help_position,\n width,\n short_first):\n  self.parser=None\n  self.indent_increment=indent_increment\n  self.help_position=self.max_help_position=max_help_position\n  if width is None :\n   try :\n    width=int(os.environ['COLUMNS'])\n   except (KeyError,ValueError):\n    width=80\n   width -=2\n  self.width=width\n  self.current_indent=0\n  self.level=0\n  self.help_width=None\n  self.short_first=short_first\n  self.default_tag=\"%default\"\n  self.option_strings={}\n  self._short_opt_fmt=\"%s %s\"\n  self._long_opt_fmt=\"%s=%s\"\n  \n def set_parser(self,parser):\n  self.parser=parser\n  \n def set_short_opt_delimiter(self,delim):\n  if delim not in (\"\",\" \"):\n   raise ValueError(\n   \"invalid metavar delimiter for short options: %r\"%delim)\n  self._short_opt_fmt=\"%s\"+delim+\"%s\"\n  \n def set_long_opt_delimiter(self,delim):\n  if delim not in (\"=\",\" \"):\n   raise ValueError(\n   \"invalid metavar delimiter for long options: %r\"%delim)\n  self._long_opt_fmt=\"%s\"+delim+\"%s\"\n  \n def indent(self):\n  self.current_indent +=self.indent_increment\n  self.level +=1\n  \n def dedent(self):\n  self.current_indent -=self.indent_increment\n  assert self.current_indent >=0,\"Indent decreased below 0.\"\n  self.level -=1\n  \n def format_usage(self,usage):\n  raise NotImplementedError(\"subclasses must implement\")\n  \n def format_heading(self,heading):\n  raise NotImplementedError(\"subclasses must implement\")\n  \n def _format_text(self,text):\n  ''\n\n\n  \n  text_width=self.width -self.current_indent\n  indent=\" \"*self.current_indent\n  return textwrap.fill(text,\n  text_width,\n  initial_indent=indent,\n  subsequent_indent=indent)\n  \n def format_description(self,description):\n  if description:\n   return self._format_text(description)+\"\\n\"\n  else :\n   return\"\"\n   \n def format_epilog(self,epilog):\n  if epilog:\n   return\"\\n\"+self._format_text(epilog)+\"\\n\"\n  else :\n   return\"\"\n   \n   \n def expand_default(self,option):\n  if self.parser is None or not self.default_tag:\n   return option.help\n   \n  default_value=self.parser.defaults.get(option.dest)\n  if default_value is NO_DEFAULT or default_value is None :\n   default_value=self.NO_DEFAULT_VALUE\n   \n  return option.help.replace(self.default_tag,str(default_value))\n  \n def format_option(self,option):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n  result=[]\n  opts=self.option_strings[option]\n  opt_width=self.help_position -self.current_indent -2\n  if len(opts)>opt_width:\n   opts=\"%*s%s\\n\"%(self.current_indent,\"\",opts)\n   indent_first=self.help_position\n  else :\n   opts=\"%*s%-*s  \"%(self.current_indent,\"\",opt_width,opts)\n   indent_first=0\n  result.append(opts)\n  if option.help:\n   help_text=self.expand_default(option)\n   help_lines=textwrap.wrap(help_text,self.help_width)\n   result.append(\"%*s%s\\n\"%(indent_first,\"\",help_lines[0]))\n   result.extend([\"%*s%s\\n\"%(self.help_position,\"\",line)\n   for line in help_lines[1:]])\n  elif opts[-1]!=\"\\n\":\n   result.append(\"\\n\")\n  return\"\".join(result)\n  \n def store_option_strings(self,parser):\n  self.indent()\n  max_len=0\n  for opt in parser.option_list:\n   strings=self.format_option_strings(opt)\n   self.option_strings[opt]=strings\n   max_len=max(max_len,len(strings)+self.current_indent)\n  self.indent()\n  for group in parser.option_groups:\n   for opt in group.option_list:\n    strings=self.format_option_strings(opt)\n    self.option_strings[opt]=strings\n    max_len=max(max_len,len(strings)+self.current_indent)\n  self.dedent()\n  self.dedent()\n  self.help_position=min(max_len+2,self.max_help_position)\n  self.help_width=self.width -self.help_position\n  \n def format_option_strings(self,option):\n  ''\n  if option.takes_value():\n   metavar=option.metavar or option.dest.upper()\n   short_opts=[self._short_opt_fmt %(sopt,metavar)\n   for sopt in option._short_opts]\n   long_opts=[self._long_opt_fmt %(lopt,metavar)\n   for lopt in option._long_opts]\n  else :\n   short_opts=option._short_opts\n   long_opts=option._long_opts\n   \n  if self.short_first:\n   opts=short_opts+long_opts\n  else :\n   opts=long_opts+short_opts\n   \n  return\", \".join(opts)\n  \nclass IndentedHelpFormatter(HelpFormatter):\n ''\n \n \n def __init__(self,\n indent_increment=2,\n max_help_position=24,\n width=None ,\n short_first=1):\n  HelpFormatter.__init__(\n  self,indent_increment,max_help_position,width,short_first)\n  \n def format_usage(self,usage):\n  return _(\"Usage: %s\\n\")%usage\n  \n def format_heading(self,heading):\n  return\"%*s%s:\\n\"%(self.current_indent,\"\",heading)\n  \n  \nclass TitledHelpFormatter(HelpFormatter):\n ''\n \n \n def __init__(self,\n indent_increment=0,\n max_help_position=24,\n width=None ,\n short_first=0):\n  HelpFormatter.__init__(\n  self,indent_increment,max_help_position,width,short_first)\n  \n def format_usage(self,usage):\n  return\"%s  %s\\n\"%(self.format_heading(_(\"Usage\")),usage)\n  \n def format_heading(self,heading):\n  return\"%s\\n%s\\n\"%(heading,\"=-\"[self.level]*len(heading))\n  \n  \ndef _parse_num(val,type):\n if val[:2].lower()==\"0x\":\n  radix=16\n elif val[:2].lower()==\"0b\":\n  radix=2\n  val=val[2:]or\"0\"\n elif val[:1]==\"0\":\n  radix=8\n else :\n  radix=10\n  \n return type(val,radix)\n \ndef _parse_int(val):\n return _parse_num(val,int)\n \n_builtin_cvt={\"int\":(_parse_int,_(\"integer\")),\n\"long\":(_parse_int,_(\"integer\")),\n\"float\":(float,_(\"floating-point\")),\n\"complex\":(complex,_(\"complex\"))}\n\ndef check_builtin(option,opt,value):\n (cvt,what)=_builtin_cvt[option.type]\n try :\n  return cvt(value)\n except ValueError:\n  raise OptionValueError(\n  _(\"option %s: invalid %s value: %r\")%(opt,what,value))\n  \ndef check_choice(option,opt,value):\n if value in option.choices:\n  return value\n else :\n  choices=\", \".join(map(repr,option.choices))\n  raise OptionValueError(\n  _(\"option %s: invalid choice: %r (choose from %s)\")\n  %(opt,value,choices))\n  \n  \n  \nNO_DEFAULT=(\"NO\",\"DEFAULT\")\n\n\nclass Option:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n ATTRS=['action',\n 'type',\n 'dest',\n 'default',\n 'nargs',\n 'const',\n 'choices',\n 'callback',\n 'callback_args',\n 'callback_kwargs',\n 'help',\n 'metavar']\n \n \n \n ACTIONS=(\"store\",\n \"store_const\",\n \"store_true\",\n \"store_false\",\n \"append\",\n \"append_const\",\n \"count\",\n \"callback\",\n \"help\",\n \"version\")\n \n \n \n \n STORE_ACTIONS=(\"store\",\n \"store_const\",\n \"store_true\",\n \"store_false\",\n \"append\",\n \"append_const\",\n \"count\")\n \n \n \n TYPED_ACTIONS=(\"store\",\n \"append\",\n \"callback\")\n \n \n \n ALWAYS_TYPED_ACTIONS=(\"store\",\n \"append\")\n \n \n CONST_ACTIONS=(\"store_const\",\n \"append_const\")\n \n \n \n TYPES=(\"string\",\"int\",\"long\",\"float\",\"complex\",\"choice\")\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n TYPE_CHECKER={\"int\":check_builtin,\n \"long\":check_builtin,\n \"float\":check_builtin,\n \"complex\":check_builtin,\n \"choice\":check_choice,\n }\n \n \n \n \n \n \n \n \n \n \n CHECK_METHODS=None\n \n \n \n \n def __init__(self,*opts,**attrs):\n \n \n  self._short_opts=[]\n  self._long_opts=[]\n  opts=self._check_opt_strings(opts)\n  self._set_opt_strings(opts)\n  \n  \n  self._set_attrs(attrs)\n  \n  \n  \n  \n  \n  \n  for checker in self.CHECK_METHODS:\n   checker(self)\n   \n def _check_opt_strings(self,opts):\n \n \n \n  opts=[opt for opt in opts if opt]\n  if not opts:\n   raise TypeError(\"at least one option string must be supplied\")\n  return opts\n  \n def _set_opt_strings(self,opts):\n  for opt in opts:\n   if len(opt)<2:\n    raise OptionError(\n    \"invalid option string %r: \"\n    \"must be at least two characters long\"%opt,self)\n   elif len(opt)==2:\n    if not (opt[0]==\"-\"and opt[1]!=\"-\"):\n     raise OptionError(\n     \"invalid short option string %r: \"\n     \"must be of the form -x, (x any non-dash char)\"%opt,\n     self)\n    self._short_opts.append(opt)\n   else :\n    if not (opt[0:2]==\"--\"and opt[2]!=\"-\"):\n     raise OptionError(\n     \"invalid long option string %r: \"\n     \"must start with --, followed by non-dash\"%opt,\n     self)\n    self._long_opts.append(opt)\n    \n def _set_attrs(self,attrs):\n  for attr in self.ATTRS:\n   if attr in attrs:\n    setattr(self,attr,attrs[attr])\n    del attrs[attr]\n   else :\n    if attr =='default':\n     setattr(self,attr,NO_DEFAULT)\n    else :\n     setattr(self,attr,None )\n  if attrs:\n   attrs=sorted(attrs.keys())\n   raise OptionError(\n   \"invalid keyword arguments: %s\"%\", \".join(attrs),\n   self)\n   \n   \n   \n   \n def _check_action(self):\n  if self.action is None :\n   self.action=\"store\"\n  elif self.action not in self.ACTIONS:\n   raise OptionError(\"invalid action: %r\"%self.action,self)\n   \n def _check_type(self):\n  if self.type is None :\n   if self.action in self.ALWAYS_TYPED_ACTIONS:\n    if self.choices is not None :\n    \n     self.type=\"choice\"\n    else :\n    \n     self.type=\"string\"\n  else :\n  \n  \n  \n  \n  \n   import builtins\n   if (isinstance(self.type,type)or\n   (hasattr(self.type,\"__name__\")and\n   getattr(builtins,self.type.__name__,None )is self.type)):\n    self.type=self.type.__name__\n    \n   if self.type ==\"str\":\n    self.type=\"string\"\n    \n   if self.type not in self.TYPES:\n    raise OptionError(\"invalid option type: %r\"%self.type,self)\n   if self.action not in self.TYPED_ACTIONS:\n    raise OptionError(\n    \"must not supply a type for action %r\"%self.action,self)\n    \n def _check_choice(self):\n  if self.type ==\"choice\":\n   if self.choices is None :\n    raise OptionError(\n    \"must supply a list of choices for type 'choice'\",self)\n   elif not isinstance(self.choices,(tuple,list)):\n    raise OptionError(\n    \"choices must be a list of strings ('%s' supplied)\"\n    %str(type(self.choices)).split(\"'\")[1],self)\n  elif self.choices is not None :\n   raise OptionError(\n   \"must not supply choices for type %r\"%self.type,self)\n   \n def _check_dest(self):\n \n \n  takes_value=(self.action in self.STORE_ACTIONS or\n  self.type is not None )\n  if self.dest is None and takes_value:\n  \n  \n  \n   if self._long_opts:\n   \n    self.dest=self._long_opts[0][2:].replace('-','_')\n   else :\n    self.dest=self._short_opts[0][1]\n    \n def _check_const(self):\n  if self.action not in self.CONST_ACTIONS and self.const is not None :\n   raise OptionError(\n   \"'const' must not be supplied for action %r\"%self.action,\n   self)\n   \n def _check_nargs(self):\n  if self.action in self.TYPED_ACTIONS:\n   if self.nargs is None :\n    self.nargs=1\n  elif self.nargs is not None :\n   raise OptionError(\n   \"'nargs' must not be supplied for action %r\"%self.action,\n   self)\n   \n def _check_callback(self):\n  if self.action ==\"callback\":\n   if not callable(self.callback):\n    raise OptionError(\n    \"callback not callable: %r\"%self.callback,self)\n   if (self.callback_args is not None and\n   not isinstance(self.callback_args,tuple)):\n    raise OptionError(\n    \"callback_args, if supplied, must be a tuple: not %r\"\n    %self.callback_args,self)\n   if (self.callback_kwargs is not None and\n   not isinstance(self.callback_kwargs,dict)):\n    raise OptionError(\n    \"callback_kwargs, if supplied, must be a dict: not %r\"\n    %self.callback_kwargs,self)\n  else :\n   if self.callback is not None :\n    raise OptionError(\n    \"callback supplied (%r) for non-callback option\"\n    %self.callback,self)\n   if self.callback_args is not None :\n    raise OptionError(\n    \"callback_args supplied for non-callback option\",self)\n   if self.callback_kwargs is not None :\n    raise OptionError(\n    \"callback_kwargs supplied for non-callback option\",self)\n    \n    \n CHECK_METHODS=[_check_action,\n _check_type,\n _check_choice,\n _check_dest,\n _check_const,\n _check_nargs,\n _check_callback]\n \n \n \n \n def __str__(self):\n  return\"/\".join(self._short_opts+self._long_opts)\n  \n __repr__=_repr\n \n def takes_value(self):\n  return self.type is not None\n  \n def get_opt_string(self):\n  if self._long_opts:\n   return self._long_opts[0]\n  else :\n   return self._short_opts[0]\n   \n   \n   \n   \n def check_value(self,opt,value):\n  checker=self.TYPE_CHECKER.get(self.type)\n  if checker is None :\n   return value\n  else :\n   return checker(self,opt,value)\n   \n def convert_value(self,opt,value):\n  if value is not None :\n   if self.nargs ==1:\n    return self.check_value(opt,value)\n   else :\n    return tuple([self.check_value(opt,v)for v in value])\n    \n def process(self,opt,value,values,parser):\n \n \n \n  value=self.convert_value(opt,value)\n  \n  \n  \n  \n  return self.take_action(\n  self.action,self.dest,opt,value,values,parser)\n  \n def take_action(self,action,dest,opt,value,values,parser):\n  if action ==\"store\":\n   setattr(values,dest,value)\n  elif action ==\"store_const\":\n   setattr(values,dest,self.const)\n  elif action ==\"store_true\":\n   setattr(values,dest,True )\n  elif action ==\"store_false\":\n   setattr(values,dest,False )\n  elif action ==\"append\":\n   values.ensure_value(dest,[]).append(value)\n  elif action ==\"append_const\":\n   values.ensure_value(dest,[]).append(self.const)\n  elif action ==\"count\":\n   setattr(values,dest,values.ensure_value(dest,0)+1)\n  elif action ==\"callback\":\n   args=self.callback_args or ()\n   kwargs=self.callback_kwargs or {}\n   self.callback(self,opt,value,parser,*args,**kwargs)\n  elif action ==\"help\":\n   parser.print_help()\n   parser.exit()\n  elif action ==\"version\":\n   parser.print_version()\n   parser.exit()\n  else :\n   raise ValueError(\"unknown action %r\"%self.action)\n   \n  return 1\n  \n  \n  \n  \nSUPPRESS_HELP=\"SUPPRESS\"+\"HELP\"\nSUPPRESS_USAGE=\"SUPPRESS\"+\"USAGE\"\n\nclass Values:\n\n def __init__(self,defaults=None ):\n  if defaults:\n   for (attr,val)in defaults.items():\n    setattr(self,attr,val)\n    \n def __str__(self):\n  return str(self.__dict__)\n  \n __repr__=_repr\n \n def __eq__(self,other):\n  if isinstance(other,Values):\n   return self.__dict__ ==other.__dict__\n  elif isinstance(other,dict):\n   return self.__dict__ ==other\n  else :\n   return NotImplemented\n   \n def _update_careful(self,dict):\n  ''\n\n\n\n\n  \n  for attr in dir(self):\n   if attr in dict:\n    dval=dict[attr]\n    if dval is not None :\n     setattr(self,attr,dval)\n     \n def _update_loose(self,dict):\n  ''\n\n\n\n  \n  self.__dict__.update(dict)\n  \n def _update(self,dict,mode):\n  if mode ==\"careful\":\n   self._update_careful(dict)\n  elif mode ==\"loose\":\n   self._update_loose(dict)\n  else :\n   raise ValueError(\"invalid update mode: %r\"%mode)\n   \n def read_module(self,modname,mode=\"careful\"):\n  __import__(modname)\n  mod=sys.modules[modname]\n  self._update(vars(mod),mode)\n  \n def read_file(self,filename,mode=\"careful\"):\n  vars={}\n  exec(open(filename).read(),vars)\n  self._update(vars,mode)\n  \n def ensure_value(self,attr,value):\n  if not hasattr(self,attr)or getattr(self,attr)is None :\n   setattr(self,attr,value)\n  return getattr(self,attr)\n  \n  \nclass OptionContainer:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,option_class,conflict_handler,description):\n \n \n \n \n  self._create_option_list()\n  \n  self.option_class=option_class\n  self.set_conflict_handler(conflict_handler)\n  self.set_description(description)\n  \n def _create_option_mappings(self):\n \n \n \n  self._short_opt={}\n  self._long_opt={}\n  self.defaults={}\n  \n  \n def _share_option_mappings(self,parser):\n \n \n  self._short_opt=parser._short_opt\n  self._long_opt=parser._long_opt\n  self.defaults=parser.defaults\n  \n def set_conflict_handler(self,handler):\n  if handler not in (\"error\",\"resolve\"):\n   raise ValueError(\"invalid conflict_resolution value %r\"%handler)\n  self.conflict_handler=handler\n  \n def set_description(self,description):\n  self.description=description\n  \n def get_description(self):\n  return self.description\n  \n  \n def destroy(self):\n  ''\n  del self._short_opt\n  del self._long_opt\n  del self.defaults\n  \n  \n  \n  \n def _check_conflict(self,option):\n  conflict_opts=[]\n  for opt in option._short_opts:\n   if opt in self._short_opt:\n    conflict_opts.append((opt,self._short_opt[opt]))\n  for opt in option._long_opts:\n   if opt in self._long_opt:\n    conflict_opts.append((opt,self._long_opt[opt]))\n    \n  if conflict_opts:\n   handler=self.conflict_handler\n   if handler ==\"error\":\n    raise OptionConflictError(\n    \"conflicting option string(s): %s\"\n    %\", \".join([co[0]for co in conflict_opts]),\n    option)\n   elif handler ==\"resolve\":\n    for (opt,c_option)in conflict_opts:\n     if opt.startswith(\"--\"):\n      c_option._long_opts.remove(opt)\n      del self._long_opt[opt]\n     else :\n      c_option._short_opts.remove(opt)\n      del self._short_opt[opt]\n     if not (c_option._short_opts or c_option._long_opts):\n      c_option.container.option_list.remove(c_option)\n      \n def add_option(self,*args,**kwargs):\n  ''\n\n  \n  if isinstance(args[0],str):\n   option=self.option_class(*args,**kwargs)\n  elif len(args)==1 and not kwargs:\n   option=args[0]\n   if not isinstance(option,Option):\n    raise TypeError(\"not an Option instance: %r\"%option)\n  else :\n   raise TypeError(\"invalid arguments\")\n   \n  self._check_conflict(option)\n  \n  self.option_list.append(option)\n  option.container=self\n  for opt in option._short_opts:\n   self._short_opt[opt]=option\n  for opt in option._long_opts:\n   self._long_opt[opt]=option\n   \n  if option.dest is not None :\n   if option.default is not NO_DEFAULT:\n    self.defaults[option.dest]=option.default\n   elif option.dest not in self.defaults:\n    self.defaults[option.dest]=None\n    \n  return option\n  \n def add_options(self,option_list):\n  for option in option_list:\n   self.add_option(option)\n   \n   \n   \n def get_option(self,opt_str):\n  return (self._short_opt.get(opt_str)or\n  self._long_opt.get(opt_str))\n  \n def has_option(self,opt_str):\n  return (opt_str in self._short_opt or\n  opt_str in self._long_opt)\n  \n def remove_option(self,opt_str):\n  option=self._short_opt.get(opt_str)\n  if option is None :\n   option=self._long_opt.get(opt_str)\n  if option is None :\n   raise ValueError(\"no such option %r\"%opt_str)\n   \n  for opt in option._short_opts:\n   del self._short_opt[opt]\n  for opt in option._long_opts:\n   del self._long_opt[opt]\n  option.container.option_list.remove(option)\n  \n  \n  \n  \n def format_option_help(self,formatter):\n  if not self.option_list:\n   return\"\"\n  result=[]\n  for option in self.option_list:\n   if not option.help is SUPPRESS_HELP:\n    result.append(formatter.format_option(option))\n  return\"\".join(result)\n  \n def format_description(self,formatter):\n  return formatter.format_description(self.get_description())\n  \n def format_help(self,formatter):\n  result=[]\n  if self.description:\n   result.append(self.format_description(formatter))\n  if self.option_list:\n   result.append(self.format_option_help(formatter))\n  return\"\\n\".join(result)\n  \n  \nclass OptionGroup(OptionContainer):\n\n def __init__(self,parser,title,description=None ):\n  self.parser=parser\n  OptionContainer.__init__(\n  self,parser.option_class,parser.conflict_handler,description)\n  self.title=title\n  \n def _create_option_list(self):\n  self.option_list=[]\n  self._share_option_mappings(self.parser)\n  \n def set_title(self,title):\n  self.title=title\n  \n def destroy(self):\n  ''\n  OptionContainer.destroy(self)\n  del self.option_list\n  \n  \n  \n def format_help(self,formatter):\n  result=formatter.format_heading(self.title)\n  formatter.indent()\n  result +=OptionContainer.format_help(self,formatter)\n  formatter.dedent()\n  return result\n  \n  \nclass OptionParser(OptionContainer):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n standard_option_list=[]\n \n def __init__(self,\n usage=None ,\n option_list=None ,\n option_class=Option,\n version=None ,\n conflict_handler=\"error\",\n description=None ,\n formatter=None ,\n add_help_option=True ,\n prog=None ,\n epilog=None ):\n  OptionContainer.__init__(\n  self,option_class,conflict_handler,description)\n  self.set_usage(usage)\n  self.prog=prog\n  self.version=version\n  self.allow_interspersed_args=True\n  self.process_default_values=True\n  if formatter is None :\n   formatter=IndentedHelpFormatter()\n  self.formatter=formatter\n  self.formatter.set_parser(self)\n  self.epilog=epilog\n  \n  \n  \n  \n  \n  self._populate_option_list(option_list,\n  add_help=add_help_option)\n  \n  self._init_parsing_state()\n  \n  \n def destroy(self):\n  ''\n\n\n\n\n  \n  OptionContainer.destroy(self)\n  for group in self.option_groups:\n   group.destroy()\n  del self.option_list\n  del self.option_groups\n  del self.formatter\n  \n  \n  \n  \n  \n def _create_option_list(self):\n  self.option_list=[]\n  self.option_groups=[]\n  self._create_option_mappings()\n  \n def _add_help_option(self):\n  self.add_option(\"-h\",\"--help\",\n  action=\"help\",\n  help=_(\"show this help message and exit\"))\n  \n def _add_version_option(self):\n  self.add_option(\"--version\",\n  action=\"version\",\n  help=_(\"show program's version number and exit\"))\n  \n def _populate_option_list(self,option_list,add_help=True ):\n  if self.standard_option_list:\n   self.add_options(self.standard_option_list)\n  if option_list:\n   self.add_options(option_list)\n  if self.version:\n   self._add_version_option()\n  if add_help:\n   self._add_help_option()\n   \n def _init_parsing_state(self):\n \n  self.rargs=None\n  self.largs=None\n  self.values=None\n  \n  \n  \n  \n def set_usage(self,usage):\n  if usage is None :\n   self.usage=_(\"%prog [options]\")\n  elif usage is SUPPRESS_USAGE:\n   self.usage=None\n   \n  elif usage.lower().startswith(\"usage: \"):\n   self.usage=usage[7:]\n  else :\n   self.usage=usage\n   \n def enable_interspersed_args(self):\n  ''\n\n\n\n  \n  self.allow_interspersed_args=True\n  \n def disable_interspersed_args(self):\n  ''\n\n\n\n  \n  self.allow_interspersed_args=False\n  \n def set_process_default_values(self,process):\n  self.process_default_values=process\n  \n def set_default(self,dest,value):\n  self.defaults[dest]=value\n  \n def set_defaults(self,**kwargs):\n  self.defaults.update(kwargs)\n  \n def _get_all_options(self):\n  options=self.option_list[:]\n  for group in self.option_groups:\n   options.extend(group.option_list)\n  return options\n  \n def get_default_values(self):\n  if not self.process_default_values:\n  \n   return Values(self.defaults)\n   \n  defaults=self.defaults.copy()\n  for option in self._get_all_options():\n   default=defaults.get(option.dest)\n   if isinstance(default,str):\n    opt_str=option.get_opt_string()\n    defaults[option.dest]=option.check_value(opt_str,default)\n    \n  return Values(defaults)\n  \n  \n  \n  \n def add_option_group(self,*args,**kwargs):\n \n  if isinstance(args[0],str):\n   group=OptionGroup(self,*args,**kwargs)\n  elif len(args)==1 and not kwargs:\n   group=args[0]\n   if not isinstance(group,OptionGroup):\n    raise TypeError(\"not an OptionGroup instance: %r\"%group)\n   if group.parser is not self:\n    raise ValueError(\"invalid OptionGroup (wrong parser)\")\n  else :\n   raise TypeError(\"invalid arguments\")\n   \n  self.option_groups.append(group)\n  return group\n  \n def get_option_group(self,opt_str):\n  option=(self._short_opt.get(opt_str)or\n  self._long_opt.get(opt_str))\n  if option and option.container is not self:\n   return option.container\n  return None\n  \n  \n  \n  \n def _get_args(self,args):\n  if args is None :\n   return sys.argv[1:]\n  else :\n   return args[:]\n   \n def parse_args(self,args=None ,values=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  rargs=self._get_args(args)\n  if values is None :\n   values=self.get_default_values()\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n  self.rargs=rargs\n  self.largs=largs=[]\n  self.values=values\n  \n  try :\n   stop=self._process_args(largs,rargs,values)\n  except (BadOptionError,OptionValueError)as err:\n   self.error(str(err))\n   \n  args=largs+rargs\n  return self.check_values(values,args)\n  \n def check_values(self,values,args):\n  ''\n\n\n\n\n\n\n\n\n  \n  return (values,args)\n  \n def _process_args(self,largs,rargs,values):\n  ''\n\n\n\n\n\n\n\n  \n  while rargs:\n   arg=rargs[0]\n   \n   \n   \n   if arg ==\"--\":\n    del rargs[0]\n    return\n   elif arg[0:2]==\"--\":\n   \n    self._process_long_opt(rargs,values)\n   elif arg[:1]==\"-\"and len(arg)>1:\n   \n   \n    self._process_short_opts(rargs,values)\n   elif self.allow_interspersed_args:\n    largs.append(arg)\n    del rargs[0]\n   else :\n    return\n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n def _match_long_opt(self,opt):\n  ''\n\n\n\n\n  \n  return _match_abbrev(opt,self._long_opt)\n  \n def _process_long_opt(self,rargs,values):\n  arg=rargs.pop(0)\n  \n  \n  \n  if\"=\"in arg:\n   (opt,next_arg)=arg.split(\"=\",1)\n   rargs.insert(0,next_arg)\n   had_explicit_value=True\n  else :\n   opt=arg\n   had_explicit_value=False\n   \n  opt=self._match_long_opt(opt)\n  option=self._long_opt[opt]\n  if option.takes_value():\n   nargs=option.nargs\n   if len(rargs)<nargs:\n    self.error(ngettext(\n    \"%(option)s option requires %(number)d argument\",\n    \"%(option)s option requires %(number)d arguments\",\n    nargs)%{\"option\":opt,\"number\":nargs})\n   elif nargs ==1:\n    value=rargs.pop(0)\n   else :\n    value=tuple(rargs[0:nargs])\n    del rargs[0:nargs]\n    \n  elif had_explicit_value:\n   self.error(_(\"%s option does not take a value\")%opt)\n   \n  else :\n   value=None\n   \n  option.process(opt,value,values,self)\n  \n def _process_short_opts(self,rargs,values):\n  arg=rargs.pop(0)\n  stop=False\n  i=1\n  for ch in arg[1:]:\n   opt=\"-\"+ch\n   option=self._short_opt.get(opt)\n   i +=1\n   \n   if not option:\n    raise BadOptionError(opt)\n   if option.takes_value():\n   \n   \n    if i <len(arg):\n     rargs.insert(0,arg[i:])\n     stop=True\n     \n    nargs=option.nargs\n    if len(rargs)<nargs:\n     self.error(ngettext(\n     \"%(option)s option requires %(number)d argument\",\n     \"%(option)s option requires %(number)d arguments\",\n     nargs)%{\"option\":opt,\"number\":nargs})\n    elif nargs ==1:\n     value=rargs.pop(0)\n    else :\n     value=tuple(rargs[0:nargs])\n     del rargs[0:nargs]\n     \n   else :\n    value=None\n    \n   option.process(opt,value,values,self)\n   \n   if stop:\n    break\n    \n    \n    \n    \n def get_prog_name(self):\n  if self.prog is None :\n   return os.path.basename(sys.argv[0])\n  else :\n   return self.prog\n   \n def expand_prog_name(self,s):\n  return s.replace(\"%prog\",self.get_prog_name())\n  \n def get_description(self):\n  return self.expand_prog_name(self.description)\n  \n def exit(self,status=0,msg=None ):\n  if msg:\n   sys.stderr.write(msg)\n  sys.exit(status)\n  \n def error(self,msg):\n  ''\n\n\n\n\n  \n  self.print_usage(sys.stderr)\n  self.exit(2,\"%s: error: %s\\n\"%(self.get_prog_name(),msg))\n  \n def get_usage(self):\n  if self.usage:\n   return self.formatter.format_usage(\n   self.expand_prog_name(self.usage))\n  else :\n   return\"\"\n   \n def print_usage(self,file=None ):\n  ''\n\n\n\n\n\n\n  \n  if self.usage:\n   print(self.get_usage(),file=file)\n   \n def get_version(self):\n  if self.version:\n   return self.expand_prog_name(self.version)\n  else :\n   return\"\"\n   \n def print_version(self,file=None ):\n  ''\n\n\n\n\n\n  \n  if self.version:\n   print(self.get_version(),file=file)\n   \n def format_option_help(self,formatter=None ):\n  if formatter is None :\n   formatter=self.formatter\n  formatter.store_option_strings(self)\n  result=[]\n  result.append(formatter.format_heading(_(\"Options\")))\n  formatter.indent()\n  if self.option_list:\n   result.append(OptionContainer.format_option_help(self,formatter))\n   result.append(\"\\n\")\n  for group in self.option_groups:\n   result.append(group.format_help(formatter))\n   result.append(\"\\n\")\n  formatter.dedent()\n  \n  return\"\".join(result[:-1])\n  \n def format_epilog(self,formatter):\n  return formatter.format_epilog(self.epilog)\n  \n def format_help(self,formatter=None ):\n  if formatter is None :\n   formatter=self.formatter\n  result=[]\n  if self.usage:\n   result.append(self.get_usage()+\"\\n\")\n  if self.description:\n   result.append(self.format_description(formatter)+\"\\n\")\n  result.append(self.format_option_help(formatter))\n  result.append(self.format_epilog(formatter))\n  return\"\".join(result)\n  \n def print_help(self,file=None ):\n  ''\n\n\n\n  \n  if file is None :\n   file=sys.stdout\n  file.write(self.format_help())\n  \n  \n  \n  \ndef _match_abbrev(s,wordmap):\n ''\n\n\n\n\n \n \n if s in wordmap:\n  return s\n else :\n \n  possibilities=[word for word in wordmap.keys()\n  if word.startswith(s)]\n  \n  if len(possibilities)==1:\n   return possibilities[0]\n  elif not possibilities:\n   raise BadOptionError(s)\n  else :\n  \n   possibilities.sort()\n   raise AmbiguousOptionError(s,possibilities)\n   \n   \n   \n   \n   \n   \nmake_option=Option\n"], "modulefinder": [".js", "var $module=(function($B){\n\nvar _b_=$B.builtins\nvar _mod = {}\n\n$ModuleFinderDict = {__class__:$B.$type,__name__:'ModuleFinder'}\n$ModuleFinderDict.__mro__ = [$ModuleFinderDict,_b_.object.$dict]\n\n$ModuleFinderDict.run_script = function(self, pathname){\n    // pathname is the url of a Python script\n    var py_src = _b_.$open(pathname).read()\n    // transform into internal Brython tree structure\n    var root = $B.py2js(py_src)\n    // walk the tree to find occurences of imports\n    function walk(node){\n        var modules = []\n        var ctx = node.context\n        if(ctx && ctx.type=='node'){ctx = ctx.tree[0]}\n\n        if(ctx && ctx.type==\"import\"){\n            for(var i=0, _len_i = ctx.tree.length; i < _len_i;i++){\n                if(modules.indexOf(ctx.tree[i].name)==-1){\n                    modules.push(ctx.tree[i].name)\n                }\n            }\n        }else if(ctx && ctx.type==\"from\"){\n            if(modules.indexOf(ctx.module)==-1){\n                modules.push(ctx.module)\n            }\n        }\n        \n        for(var i=0, _len_i = node.children.length; i < _len_i;i++){\n            mods = walk(node.children[i])\n            for(var j=0, _len_j = mods.length; j < _len_j;j++){\n                if(modules.indexOf(mods[j])==-1){modules.push(mods[j])}\n            }\n        }\n        return modules\n    }\n    self.modules = walk(root)\n}\n\n_mod.ModuleFinder = function(){return {__class__:$ModuleFinderDict}\n}\n_mod.ModuleFinder.$dict = $ModuleFinderDict\n_mod.ModuleFinder.__class__ = $B.$factory\n$ModuleFinderDict.$factory = _mod.ModuleFinder\n\nreturn _mod\n})(__BRYTHON__)\n"], "select": [".py", "''\n\n\n\n\n\n\n\n\n\nimport errno\nimport os\nimport queue\nimport socket\n\nclass error(Exception):pass\n\nALL=None\n\n_exception_map={\n\n\n\n\n\n\n}\n\ndef _map_exception(exc,circumstance=ALL):\n try :\n  mapped_exception=_exception_map[(exc.__class__,circumstance)]\n  mapped_exception.java_exception=exc\n  return mapped_exception\n except KeyError:\n  return error(-1,'Unmapped java exception: <%s:%s>'%(exc.toString(),circumstance))\n  \nPOLLIN=1\nPOLLOUT=2\n\n\n\n\n\nPOLLPRI=4\nPOLLERR=8\nPOLLHUP=16\nPOLLNVAL=32\n\ndef _getselectable(selectable_object):\n try :\n  channel=selectable_object.getchannel()\n except :\n  try :\n   channel=selectable_object.fileno().getChannel()\n  except :\n   raise TypeError(\"Object '%s' is not watchable\"%selectable_object,\n   errno.ENOTSOCK)\n   \n if channel and not isinstance(channel,java.nio.channels.SelectableChannel):\n  raise TypeError(\"Object '%s' is not watchable\"%selectable_object,\n  errno.ENOTSOCK)\n return channel\n \nclass poll:\n\n def __init__(self):\n  self.selector=java.nio.channels.Selector.open()\n  self.chanmap={}\n  self.unconnected_sockets=[]\n  \n def _register_channel(self,socket_object,channel,mask):\n  jmask=0\n  if mask&POLLIN:\n  \n   if channel.validOps()&OP_ACCEPT:\n    jmask=OP_ACCEPT\n   else :\n    jmask=OP_READ\n  if mask&POLLOUT:\n   if channel.validOps()&OP_WRITE:\n    jmask |=OP_WRITE\n   if channel.validOps()&OP_CONNECT:\n    jmask |=OP_CONNECT\n  selectionkey=channel.register(self.selector,jmask)\n  self.chanmap[channel]=(socket_object,selectionkey)\n  \n def _check_unconnected_sockets(self):\n  temp_list=[]\n  for socket_object,mask in self.unconnected_sockets:\n   channel=_getselectable(socket_object)\n   if channel is not None :\n    self._register_channel(socket_object,channel,mask)\n   else :\n    temp_list.append((socket_object,mask))\n  self.unconnected_sockets=temp_list\n  \n def register(self,socket_object,mask=POLLIN |POLLOUT |POLLPRI):\n  try :\n   channel=_getselectable(socket_object)\n   if channel is None :\n   \n   \n    self.unconnected_sockets.append((socket_object,mask))\n    return\n   self._register_channel(socket_object,channel,mask)\n  except BaseException:\n  \n   raise _map_exception(jlx)\n   \n def unregister(self,socket_object):\n  try :\n   channel=_getselectable(socket_object)\n   self.chanmap[channel][1].cancel()\n   del self.chanmap[channel]\n  except BaseException:\n  \n   raise _map_exception(jlx)\n   \n def _dopoll(self,timeout):\n  if timeout is None or timeout <0:\n   self.selector.select()\n  else :\n   try :\n    timeout=int(timeout)\n    if not timeout:\n     self.selector.selectNow()\n    else :\n    \n     self.selector.select(timeout)\n   except ValueError as vx:\n    raise error(\"poll timeout must be a number of milliseconds or None\",errno.EINVAL)\n    \n  return self.selector.selectedKeys()\n  \n def poll(self,timeout=None ):\n  try :\n   self._check_unconnected_sockets()\n   selectedkeys=self._dopoll(timeout)\n   results=[]\n   for k in selectedkeys.iterator():\n    jmask=k.readyOps()\n    pymask=0\n    if jmask&OP_READ:pymask |=POLLIN\n    if jmask&OP_WRITE:pymask |=POLLOUT\n    if jmask&OP_ACCEPT:pymask |=POLLIN\n    if jmask&OP_CONNECT:pymask |=POLLOUT\n    \n    results.append((self.chanmap[k.channel()][0],pymask))\n   return results\n  except BaseException:\n  \n   raise _map_exception(jlx)\n   \n def _deregister_all(self):\n  try :\n   for k in self.selector.keys():\n    k.cancel()\n    \n   self.selector.selectNow()\n  except BaseException:\n  \n   raise _map_exception(jlx)\n   \n def close(self):\n  try :\n   self._deregister_all()\n   self.selector.close()\n  except BaseException:\n  \n   raise _map_exception(jlx)\n   \ndef _calcselecttimeoutvalue(value):\n if value is None :\n  return None\n try :\n  floatvalue=float(value)\n except Exception as x:\n  raise TypeError(\"Select timeout value must be a number or None\")\n if value <0:\n  raise error(\"Select timeout value cannot be negative\",errno.EINVAL)\n if floatvalue <0.000001:\n  return 0\n return int(floatvalue *1000)\n \n \n \n \nclass poll_object_cache:\n\n def __init__(self):\n  self.is_windows=os.name =='nt'\n  if self.is_windows:\n   self.poll_object_queue=Queue.Queue()\n  import atexit\n  atexit.register(self.finalize)\n  \n def get_poll_object(self):\n  if not self.is_windows:\n   return poll()\n  try :\n   return self.poll_object_queue.get(False )\n  except Queue.Empty:\n   return poll()\n   \n def release_poll_object(self,pobj):\n  if self.is_windows:\n   pobj._deregister_all()\n   self.poll_object_queue.put(pobj)\n  else :\n   pobj.close()\n   \n def finalize(self):\n  if self.is_windows:\n   while True :\n    try :\n     p=self.poll_object_queue.get(False )\n     p.close()\n    except Queue.Empty:\n     return\n     \n_poll_object_cache=poll_object_cache()\n\ndef native_select(read_fd_list,write_fd_list,outofband_fd_list,timeout=None ):\n timeout=_calcselecttimeoutvalue(timeout)\n \n pobj=_poll_object_cache.get_poll_object()\n try :\n  registered_for_read={}\n  \n  for fd in read_fd_list:\n   pobj.register(fd,POLLIN)\n   registered_for_read[fd]=1\n   \n  for fd in write_fd_list:\n   if fd in registered_for_read:\n   \n    pobj.register(fd,POLLIN |POLLOUT)\n   else :\n    pobj.register(fd,POLLOUT)\n  results=pobj.poll(timeout)\n  \n  read_ready_list,write_ready_list,oob_ready_list=[],[],[]\n  for fd,mask in results:\n   if mask&POLLIN:\n    read_ready_list.append(fd)\n   if mask&POLLOUT:\n    write_ready_list.append(fd)\n  return read_ready_list,write_ready_list,oob_ready_list\n finally :\n  _poll_object_cache.release_poll_object(pobj)\n  \nselect=native_select\n\ndef cpython_compatible_select(read_fd_list,write_fd_list,outofband_fd_list,timeout=None ):\n\n\n modified_channels=[]\n try :\n  for socket_list in [read_fd_list,write_fd_list,outofband_fd_list]:\n   for s in socket_list:\n    channel=_getselectable(s)\n    if channel.isBlocking():\n     modified_channels.append(channel)\n     channel.configureBlocking(0)\n  return native_select(read_fd_list,write_fd_list,outofband_fd_list,timeout)\n finally :\n  for channel in modified_channels:\n   channel.configureBlocking(1)\n"], "logging.config": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\"\"\"\nConfiguration functions for the logging package for Python. The core package\nis based on PEP 282 and comments thereto in comp.lang.python, and influenced\nby Apache's log4j system.\n\nCopyright (C) 2001-2013 Vinay Sajip. All Rights Reserved.\n\nTo use, simply 'import logging' and log away!\n\"\"\"\n\nimport sys,logging,logging.handlers,socket,struct,traceback,re\nimport io\n\ntry :\n import _thread as thread\n import threading\nexcept ImportError:\n thread=None\n \nfrom socketserver import ThreadingTCPServer,StreamRequestHandler\n\n\nDEFAULT_LOGGING_CONFIG_PORT=9030\n\nif sys.platform ==\"win32\":\n RESET_ERROR=10054\nelse :\n RESET_ERROR=104\n \n \n \n \n \n \n_listener=None\n\ndef fileConfig(fname,defaults=None ,disable_existing_loggers=True ):\n ''\n\n\n\n\n\n\n \n import configparser\n \n cp=configparser.ConfigParser(defaults)\n if hasattr(fname,'readline'):\n  cp.read_file(fname)\n else :\n  cp.read(fname)\n  \n formatters=_create_formatters(cp)\n \n \n logging._acquireLock()\n try :\n  logging._handlers.clear()\n  del logging._handlerList[:]\n  \n  handlers=_install_handlers(cp,formatters)\n  _install_loggers(cp,handlers,disable_existing_loggers)\n finally :\n  logging._releaseLock()\n  \n  \ndef _resolve(name):\n ''\n name=name.split('.')\n used=name.pop(0)\n found=__import__(used)\n for n in name:\n  used=used+'.'+n\n  try :\n   found=getattr(found,n)\n  except AttributeError:\n   __import__(used)\n   found=getattr(found,n)\n return found\n \ndef _strip_spaces(alist):\n return map(lambda x:x.strip(),alist)\n \ndef _create_formatters(cp):\n ''\n flist=cp[\"formatters\"][\"keys\"]\n if not len(flist):\n  return {}\n flist=flist.split(\",\")\n flist=_strip_spaces(flist)\n formatters={}\n for form in flist:\n  sectname=\"formatter_%s\"%form\n  fs=cp.get(sectname,\"format\",raw=True ,fallback=None )\n  dfs=cp.get(sectname,\"datefmt\",raw=True ,fallback=None )\n  c=logging.Formatter\n  class_name=cp[sectname].get(\"class\")\n  if class_name:\n   c=_resolve(class_name)\n  f=c(fs,dfs)\n  formatters[form]=f\n return formatters\n \n \ndef _install_handlers(cp,formatters):\n ''\n hlist=cp[\"handlers\"][\"keys\"]\n if not len(hlist):\n  return {}\n hlist=hlist.split(\",\")\n hlist=_strip_spaces(hlist)\n handlers={}\n fixups=[]\n for hand in hlist:\n  section=cp[\"handler_%s\"%hand]\n  klass=section[\"class\"]\n  fmt=section.get(\"formatter\",\"\")\n  try :\n   klass=eval(klass,vars(logging))\n  except (AttributeError,NameError):\n   klass=_resolve(klass)\n  args=section[\"args\"]\n  args=eval(args,vars(logging))\n  h=klass(*args)\n  if\"level\"in section:\n   level=section[\"level\"]\n   h.setLevel(logging._levelNames[level])\n  if len(fmt):\n   h.setFormatter(formatters[fmt])\n  if issubclass(klass,logging.handlers.MemoryHandler):\n   target=section.get(\"target\",\"\")\n   if len(target):\n    fixups.append((h,target))\n  handlers[hand]=h\n  \n for h,t in fixups:\n  h.setTarget(handlers[t])\n return handlers\n \ndef _handle_existing_loggers(existing,child_loggers,disable_existing):\n ''\n\n\n\n\n\n\n\n\n \n root=logging.root\n for log in existing:\n  logger=root.manager.loggerDict[log]\n  if log in child_loggers:\n   logger.level=logging.NOTSET\n   logger.handlers=[]\n   logger.propagate=True\n  else :\n   logger.disabled=disable_existing\n   \ndef _install_loggers(cp,handlers,disable_existing):\n ''\n \n \n llist=cp[\"loggers\"][\"keys\"]\n llist=llist.split(\",\")\n llist=list(map(lambda x:x.strip(),llist))\n llist.remove(\"root\")\n section=cp[\"logger_root\"]\n root=logging.root\n log=root\n if\"level\"in section:\n  level=section[\"level\"]\n  log.setLevel(logging._levelNames[level])\n for h in root.handlers[:]:\n  root.removeHandler(h)\n hlist=section[\"handlers\"]\n if len(hlist):\n  hlist=hlist.split(\",\")\n  hlist=_strip_spaces(hlist)\n  for hand in hlist:\n   log.addHandler(handlers[hand])\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n existing=list(root.manager.loggerDict.keys())\n \n \n \n \n existing.sort()\n \n \n child_loggers=[]\n \n for log in llist:\n  section=cp[\"logger_%s\"%log]\n  qn=section[\"qualname\"]\n  propagate=section.getint(\"propagate\",fallback=1)\n  logger=logging.getLogger(qn)\n  if qn in existing:\n   i=existing.index(qn)+1\n   prefixed=qn+\".\"\n   pflen=len(prefixed)\n   num_existing=len(existing)\n   while i <num_existing:\n    if existing[i][:pflen]==prefixed:\n     child_loggers.append(existing[i])\n    i +=1\n   existing.remove(qn)\n  if\"level\"in section:\n   level=section[\"level\"]\n   logger.setLevel(logging._levelNames[level])\n  for h in logger.handlers[:]:\n   logger.removeHandler(h)\n  logger.propagate=propagate\n  logger.disabled=0\n  hlist=section[\"handlers\"]\n  if len(hlist):\n   hlist=hlist.split(\",\")\n   hlist=_strip_spaces(hlist)\n   for hand in hlist:\n    logger.addHandler(handlers[hand])\n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n    \n _handle_existing_loggers(existing,child_loggers,disable_existing)\n \nIDENTIFIER=re.compile('^[a-z_][a-z0-9_]*$',re.I)\n\n\ndef valid_ident(s):\n m=IDENTIFIER.match(s)\n if not m:\n  raise ValueError('Not a valid Python identifier: %r'%s)\n return True\n \n \n \n \n \n \n \n \n \n \n \nclass ConvertingDict(dict):\n ''\n \n def __getitem__(self,key):\n  value=dict.__getitem__(self,key)\n  result=self.configurator.convert(value)\n  \n  if value is not result:\n   self[key]=result\n   if type(result)in (ConvertingDict,ConvertingList,\n   ConvertingTuple):\n    result.parent=self\n    result.key=key\n  return result\n  \n def get(self,key,default=None ):\n  value=dict.get(self,key,default)\n  result=self.configurator.convert(value)\n  \n  if value is not result:\n   self[key]=result\n   if type(result)in (ConvertingDict,ConvertingList,\n   ConvertingTuple):\n    result.parent=self\n    result.key=key\n  return result\n  \n def pop(self,key,default=None ):\n  value=dict.pop(self,key,default)\n  result=self.configurator.convert(value)\n  if value is not result:\n   if type(result)in (ConvertingDict,ConvertingList,\n   ConvertingTuple):\n    result.parent=self\n    result.key=key\n  return result\n  \nclass ConvertingList(list):\n ''\n def __getitem__(self,key):\n  value=list.__getitem__(self,key)\n  result=self.configurator.convert(value)\n  \n  if value is not result:\n   self[key]=result\n   if type(result)in (ConvertingDict,ConvertingList,\n   ConvertingTuple):\n    result.parent=self\n    result.key=key\n  return result\n  \n def pop(self,idx=-1):\n  value=list.pop(self,idx)\n  result=self.configurator.convert(value)\n  if value is not result:\n   if type(result)in (ConvertingDict,ConvertingList,\n   ConvertingTuple):\n    result.parent=self\n  return result\n  \nclass ConvertingTuple(tuple):\n ''\n def __getitem__(self,key):\n  value=tuple.__getitem__(self,key)\n  result=self.configurator.convert(value)\n  if value is not result:\n   if type(result)in (ConvertingDict,ConvertingList,\n   ConvertingTuple):\n    result.parent=self\n    result.key=key\n  return result\n  \nclass BaseConfigurator(object):\n ''\n\n \n \n CONVERT_PATTERN=re.compile(r'^(?P<prefix>[a-z]+)://(?P<suffix>.*)$')\n \n WORD_PATTERN=re.compile(r'^\\s*(\\w+)\\s*')\n DOT_PATTERN=re.compile(r'^\\.\\s*(\\w+)\\s*')\n INDEX_PATTERN=re.compile(r'^\\[\\s*(\\w+)\\s*\\]\\s*')\n DIGIT_PATTERN=re.compile(r'^\\d+$')\n \n value_converters={\n 'ext':'ext_convert',\n 'cfg':'cfg_convert',\n }\n \n \n importer=staticmethod(__import__)\n \n def __init__(self,config):\n  self.config=ConvertingDict(config)\n  self.config.configurator=self\n  \n def resolve(self,s):\n  ''\n\n\n  \n  name=s.split('.')\n  used=name.pop(0)\n  try :\n   found=self.importer(used)\n   for frag in name:\n    used +='.'+frag\n    try :\n     found=getattr(found,frag)\n    except AttributeError:\n     self.importer(used)\n     found=getattr(found,frag)\n   return found\n  except ImportError:\n   e,tb=sys.exc_info()[1:]\n   v=ValueError('Cannot resolve %r: %s'%(s,e))\n   v.__cause__,v.__traceback__=e,tb\n   raise v\n   \n def ext_convert(self,value):\n  ''\n  return self.resolve(value)\n  \n def cfg_convert(self,value):\n  ''\n  rest=value\n  m=self.WORD_PATTERN.match(rest)\n  if m is None :\n   raise ValueError(\"Unable to convert %r\"%value)\n  else :\n   rest=rest[m.end():]\n   d=self.config[m.groups()[0]]\n   \n   while rest:\n    m=self.DOT_PATTERN.match(rest)\n    if m:\n     d=d[m.groups()[0]]\n    else :\n     m=self.INDEX_PATTERN.match(rest)\n     if m:\n      idx=m.groups()[0]\n      if not self.DIGIT_PATTERN.match(idx):\n       d=d[idx]\n      else :\n       try :\n        n=int(idx)\n        d=d[n]\n       except TypeError:\n        d=d[idx]\n    if m:\n     rest=rest[m.end():]\n    else :\n     raise ValueError('Unable to convert '\n     '%r at %r'%(value,rest))\n     \n  return d\n  \n def convert(self,value):\n  ''\n\n\n\n  \n  if not isinstance(value,ConvertingDict)and isinstance(value,dict):\n   value=ConvertingDict(value)\n   value.configurator=self\n  elif not isinstance(value,ConvertingList)and isinstance(value,list):\n   value=ConvertingList(value)\n   value.configurator=self\n  elif not isinstance(value,ConvertingTuple)and  isinstance(value,tuple):\n   value=ConvertingTuple(value)\n   value.configurator=self\n  elif isinstance(value,str):\n   m=self.CONVERT_PATTERN.match(value)\n   if m:\n    d=m.groupdict()\n    prefix=d['prefix']\n    converter=self.value_converters.get(prefix,None )\n    if converter:\n     suffix=d['suffix']\n     converter=getattr(self,converter)\n     value=converter(suffix)\n  return value\n  \n def configure_custom(self,config):\n  ''\n  c=config.pop('()')\n  if not callable(c):\n   c=self.resolve(c)\n  props=config.pop('.',None )\n  \n  kwargs=dict([(k,config[k])for k in config if valid_ident(k)])\n  result=c(**kwargs)\n  if props:\n   for name,value in props.items():\n    setattr(result,name,value)\n  return result\n  \n def as_tuple(self,value):\n  ''\n  if isinstance(value,list):\n   value=tuple(value)\n  return value\n  \nclass DictConfigurator(BaseConfigurator):\n ''\n\n\n \n \n def configure(self):\n  ''\n  \n  config=self.config\n  if'version'not in config:\n   raise ValueError(\"dictionary doesn't specify a version\")\n  if config['version']!=1:\n   raise ValueError(\"Unsupported version: %s\"%config['version'])\n  incremental=config.pop('incremental',False )\n  EMPTY_DICT={}\n  logging._acquireLock()\n  try :\n   if incremental:\n    handlers=config.get('handlers',EMPTY_DICT)\n    for name in handlers:\n     if name not in logging._handlers:\n      raise ValueError('No handler found with '\n      'name %r'%name)\n     else :\n      try :\n       handler=logging._handlers[name]\n       handler_config=handlers[name]\n       level=handler_config.get('level',None )\n       if level:\n        handler.setLevel(logging._checkLevel(level))\n      except Exception as e:\n       raise ValueError('Unable to configure handler '\n       '%r: %s'%(name,e))\n    loggers=config.get('loggers',EMPTY_DICT)\n    for name in loggers:\n     try :\n      self.configure_logger(name,loggers[name],True )\n     except Exception as e:\n      raise ValueError('Unable to configure logger '\n      '%r: %s'%(name,e))\n    root=config.get('root',None )\n    if root:\n     try :\n      self.configure_root(root,True )\n     except Exception as e:\n      raise ValueError('Unable to configure root '\n      'logger: %s'%e)\n   else :\n    disable_existing=config.pop('disable_existing_loggers',True )\n    \n    logging._handlers.clear()\n    del logging._handlerList[:]\n    \n    \n    formatters=config.get('formatters',EMPTY_DICT)\n    for name in formatters:\n     try :\n      formatters[name]=self.configure_formatter(\n      formatters[name])\n     except Exception as e:\n      raise ValueError('Unable to configure '\n      'formatter %r: %s'%(name,e))\n      \n    filters=config.get('filters',EMPTY_DICT)\n    for name in filters:\n     try :\n      filters[name]=self.configure_filter(filters[name])\n     except Exception as e:\n      raise ValueError('Unable to configure '\n      'filter %r: %s'%(name,e))\n      \n      \n      \n      \n    handlers=config.get('handlers',EMPTY_DICT)\n    deferred=[]\n    for name in sorted(handlers):\n     try :\n      handler=self.configure_handler(handlers[name])\n      handler.name=name\n      handlers[name]=handler\n     except Exception as e:\n      if'target not configured yet'in str(e):\n       deferred.append(name)\n      else :\n       raise ValueError('Unable to configure handler '\n       '%r: %s'%(name,e))\n       \n       \n    for name in deferred:\n     try :\n      handler=self.configure_handler(handlers[name])\n      handler.name=name\n      handlers[name]=handler\n     except Exception as e:\n      raise ValueError('Unable to configure handler '\n      '%r: %s'%(name,e))\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    root=logging.root\n    existing=list(root.manager.loggerDict.keys())\n    \n    \n    \n    \n    existing.sort()\n    \n    \n    child_loggers=[]\n    \n    loggers=config.get('loggers',EMPTY_DICT)\n    for name in loggers:\n     if name in existing:\n      i=existing.index(name)+1\n      prefixed=name+\".\"\n      pflen=len(prefixed)\n      num_existing=len(existing)\n      while i <num_existing:\n       if existing[i][:pflen]==prefixed:\n        child_loggers.append(existing[i])\n       i +=1\n      existing.remove(name)\n     try :\n      self.configure_logger(name,loggers[name])\n     except Exception as e:\n      raise ValueError('Unable to configure logger '\n      '%r: %s'%(name,e))\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    _handle_existing_loggers(existing,child_loggers,\n    disable_existing)\n    \n    \n    root=config.get('root',None )\n    if root:\n     try :\n      self.configure_root(root)\n     except Exception as e:\n      raise ValueError('Unable to configure root '\n      'logger: %s'%e)\n  finally :\n   logging._releaseLock()\n   \n def configure_formatter(self,config):\n  ''\n  if'()'in config:\n   factory=config['()']\n   try :\n    result=self.configure_custom(config)\n   except TypeError as te:\n    if\"'format'\"not in str(te):\n     raise\n     \n     \n     \n     \n    config['fmt']=config.pop('format')\n    config['()']=factory\n    result=self.configure_custom(config)\n  else :\n   fmt=config.get('format',None )\n   dfmt=config.get('datefmt',None )\n   style=config.get('style','%')\n   result=logging.Formatter(fmt,dfmt,style)\n  return result\n  \n def configure_filter(self,config):\n  ''\n  if'()'in config:\n   result=self.configure_custom(config)\n  else :\n   name=config.get('name','')\n   result=logging.Filter(name)\n  return result\n  \n def add_filters(self,filterer,filters):\n  ''\n  for f in filters:\n   try :\n    filterer.addFilter(self.config['filters'][f])\n   except Exception as e:\n    raise ValueError('Unable to add filter %r: %s'%(f,e))\n    \n def configure_handler(self,config):\n  ''\n  config_copy=dict(config)\n  formatter=config.pop('formatter',None )\n  if formatter:\n   try :\n    formatter=self.config['formatters'][formatter]\n   except Exception as e:\n    raise ValueError('Unable to set formatter '\n    '%r: %s'%(formatter,e))\n  level=config.pop('level',None )\n  filters=config.pop('filters',None )\n  if'()'in config:\n   c=config.pop('()')\n   if not callable(c):\n    c=self.resolve(c)\n   factory=c\n  else :\n   cname=config.pop('class')\n   klass=self.resolve(cname)\n   \n   if issubclass(klass,logging.handlers.MemoryHandler)and   'target'in config:\n    try :\n     th=self.config['handlers'][config['target']]\n     if not isinstance(th,logging.Handler):\n      config.update(config_copy)\n      raise TypeError('target not configured yet')\n     config['target']=th\n    except Exception as e:\n     raise ValueError('Unable to set target handler '\n     '%r: %s'%(config['target'],e))\n   elif issubclass(klass,logging.handlers.SMTPHandler)and   'mailhost'in config:\n    config['mailhost']=self.as_tuple(config['mailhost'])\n   elif issubclass(klass,logging.handlers.SysLogHandler)and   'address'in config:\n    config['address']=self.as_tuple(config['address'])\n   factory=klass\n  kwargs=dict([(k,config[k])for k in config if valid_ident(k)])\n  try :\n   result=factory(**kwargs)\n  except TypeError as te:\n   if\"'stream'\"not in str(te):\n    raise\n    \n    \n    \n    \n   kwargs['strm']=kwargs.pop('stream')\n   result=factory(**kwargs)\n  if formatter:\n   result.setFormatter(formatter)\n  if level is not None :\n   result.setLevel(logging._checkLevel(level))\n  if filters:\n   self.add_filters(result,filters)\n  return result\n  \n def add_handlers(self,logger,handlers):\n  ''\n  for h in handlers:\n   try :\n    logger.addHandler(self.config['handlers'][h])\n   except Exception as e:\n    raise ValueError('Unable to add handler %r: %s'%(h,e))\n    \n def common_logger_config(self,logger,config,incremental=False ):\n  ''\n\n  \n  level=config.get('level',None )\n  if level is not None :\n   logger.setLevel(logging._checkLevel(level))\n  if not incremental:\n  \n   for h in logger.handlers[:]:\n    logger.removeHandler(h)\n   handlers=config.get('handlers',None )\n   if handlers:\n    self.add_handlers(logger,handlers)\n   filters=config.get('filters',None )\n   if filters:\n    self.add_filters(logger,filters)\n    \n def configure_logger(self,name,config,incremental=False ):\n  ''\n  logger=logging.getLogger(name)\n  self.common_logger_config(logger,config,incremental)\n  propagate=config.get('propagate',None )\n  if propagate is not None :\n   logger.propagate=propagate\n   \n def configure_root(self,config,incremental=False ):\n  ''\n  root=logging.getLogger()\n  self.common_logger_config(root,config,incremental)\n  \ndictConfigClass=DictConfigurator\n\ndef dictConfig(config):\n ''\n dictConfigClass(config).configure()\n \n \ndef listen(port=DEFAULT_LOGGING_CONFIG_PORT):\n ''\n\n\n\n\n\n\n\n \n if not thread:\n  raise NotImplementedError(\"listen() needs threading to work\")\n  \n class ConfigStreamHandler(StreamRequestHandler):\n  ''\n\n\n\n\n  \n  def handle(self):\n   ''\n\n\n\n\n\n   \n   try :\n    conn=self.connection\n    chunk=conn.recv(4)\n    if len(chunk)==4:\n     slen=struct.unpack(\">L\",chunk)[0]\n     chunk=self.connection.recv(slen)\n     while len(chunk)<slen:\n      chunk=chunk+conn.recv(slen -len(chunk))\n     chunk=chunk.decode(\"utf-8\")\n     try :\n      import json\n      d=json.loads(chunk)\n      assert isinstance(d,dict)\n      dictConfig(d)\n     except :\n     \n     \n      file=io.StringIO(chunk)\n      try :\n       fileConfig(file)\n      except (KeyboardInterrupt,SystemExit):\n       raise\n      except :\n       traceback.print_exc()\n     if self.server.ready:\n      self.server.ready.set()\n   except socket.error as e:\n    if not isinstance(e.args,tuple):\n     raise\n    else :\n     errcode=e.args[0]\n     if errcode !=RESET_ERROR:\n      raise\n      \n class ConfigSocketReceiver(ThreadingTCPServer):\n  ''\n\n  \n  \n  allow_reuse_address=1\n  \n  def __init__(self,host='localhost',port=DEFAULT_LOGGING_CONFIG_PORT,\n  handler=None ,ready=None ):\n   ThreadingTCPServer.__init__(self,(host,port),handler)\n   logging._acquireLock()\n   self.abort=0\n   logging._releaseLock()\n   self.timeout=1\n   self.ready=ready\n   \n  def serve_until_stopped(self):\n   import select\n   abort=0\n   while not abort:\n    rd,wr,ex=select.select([self.socket.fileno()],\n    [],[],\n    self.timeout)\n    if rd:\n     self.handle_request()\n    logging._acquireLock()\n    abort=self.abort\n    logging._releaseLock()\n   self.socket.close()\n   \n class Server(threading.Thread):\n \n  def __init__(self,rcvr,hdlr,port):\n   super(Server,self).__init__()\n   self.rcvr=rcvr\n   self.hdlr=hdlr\n   self.port=port\n   self.ready=threading.Event()\n   \n  def run(self):\n   server=self.rcvr(port=self.port,handler=self.hdlr,\n   ready=self.ready)\n   if self.port ==0:\n    self.port=server.server_address[1]\n   self.ready.set()\n   global _listener\n   logging._acquireLock()\n   _listener=server\n   logging._releaseLock()\n   server.serve_until_stopped()\n   \n return Server(ConfigSocketReceiver,ConfigStreamHandler,port)\n \ndef stopListening():\n ''\n\n \n global _listener\n logging._acquireLock()\n try :\n  if _listener:\n   _listener.abort=1\n   _listener=None\n finally :\n  logging._releaseLock()\n"], "random": [".js", "// Javascript implementation of the random module\n// Based on Ian Bicking's implementation of the Mersenne twister\n\nvar $module = (function($B){\n\n_b_ = $B.builtins\n\nvar VERSION = 3\n\n// Code copied from https://github.com/ianb/whrandom/blob/master/mersenne.js\n// by Ian Bicking\n\n// this program is a JavaScript version of Mersenne Twister,\n// a straight conversion from the original program, mt19937ar.c,\n// translated by y. okada on july 17, 2006.\n// and modified a little at july 20, 2006, but there are not any substantial differences.\n// modularized by Ian Bicking, March 25, 2013 (found original version at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVASCRIPT/java-script.html)\n// in this program, procedure descriptions and comments of original source code were not removed.\n// lines commented with //c// were originally descriptions of c procedure. and a few following lines are appropriate JavaScript descriptions.\n// lines commented with /* and */ are original comments.\n// lines commented with // are additional comments in this JavaScript version.\n/*\n   A C-program for MT19937, with initialization improved 2002/1/26.\n   Coded by Takuji Nishimura and Makoto Matsumoto.\n\n   Before using, initialize the state by using init_genrand(seed)\n   or init_by_array(init_key, key_length).\n\n   Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n   All rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n     1. Redistributions of source code must retain the above copyright\n        notice, this list of conditions and the following disclaimer.\n\n     2. Redistributions in binary form must reproduce the above copyright\n        notice, this list of conditions and the following disclaimer in the\n        documentation and/or other materials provided with the distribution.\n\n     3. The names of its contributors may not be used to endorse or promote\n        products derived from this software without specific prior written\n        permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n   Any feedback is very welcome.\n   http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n   email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nfunction RandomStream(seed) {\n\n  /*jshint bitwise:false */\n  /* Period parameters */\n  //c//#define N 624\n  //c//#define M 397\n  //c//#define MATRIX_A 0x9908b0dfUL   /* constant vector a */\n  //c//#define UPPER_MASK 0x80000000UL /* most significant w-r bits */\n  //c//#define LOWER_MASK 0x7fffffffUL /* least significant r bits */\n  var N = 624;\n  var M = 397;\n  var MATRIX_A = 0x9908b0df;   /* constant vector a */\n  var UPPER_MASK = 0x80000000; /* most significant w-r bits */\n  var LOWER_MASK = 0x7fffffff; /* least significant r bits */\n  //c//static unsigned long mt[N]; /* the array for the state vector  */\n  //c//static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */\n  var mt = new Array(N);   /* the array for the state vector  */\n  var mti = N+1;           /* mti==N+1 means mt[N] is not initialized */\n\n  function unsigned32 (n1) // returns a 32-bits unsiged integer from an operand to which applied a bit operator.\n  {\n    return n1 < 0 ? (n1 ^ UPPER_MASK) + UPPER_MASK : n1;\n  }\n\n  function subtraction32 (n1, n2) // emulates lowerflow of a c 32-bits unsiged integer variable, instead of the operator -. these both arguments must be non-negative integers expressible using unsigned 32 bits.\n  {\n    return n1 < n2 ? unsigned32((0x100000000 - (n2 - n1)) & 0xffffffff) : n1 - n2;\n  }\n\n  function addition32 (n1, n2) // emulates overflow of a c 32-bits unsiged integer variable, instead of the operator +. these both arguments must be non-negative integers expressible using unsigned 32 bits.\n  {\n    return unsigned32((n1 + n2) & 0xffffffff);\n  }\n\n  function multiplication32 (n1, n2) // emulates overflow of a c 32-bits unsiged integer variable, instead of the operator *. these both arguments must be non-negative integers expressible using unsigned 32 bits.\n  {\n    var sum = 0;\n    for (var i = 0; i < 32; ++i){\n      if ((n1 >>> i) & 0x1){\n        sum = addition32(sum, unsigned32(n2 << i));\n      }\n    }\n    return sum;\n  }\n\n  /* initializes mt[N] with a seed */\n  //c//void init_genrand(unsigned long s)\n  function init_genrand(s) {\n    //c//mt[0]= s & 0xffffffff;\n    mt[0]= unsigned32(s & 0xffffffff);\n    for (mti=1; mti<N; mti++) {\n      mt[mti] =\n      //c//(1812433253 * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);\n      addition32(multiplication32(1812433253, unsigned32(mt[mti-1] ^ (mt[mti-1] >>> 30))), mti);\n      /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n      /* In the previous versions, MSBs of the seed affect   */\n      /* only MSBs of the array mt[].                        */\n      /* 2002/01/09 modified by Makoto Matsumoto             */\n      //c//mt[mti] &= 0xffffffff;\n      mt[mti] = unsigned32(mt[mti] & 0xffffffff);\n      /* for >32 bit machines */\n    }\n  }\n\n  /* initialize by an array with array-length */\n  /* init_key is the array for initializing keys */\n  /* key_length is its length */\n  /* slight change for C++, 2004/2/26 */\n  //c//void init_by_array(unsigned long init_key[], int key_length)\n  function init_by_array(init_key, key_length) {\n    //c//int i, j, k;\n    var i, j, k;\n    init_genrand(19650218);\n    i=1; j=0;\n    k = (N>key_length ? N : key_length);\n    for (; k; k--) {\n      //c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525))\n      //c// + init_key[j] + j; /* non linear */\n      mt[i] = addition32(addition32(unsigned32(mt[i] ^ multiplication32(unsigned32(mt[i-1] ^ (mt[i-1] >>> 30)), 1664525)), init_key[j]), j);\n      mt[i] =\n      //c//mt[i] &= 0xffffffff; /* for WORDSIZE > 32 machines */\n      unsigned32(mt[i] & 0xffffffff);\n      i++; j++;\n      if (i>=N) { mt[0] = mt[N-1]; i=1; }\n      if (j>=key_length) {\n        j=0;\n      }\n    }\n    for (k=N-1; k; k--) {\n      //c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941))\n      //c//- i; /* non linear */\n      mt[i] = subtraction32(unsigned32((mt[i]) ^ multiplication32(unsigned32(mt[i-1] ^ (mt[i-1] >>> 30)), 1566083941)), i);\n      //c//mt[i] &= 0xffffffff; /* for WORDSIZE > 32 machines */\n      mt[i] = unsigned32(mt[i] & 0xffffffff);\n      i++;\n      if (i>=N) { mt[0] = mt[N-1]; i=1; }\n    }\n    mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n  }\n\n  /* generates a random number on [0,0xffffffff]-interval */\n  //c//unsigned long genrand_int32(void)\n  function genrand_int32() {\n    //c//unsigned long y;\n    //c//static unsigned long mag01[2]={0x0UL, MATRIX_A};\n    var y;\n    var mag01 = [0x0, MATRIX_A];\n    /* mag01[x] = x * MATRIX_A  for x=0,1 */\n\n    if (mti >= N) { /* generate N words at one time */\n      //c//int kk;\n      var kk;\n\n      if (mti == N+1) {   /* if init_genrand() has not been called, */\n        init_genrand(Date.now()); /* a default initial seed is used */\n      }\n\n      for (kk=0;kk<N-M;kk++) {\n        //c//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);\n        //c//mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1];\n        y = unsigned32((mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK));\n        mt[kk] = unsigned32(mt[kk+M] ^ (y >>> 1) ^ mag01[y & 0x1]);\n      }\n      for (;kk<N-1;kk++) {\n        //c//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);\n        //c//mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1];\n        y = unsigned32((mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK));\n        mt[kk] = unsigned32(mt[kk+(M-N)] ^ (y >>> 1) ^ mag01[y & 0x1]);\n      }\n      //c//y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);\n      //c//mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1];\n      y = unsigned32((mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK));\n      mt[N-1] = unsigned32(mt[M-1] ^ (y >>> 1) ^ mag01[y & 0x1]);\n      mti = 0;\n    }\n\n    y = mt[mti++];\n\n    /* Tempering */\n    //c//y ^= (y >> 11);\n    //c//y ^= (y << 7) & 0x9d2c5680;\n    //c//y ^= (y << 15) & 0xefc60000;\n    //c//y ^= (y >> 18);\n    y = unsigned32(y ^ (y >>> 11));\n    y = unsigned32(y ^ ((y << 7) & 0x9d2c5680));\n    y = unsigned32(y ^ ((y << 15) & 0xefc60000));\n    y = unsigned32(y ^ (y >>> 18));\n\n    return y;\n  }\n\n  /* generates a random number on [0,0x7fffffff]-interval */\n  //c//long genrand_int31(void)\n  function genrand_int31() {\n    //c//return (genrand_int32()>>1);\n    return (genrand_int32()>>>1);\n  }\n\n  /* generates a random number on [0,1]-real-interval */\n  //c//double genrand_real1(void)\n  function genrand_real1() {\n    return genrand_int32()*(1.0/4294967295.0);\n    /* divided by 2^32-1 */\n  }\n\n  /* generates a random number on [0,1)-real-interval */\n  //c//double genrand_real2(void)\n  function genrand_real2() {\n    return genrand_int32()*(1.0/4294967296.0);\n    /* divided by 2^32 */\n  }\n\n  /* generates a random number on (0,1)-real-interval */\n  //c//double genrand_real3(void)\n  function genrand_real3() {\n    return ((genrand_int32()) + 0.5)*(1.0/4294967296.0);\n    /* divided by 2^32 */\n  }\n\n  /* generates a random number on [0,1) with 53-bit resolution*/\n  //c//double genrand_res53(void)\n  function genrand_res53() {\n    //c//unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6;\n    var a=genrand_int32()>>>5, b=genrand_int32()>>>6;\n    return (a*67108864.0+b)*(1.0/9007199254740992.0);\n  }\n  /* These real versions are due to Isaku Wada, 2002/01/09 added */\n\n  var random = genrand_res53;\n\n  random.seed = function (seed) {\n    if (! seed) {\n      seed = Date.now();\n    }\n    if (typeof seed != \"number\") {\n      seed = parseInt(seed, 10);\n    }\n    if ((seed !== 0 && ! seed) || isNaN(seed)) {\n      throw \"Bad seed\";\n    }\n    init_genrand(seed);\n  };\n\n  random.seed(seed);\n\n  random.int31 = genrand_int31;\n  random.real1 = genrand_real1;\n  random.real2 = genrand_real2;\n  random.real3 = genrand_real3;\n  random.res53 = genrand_res53;\n  \n  // Added for compatibility with Python\n  random.getstate = function(){return [VERSION, mt, mti]}\n  \n  random.setstate = function(state){\n    mt = state[1]\n    mti = state[2]\n  }\n\n  return random;\n\n}\n\nfunction _Random(){\n    var _random = RandomStream()\n    \n    _b_ = $B.builtins\n    \n    var NV_MAGICCONST = 4 * Math.exp(-0.5)/Math.sqrt(2),\n        gauss_next = null\n    \n    function _randbelow(x){\n        return Math.floor(x*_random())\n    }\n    \n    function _urandom(n){\n        /*\n        urandom(n) -> str\n        Return n random bytes suitable for cryptographic use.\n        */\n        \n        randbytes= []\n        for(i=0;i<n;i++){randbytes.push(parseInt(_random()*256))}\n        return _b_.bytes(randbytes)\n    }\n    \n    var res = {\n        // magic constants\n        NV_MAGICCONST: 1.71552776992141,\n        TWOPI: 6.28318530718,\n        LOG4: 1.38629436111989,\n        SG_MAGICCONST: 2.50407739677627,\n\n        choice: function(seq){\n            var $ = $B.args('choice', 1,\n                {seq:null},['seq'],arguments, {}, null, null),\n                seq = $.seq\n            var len, rank\n            if(Array.isArray(seq)){len = seq.length}\n            else{len = _b_.getattr(seq,'__len__')()}\n            if(len==0){throw _b_.IndexError(\"Cannot choose from an empty sequence\")}\n            rank = parseInt(_random()*len)\n            if(Array.isArray(seq)){return seq[rank]}\n            else{return _b_.getattr(seq,'__getitem__')(rank)}\n        },\n    \n        expovariate: function(lambd){\n            /*\n            Exponential distribution.\n    \n            lambd is 1.0 divided by the desired mean.  It should be\n            nonzero.  (The parameter would be called \"lambda\", but that is\n            a reserved word in Python.)  Returned values range from 0 to\n            positive infinity if lambd is positive, and from negative\n            infinity to 0 if lambd is negative.\n    \n            */\n            // lambd: rate lambd = 1/mean\n            // ('lambda' is a Python reserved word)\n    \n            // we use 1-random() instead of random() to preclude the\n            // possibility of taking the log of zero.\n            return -Math.log(1.0 - _random())/lambd\n        },\n    \n        gammavariate: function(alpha, beta){\n            /* Gamma distribution.  Not the gamma function!\n    \n            Conditions on the parameters are alpha > 0 and beta > 0.\n    \n            The probability distribution function is:\n    \n                        x ** (alpha - 1) * math.exp(-x / beta)\n              pdf(x) =  --------------------------------------\n                          math.gamma(alpha) * beta ** alpha\n    \n            */\n    \n            // alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2\n    \n            // Warning: a few older sources define the gamma distribution in terms\n            // of alpha > -1.0\n            \n            var $ = $B.args('gammavariate', 2,\n                    {alpha:null, beta:null}, ['alpha', 'beta'],\n                    arguments, {}, null, null),\n                alpha = $.alpha,\n                beta = $.beta,\n                LOG4 = Math.log(4),\n                SG_MAGICCONST = 1.0 + Math.log(4.5)\n                \n            if(alpha <= 0.0 || beta <= 0.0){\n                throw _b_.ValueError('gammavariate: alpha and beta must be > 0.0')\n            }\n    \n            if(alpha > 1.0){\n    \n                // Uses R.C.H. Cheng, \"The generation of Gamma\n                // variables with non-integral shape parameters\",\n                // Applied Statistics, (1977), 26, No. 1, p71-74\n    \n                ainv = Math.sqrt(2.0 * alpha - 1.0)\n                bbb = alpha - LOG4\n                ccc = alpha + ainv\n    \n                while(true){\n                    u1 = _random()\n                    if(!((1e-7 < u1) && (u1 < .9999999))){\n                        continue\n                    }\n                    u2 = 1.0 - _random()\n                    v = Math.log(u1/(1.0-u1))/ainv\n                    x = alpha*Math.exp(v)\n                    z = u1*u1*u2\n                    r = bbb+ccc*v-x\n                    if((r + SG_MAGICCONST - 4.5*z >= 0.0) || r >= Math.log(z)){\n                        return x * beta\n                    }\n                }\n            }else if(alpha == 1.0){\n                // expovariate(1)\n                u = _random()\n                while(u <= 1e-7){u = _random()}\n                return -Math.log(u) * beta\n            }else{\n                // alpha is between 0 and 1 (exclusive)\n    \n                // Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle\n    \n                while(true){\n                    u = _random()\n                    b = (Math.E + alpha)/Math.E\n                    p = b*u\n                    if(p <= 1.0){x = Math.pow(p, (1.0/alpha))}\n                    else{x = -Math.log((b-p)/alpha)}\n                    u1 = _random()\n                    if(p > 1.0){\n                        if(u1 <= Math.pow(x, alpha - 1.0)){\n                            break\n                        }\n                    }else if(u1 <= Math.exp(-x)){\n                        break\n                    }\n                }\n                return x * beta\n            }\n        },\n        \n        gauss:function(){\n    \n            /* Gaussian distribution.\n    \n            mu is the mean, and sigma is the standard deviation.  This is\n            slightly faster than the normalvariate() function.\n    \n            Not thread-safe without a lock around calls.\n    \n            # When x and y are two variables from [0, 1), uniformly\n            # distributed, then\n            #\n            #    cos(2*pi*x)*sqrt(-2*log(1-y))\n            #    sin(2*pi*x)*sqrt(-2*log(1-y))\n            #\n            # are two *independent* variables with normal distribution\n            # (mu = 0, sigma = 1).\n            # (Lambert Meertens)\n            # (corrected version; bug discovered by Mike Miller, fixed by LM)\n    \n            # Multithreading note: When two threads call this function\n            # simultaneously, it is possible that they will receive the\n            # same return value.  The window is very small though.  To\n            # avoid this, you have to use a lock around all calls.  (I\n            # didn't want to slow this down in the serial case by using a\n            # lock here.)\n            */\n    \n            var $ = $B.args('gauss', 2, {mu:null, sigma:null},\n                    ['mu', 'sigma'], arguments, {}, null, null),\n                mu = $.mu,\n                sigma = $.sigma\n    \n            z = gauss_next\n            gauss_next = null\n            if(z===null){\n                x2pi = _random() * Math.PI * 2\n                g2rad = Math.sqrt(-2.0 * Math.log(1.0 - _random()))\n                z = Math.cos(x2pi) * g2rad\n                gauss_next = Math.sin(x2pi) * g2rad\n            }\n            return mu + z*sigma\n        },\n             \n        getrandbits: function(k){\n            var $ = $B.args('getrandbits', 1,\n                {k:null},['k'],arguments, {}, null, null),\n                k = $B.$GetInt($.k)\n            // getrandbits(k) -> x.  Generates a long int with k random bits.\n            if(k <= 0){\n                throw _b_.ValueError('number of bits must be greater than zero')\n            }\n            if(k != _b_.int(k)){\n                throw _b_.TypeError('number of bits should be an integer')\n            }\n            numbytes = (k + 7) // bits / 8 and rounded up\n            x = _b_.int.$dict.from_bytes(_urandom(numbytes), 'big')\n            return _b_.getattr(x, '__rshift__')(\n                _b_.getattr(numbytes*8,'__sub__')(k))\n        },\n        \n        getstate: function(){\n            // Return internal state; can be passed to setstate() later.\n            var $ = $B.args('getstate', 0, {}, [], arguments, {}, null, null)\n            return _random.getstate()\n        },\n        \n        normalvariate: function(mu, sigma){\n            /*\n            Normal distribution.\n    \n            mu is the mean, and sigma is the standard deviation.\n    \n            */\n    \n            // mu = mean, sigma = standard deviation\n    \n            // Uses Kinderman and Monahan method. Reference: Kinderman,\n            // A.J. and Monahan, J.F., \"Computer generation of random\n            // variables using the ratio of uniform deviates\", ACM Trans\n            // Math Software, 3, (1977), pp257-260.\n            \n            var $=$B.args('normalvariate', 2,\n                {mu:null, sigma:null}, ['mu', 'sigma'],\n                arguments, {}, null, null),\n                mu = $.mu,\n                sigma = $.sigma\n    \n            while(true){\n                u1 = _random()\n                u2 = 1.0 - _random()\n                z = NV_MAGICCONST*(u1-0.5)/u2\n                zz = z*z/4.0\n                if(zz <= -Math.log(u2)){break}\n            }\n            return mu + z*sigma\n        },\n        \n        paretovariate: function(){\n            /* Pareto distribution.  alpha is the shape parameter.*/\n            // Jain, pg. 495\n            \n            var $ = $B.args('paretovariate', 1, {alpha:null}, ['alpha'],\n                        arguments, {}, null, null)\n    \n            u = 1 - _random()\n            return 1 / Math.pow(u,1/$.alpha)\n        },\n            \n        randint: function(a, b){\n            var $ = $B.args('randint', 2,\n                {a:null, b:null},\n                ['a', 'b'],\n                arguments, {}, null, null)\n            return parseInt(_random()*($.b-$.a+1)+$.a)\n        },\n        \n        random: _random,\n        \n        randrange: function(){\n            var $ = $B.args('randrange', 3,\n                {x:null, stop:null, step:null},\n                ['x', 'stop', 'step'],\n                arguments, {stop:null, step:null}, null, null)\n            if($.stop===null){\n                var start = 0, stop = $.x, step = 1\n            }else{\n                var start = $.x, stop = $.stop, \n                    step = $.step===null ? 1 : $.step\n                if(step==0){throw _b_.ValueError('step cannot be 0')}\n            }\n            if(typeof start=='number' && typeof stop == 'number' &&\n                typeof step=='number'){\n                return start+step*Math.floor(_random()*Math.floor((stop-start)/step))\n            }else{\n                var d = _b_.getattr(stop,'__sub__')(start)\n                d = _b_.getattr(d, '__floordiv__')(step)\n                // Force d to be a LongInt\n                d = $B.LongInt(d)\n                // d is a long integer with n digits ; to choose a random number\n                // between 0 and d the most simple is to take a random digit\n                // at each position, except the first one\n                var s = d.value, _len = s.length,\n                    res = Math.floor(_random()*(parseInt(s.charAt(0))+(_len==1 ? 0 : 1)))+''\n                var same_start = res.charAt(0)==s.charAt(0)\n                for(var i=1;i<_len;i++){\n                    if(same_start){\n                        // If it's the last digit, don't allow stop as valid\n                        if(i==_len-1){\n                            res += Math.floor(_random()*parseInt(s.charAt(i)))+''\n                        }else{\n                            res += Math.floor(_random()*(parseInt(s.charAt(i))+1))+''\n                            same_start = res.charAt(i)==s.charAt(i)\n                        }\n                    }else{\n                        res += Math.floor(_random()*10)+''\n                    }\n                }\n                var offset = {__class__:$B.LongInt.$dict, value: res, \n                    pos: true}\n                d = _b_.getattr(step, '__mul__')(offset)\n                d = _b_.getattr(start, '__add__')(d)\n                return _b_.int(d)\n            }\n        },\n    \n        sample: function(){\n            /*\n            Chooses k unique random elements from a population sequence or set.\n    \n            Returns a new list containing elements from the population while\n            leaving the original population unchanged.  The resulting list is\n            in selection order so that all sub-slices will also be valid random\n            samples.  This allows raffle winners (the sample) to be partitioned\n            into grand prize and second place winners (the subslices).\n    \n            Members of the population need not be hashable or unique.  If the\n            population contains repeats, then each occurrence is a possible\n            selection in the sample.\n    \n            To choose a sample in a range of integers, use range as an argument.\n            This is especially fast and space efficient for sampling from a\n            large population:   sample(range(10000000), 60)\n            \n            # Sampling without replacement entails tracking either potential\n            # selections (the pool) in a list or previous selections in a set.\n    \n            # When the number of selections is small compared to the\n            # population, then tracking selections is efficient, requiring\n            # only a small set and an occasional reselection.  For\n            # a larger number of selections, the pool tracking method is\n            # preferred since the list takes less space than the\n            # set and it doesn't suffer from frequent reselections.'\n            \n            */\n            var $ = $B.args('sample',2,{population:null,k:null},\n                ['population','k'], arguments,{},null,null),\n                population = $.population,\n                k = $.k\n    \n            if(!_b_.hasattr(population, '__len__')){\n                throw _b_.TypeError(\"Population must be a sequence or set.  For dicts, use list(d).\")\n            }\n            n = _b_.getattr(population, '__len__')()\n    \n            if(k<0 || k>n){\n                throw _b_.ValueError(\"Sample larger than population\")\n            }\n            result = []\n            setsize = 21        // size of a small set minus size of an empty list\n            if(k > 5){\n                setsize += Math.pow(4, Math.ceil(Math.log(k * 3, 4))) // table size for big sets\n            }\n            if(n <= setsize){\n                // An n-length list is smaller than a k-length set\n                if(Array.isArray(population)){\n                    var pool = population.slice()\n                }else{var pool = _b_.list(population)}\n                for(var i=0;i<k;i++){ //invariant:  non-selected at [0,n-i)\n                    j = _randbelow(n-i)\n                    result[i] = pool[j]\n                    pool[j] = pool[n-i-1]   // move non-selected item into vacancy\n                }\n            }else{\n                selected = {}\n                for(var i=0;i<k;i++){\n                    j = _randbelow(n)\n                    while(selected[j]!==undefined){\n                        j = _randbelow(n)\n                    }\n                    selected[j] = true\n                    result[i] = Array.isArray(population) ? population[j] :\n                                    _b_.getattr(population, '__getitem__')(j)\n                }\n            }\n            return result\n        },\n            \n        seed: function(){\n            /*\n            Initialize internal state from hashable object.\n        \n            None or no argument seeds from current time or from an operating\n            system specific randomness source if available.\n        \n            If *a* is an int, all bits are used.\n            */\n            var $=$B.args('seed',2,{a:null, version:null},['a', 'version'],\n                    arguments,{a:new Date(), version:2},null,null),\n                a = $.a,\n                version = $.version\n    \n            if(version==1){a = _b_.hash(a)}\n            else if(version==2){\n                if(_b_.isinstance(a, _b_.str)){\n                    a = _b_.int.$dict.from_bytes(_b_.bytes(a, 'utf-8'), 'big')\n                }else if(_b_.isinstance(a, [_b_.bytes, _b_.bytearray])){\n                    a = _b_.int.$dict.from_bytes(a, 'big')\n                }else if(!_b_.isinstance(a, _b_.int)){\n                    throw _b_.TypeError('wrong argument')\n                }\n                if(a.__class__===$B.LongInt.$dict){\n                    // In this implementation, seed() only accepts safe integers\n                    // Generate a random one from the underlying string value,\n                    // using an arbitrary seed (99) to always return the same\n                    // integer\n                    var numbers = a.value, res = '', pos\n                    _random.seed(99)\n                    for(var i=0;i<17;i++){\n                        pos = parseInt(_random()*numbers.length)\n                        res += numbers.charAt(pos)\n                    }\n                    a = parseInt(res)\n                }\n            }else{\n                throw ValueError('version can only be 1 or 2')\n            }\n    \n            _random.seed(a)\n            gauss_next = null\n        },\n        \n        setstate: function(state){\n            // Restore internal state from object returned by getstate().\n            var $ = $B.args('setstate', 1, {state:null}, ['state'], \n                arguments, {}, null, null)\n            var state = _random.getstate()\n            if(!Array.isArray($.state)){\n                throw _b_.TypeError('state must be a list, not '+\n                    $B.get_class($.state).__name__)\n            }\n            if($.state.length<state.length){\n                throw _b_.ValueError(\"need more than \"+$.state.length+\n                    \" values to unpack\")\n            }else if($.state.length>state.length){\n                throw _b_.ValueError(\"too many values to unpack (expected \"+\n                    state.length+\")\")\n            }\n            if($.state[0]!=3){\n                throw _b_.ValueError(\"ValueError: state with version \"+\n                    $.state[0]+\" passed to Random.setstate() of version 3\")\n            }\n            var second = _b_.list($.state[1])\n            if(second.length!==state[1].length){\n                throw _b_.ValueError('state vector is the wrong size')\n            }\n            for(var i=0;i<second.length;i++){\n                if(typeof second[i] != 'number'){\n                    throw _b_.ValueError('state vector items must be integers')\n                }\n            }\n            _random.setstate($.state)\n        },\n    \n        shuffle: function(x, random){\n            /*\n            x, random=random.random -> shuffle list x in place; return None.\n    \n            Optional arg random is a 0-argument function returning a random\n            float in [0.0, 1.0); by default, the standard random.random.\n            */\n    \n            var $ = $B.args('shuffle',2,{x:null,random:null},\n                ['x','random'],\n                arguments,{random:null},null,null),\n                x = $.x,\n                random = $.random\n    \n            if(random===null){random=_random}\n    \n            if(Array.isArray(x)){\n                for(var i=x.length-1;i>=0;i--){\n                    j = Math.floor(random() * (i+1))\n                    var temp = x[j]\n                    x[j] = x[i]\n                    x[i] = temp\n                }\n            }else{\n                var len = _b_.getattr(x, '__len__')(), temp,\n                    x_get = _b_.getattr(x, '__getitem__'),\n                    x_set = _b_.getattr(x, '__setitem__')\n                \n                for(i=len-1;i>=0;i--){\n                    j = Math.floor(random() * (i+1))\n                    var temp = x_get(j)\n                    x_set(j, x_get(i))\n                    x_set(i, temp)\n                }\n            }\n        },\n    \n        triangular: function(){\n            /*\n            Triangular distribution.\n    \n            Continuous distribution bounded by given lower and upper limits,\n            and having a given mode value in-between.\n    \n            http://en.wikipedia.org/wiki/Triangular_distribution\n            */\n            var $=$B.args('triangular',3,\n                {low:null, high:null, mode:null},\n                ['low', 'high', 'mode'],\n                arguments,{low:0, high:1, mode:null}, null, null),\n                low = $.low,\n                high = $.high,\n                mode = $.mode\n                \n            var u = _random(),\n                c = mode===null ? 0.5 : (mode - low) / (high - low)\n            if(u > c){\n                u = 1 - u\n                c = 1 - c\n                var temp = low\n                low = high\n                high = temp\n            }\n            return low + (high - low) * Math.pow(u * c, 0.5)\n        },\n            \n        uniform: function(){\n            var $ = $B.args('uniform',2,{a:null,b:null},['a','b'],\n                arguments,{},null,null),\n                a = $B.$GetInt($.a),\n                b = $B.$GetInt($.b)\n            \n            return a + (b-a)*_random()\n        },\n    \n        vonmisesvariate: function(mu, kappa){\n            /* Circular data distribution.\n    \n            mu is the mean angle, expressed in radians between 0 and 2*pi, and\n            kappa is the concentration parameter, which must be greater than or\n            equal to zero.  If kappa is equal to zero, this distribution reduces\n            to a uniform random angle over the range 0 to 2*pi.\n    \n            */\n            // mu:    mean angle (in radians between 0 and 2*pi)\n            // kappa: concentration parameter kappa (>= 0)\n            // if kappa = 0 generate uniform random angle\n    \n            // Based upon an algorithm published in: Fisher, N.I.,\n            // \"Statistical Analysis of Circular Data\", Cambridge\n            // University Press, 1993.\n    \n            // Thanks to Magnus Kessler for a correction to the\n            // implementation of step 4.\n            \n            var $=$B.args('vonmisesvariate', 2,\n                    {mu: null, kappa:null}, ['mu', 'kappa'],\n                    arguments, {}, null, null),\n                mu = $.mu,\n                kappa = $.kappa,\n                TWOPI = 2*Math.PI\n    \n            if(kappa <= 1e-6){return TWOPI * _random()}\n    \n            s = 0.5 / kappa\n            r = s + Math.sqrt(1.0 + s * s)\n    \n            while(true){\n                u1 = _random()\n                z = Math.cos(Math.PI * u1)\n    \n                d = z / (r + z)\n                u2 = _random()\n                if((u2 < 1.0 - d * d) || \n                    (u2 <= (1.0 - d) * Math.exp(d))){\n                        break\n                }\n            }\n            q = 1.0 / r\n            f = (q + z) / (1.0 + q * z)\n            u3 = _random()\n            if(u3 > 0.5){theta = (mu + Math.acos(f)) % TWOPI}\n            else{theta = (mu - Math.acos(f)) % TWOPI}\n            return theta\n        },\n    \n        weibullvariate: function(){\n            /*Weibull distribution.\n    \n            alpha is the scale parameter and beta is the shape parameter.\n    \n            */\n            // Jain, pg. 499; bug fix courtesy Bill Arms\n    \n            var $ = $B.args('weibullvariate', 2, {alpha:null, beta:null},\n                    ['alpha', 'beta'], arguments, {}, null, null),\n                alpha = $.alpha,\n                beta = $.beta\n    \n            u = 1 - _random()\n            return alpha * Math.pow(-Math.log(u), 1/beta)\n        },\n        \n        VERSION: VERSION\n    }\n\n    res.lognormvariate = function(){\n        /*\n        Log normal distribution.\n    \n        If you take the natural logarithm of this distribution, you'll get a\n        normal distribution with mean mu and standard deviation sigma.\n        mu can have any value, and sigma must be greater than zero.\n    \n        */\n    \n        return Math.exp(res.normalvariate.apply(null, arguments))\n    }\n    \n    res.betavariate = function(){\n        /* Beta distribution.\n    \n        Conditions on the parameters are alpha > 0 and beta > 0.\n        Returned values range between 0 and 1.\n    \n    \n        # This version due to Janne Sinkkonen, and matches all the std\n        # texts (e.g., Knuth Vol 2 Ed 3 pg 134 \"the beta distribution\").\n        */\n        \n        var $ = $B.args('betavariate', 2, {alpha:null, beta:null},\n                ['alpha', 'beta'], arguments, {}, null, null),\n            alpha = $.alpha,\n            beta = $.beta\n    \n        y = res.gammavariate(alpha, 1)\n        if(y == 0){return _b_.float(0)}\n        else{return y / (y + res.gammavariate(beta, 1))}\n    }\n    \n    return res\n\n}\n\nfunction Random(){\n    var obj = {__class__: Random.$dict}\n    Random.$dict.__init__(obj)\n    return obj\n}\nRandom.__class__ = $B.$factory\nRandom.$dict = {\n    __class__: $B.$type,\n    __name__: 'Random',\n    $factory: Random,\n    __init__: function(self){self.$r = _Random()},\n    __getattribute__: function(self, attr){return self.$r[attr]}\n}\nRandom.$dict.__mro__ = [Random.$dict, $B.builtins.object.$dict]\n\nvar $module = _Random()\n\n$module.Random = Random\n\n$module.SystemRandom = function(){\n    var f = function(){return {__class__:f.$dict}}\n    f.__class__ = $B.$factory\n    f.$dict = {\n        __class__: $B.$type,\n        __name__: 'SystemRandom',\n        $factory: f,\n        __getattribute__: function(){\n            throw $B.builtins.NotImplementedError()\n        }\n    }\n    f.$dict.__mro__ = [f.$dict, $B.builtins.object.$dict]\n    return f()\n}\n\nreturn $module\n\n})(__BRYTHON__)\n\n"], "marshal": [".py", "from json import *"], "xml.sax.saxutils": [".py", "''\n\n\n\n\nimport os,urllib.parse,urllib.request\nimport io\nfrom .import handler\nfrom .import xmlreader\n\ndef __dict_replace(s,d):\n ''\n for key,value in d.items():\n  s=s.replace(key,value)\n return s\n \ndef escape(data,entities={}):\n ''\n\n\n\n\n \n \n \n data=data.replace(\"&\",\"&amp;\")\n data=data.replace(\">\",\"&gt;\")\n data=data.replace(\"<\",\"&lt;\")\n if entities:\n  data=__dict_replace(data,entities)\n return data\n \ndef unescape(data,entities={}):\n ''\n\n\n\n\n \n data=data.replace(\"&lt;\",\"<\")\n data=data.replace(\"&gt;\",\">\")\n if entities:\n  data=__dict_replace(data,entities)\n  \n return data.replace(\"&amp;\",\"&\")\n \ndef quoteattr(data,entities={}):\n ''\n\n\n\n\n\n\n\n\n \n entities=entities.copy()\n entities.update({'\\n':'&#10;','\\r':'&#13;','\\t':'&#9;'})\n data=escape(data,entities)\n if'\"'in data:\n  if\"'\"in data:\n   data='\"%s\"'%data.replace('\"',\"&quot;\")\n  else :\n   data=\"'%s'\"%data\n else :\n  data='\"%s\"'%data\n return data\n \n \ndef _gettextwriter(out,encoding):\n if out is None :\n  import sys\n  return sys.stdout\n  \n if isinstance(out,io.TextIOBase):\n \n  return out\n  \n  \n if isinstance(out,io.RawIOBase):\n \n \n  class _wrapper:\n   __class__=out.__class__\n   def __getattr__(self,name):\n    return getattr(out,name)\n  buffer=_wrapper()\n  buffer.close=lambda :None\n else :\n \n \n  buffer=io.BufferedIOBase()\n  buffer.writable=lambda :True\n  buffer.write=out.write\n  try :\n  \n  \n   buffer.seekable=out.seekable\n   buffer.tell=out.tell\n  except AttributeError:\n   pass\n return io.TextIOWrapper(buffer,encoding=encoding,\n errors='xmlcharrefreplace',\n newline='\\n',\n write_through=True )\n \nclass XMLGenerator(handler.ContentHandler):\n\n def __init__(self,out=None ,encoding=\"iso-8859-1\",short_empty_elements=False ):\n  handler.ContentHandler.__init__(self)\n  out=_gettextwriter(out,encoding)\n  self._write=out.write\n  self._flush=out.flush\n  self._ns_contexts=[{}]\n  self._current_context=self._ns_contexts[-1]\n  self._undeclared_ns_maps=[]\n  self._encoding=encoding\n  self._short_empty_elements=short_empty_elements\n  self._pending_start_element=False\n  \n def _qname(self,name):\n  ''\n  if name[0]:\n  \n  \n  \n  \n   if'http://www.w3.org/XML/1998/namespace'==name[0]:\n    return'xml:'+name[1]\n    \n   prefix=self._current_context[name[0]]\n   if prefix:\n   \n    return prefix+\":\"+name[1]\n    \n  return name[1]\n  \n def _finish_pending_start_element(self,endElement=False ):\n  if self._pending_start_element:\n   self._write('>')\n   self._pending_start_element=False\n   \n   \n   \n def startDocument(self):\n  self._write('<?xml version=\"1.0\" encoding=\"%s\"?>\\n'%\n  self._encoding)\n  \n def endDocument(self):\n  self._flush()\n  \n def startPrefixMapping(self,prefix,uri):\n  self._ns_contexts.append(self._current_context.copy())\n  self._current_context[uri]=prefix\n  self._undeclared_ns_maps.append((prefix,uri))\n  \n def endPrefixMapping(self,prefix):\n  self._current_context=self._ns_contexts[-1]\n  del self._ns_contexts[-1]\n  \n def startElement(self,name,attrs):\n  self._finish_pending_start_element()\n  self._write('<'+name)\n  for (name,value)in attrs.items():\n   self._write(' %s=%s'%(name,quoteattr(value)))\n  if self._short_empty_elements:\n   self._pending_start_element=True\n  else :\n   self._write(\">\")\n   \n def endElement(self,name):\n  if self._pending_start_element:\n   self._write('/>')\n   self._pending_start_element=False\n  else :\n   self._write('</%s>'%name)\n   \n def startElementNS(self,name,qname,attrs):\n  self._finish_pending_start_element()\n  self._write('<'+self._qname(name))\n  \n  for prefix,uri in self._undeclared_ns_maps:\n   if prefix:\n    self._write(' xmlns:%s=\"%s\"'%(prefix,uri))\n   else :\n    self._write(' xmlns=\"%s\"'%uri)\n  self._undeclared_ns_maps=[]\n  \n  for (name,value)in attrs.items():\n   self._write(' %s=%s'%(self._qname(name),quoteattr(value)))\n  if self._short_empty_elements:\n   self._pending_start_element=True\n  else :\n   self._write(\">\")\n   \n def endElementNS(self,name,qname):\n  if self._pending_start_element:\n   self._write('/>')\n   self._pending_start_element=False\n  else :\n   self._write('</%s>'%self._qname(name))\n   \n def characters(self,content):\n  if content:\n   self._finish_pending_start_element()\n   self._write(escape(content))\n   \n def ignorableWhitespace(self,content):\n  if content:\n   self._finish_pending_start_element()\n   self._write(content)\n   \n def processingInstruction(self,target,data):\n  self._finish_pending_start_element()\n  self._write('<?%s %s?>'%(target,data))\n  \n  \nclass XMLFilterBase(xmlreader.XMLReader):\n ''\n\n\n\n\n \n \n def __init__(self,parent=None ):\n  xmlreader.XMLReader.__init__(self)\n  self._parent=parent\n  \n  \n  \n def error(self,exception):\n  self._err_handler.error(exception)\n  \n def fatalError(self,exception):\n  self._err_handler.fatalError(exception)\n  \n def warning(self,exception):\n  self._err_handler.warning(exception)\n  \n  \n  \n def setDocumentLocator(self,locator):\n  self._cont_handler.setDocumentLocator(locator)\n  \n def startDocument(self):\n  self._cont_handler.startDocument()\n  \n def endDocument(self):\n  self._cont_handler.endDocument()\n  \n def startPrefixMapping(self,prefix,uri):\n  self._cont_handler.startPrefixMapping(prefix,uri)\n  \n def endPrefixMapping(self,prefix):\n  self._cont_handler.endPrefixMapping(prefix)\n  \n def startElement(self,name,attrs):\n  self._cont_handler.startElement(name,attrs)\n  \n def endElement(self,name):\n  self._cont_handler.endElement(name)\n  \n def startElementNS(self,name,qname,attrs):\n  self._cont_handler.startElementNS(name,qname,attrs)\n  \n def endElementNS(self,name,qname):\n  self._cont_handler.endElementNS(name,qname)\n  \n def characters(self,content):\n  self._cont_handler.characters(content)\n  \n def ignorableWhitespace(self,chars):\n  self._cont_handler.ignorableWhitespace(chars)\n  \n def processingInstruction(self,target,data):\n  self._cont_handler.processingInstruction(target,data)\n  \n def skippedEntity(self,name):\n  self._cont_handler.skippedEntity(name)\n  \n  \n  \n def notationDecl(self,name,publicId,systemId):\n  self._dtd_handler.notationDecl(name,publicId,systemId)\n  \n def unparsedEntityDecl(self,name,publicId,systemId,ndata):\n  self._dtd_handler.unparsedEntityDecl(name,publicId,systemId,ndata)\n  \n  \n  \n def resolveEntity(self,publicId,systemId):\n  return self._ent_handler.resolveEntity(publicId,systemId)\n  \n  \n  \n def parse(self,source):\n  self._parent.setContentHandler(self)\n  self._parent.setErrorHandler(self)\n  self._parent.setEntityResolver(self)\n  self._parent.setDTDHandler(self)\n  self._parent.parse(source)\n  \n def setLocale(self,locale):\n  self._parent.setLocale(locale)\n  \n def getFeature(self,name):\n  return self._parent.getFeature(name)\n  \n def setFeature(self,name,state):\n  self._parent.setFeature(name,state)\n  \n def getProperty(self,name):\n  return self._parent.getProperty(name)\n  \n def setProperty(self,name,value):\n  self._parent.setProperty(name,value)\n  \n  \n  \n def getParent(self):\n  return self._parent\n  \n def setParent(self,parent):\n  self._parent=parent\n  \n  \n  \ndef prepare_input_source(source,base=\"\"):\n ''\n \n \n if isinstance(source,str):\n  source=xmlreader.InputSource(source)\n elif hasattr(source,\"read\"):\n  f=source\n  source=xmlreader.InputSource()\n  source.setByteStream(f)\n  if hasattr(f,\"name\"):\n   source.setSystemId(f.name)\n   \n if source.getByteStream()is None :\n  sysid=source.getSystemId()\n  basehead=os.path.dirname(os.path.normpath(base))\n  sysidfilename=os.path.join(basehead,sysid)\n  if os.path.isfile(sysidfilename):\n   source.setSystemId(sysidfilename)\n   f=open(sysidfilename,\"rb\")\n  else :\n   source.setSystemId(urllib.parse.urljoin(base,sysid))\n   f=urllib.request.urlopen(source.getSystemId())\n   \n  source.setByteStream(f)\n  \n return source\n"], "xml.dom.NodeFilter": [".py", "\n\n\nclass NodeFilter:\n ''\n\n \n FILTER_ACCEPT=1\n FILTER_REJECT=2\n FILTER_SKIP=3\n \n SHOW_ALL=0xFFFFFFFF\n SHOW_ELEMENT=0x00000001\n SHOW_ATTRIBUTE=0x00000002\n SHOW_TEXT=0x00000004\n SHOW_CDATA_SECTION=0x00000008\n SHOW_ENTITY_REFERENCE=0x00000010\n SHOW_ENTITY=0x00000020\n SHOW_PROCESSING_INSTRUCTION=0x00000040\n SHOW_COMMENT=0x00000080\n SHOW_DOCUMENT=0x00000100\n SHOW_DOCUMENT_TYPE=0x00000200\n SHOW_DOCUMENT_FRAGMENT=0x00000400\n SHOW_NOTATION=0x00000800\n \n def acceptNode(self,node):\n  raise NotImplementedError\n"], "encodings.hp_roman8": [".py", "''\n\n\n\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='hp-roman8',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamwriter=StreamWriter,\n streamreader=StreamReader,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\xc0'\n'\\xc2'\n'\\xc8'\n'\\xca'\n'\\xcb'\n'\\xce'\n'\\xcf'\n'\\xb4'\n'\\u02cb'\n'\\u02c6'\n'\\xa8'\n'\\u02dc'\n'\\xd9'\n'\\xdb'\n'\\u20a4'\n'\\xaf'\n'\\xdd'\n'\\xfd'\n'\\xb0'\n'\\xc7'\n'\\xe7'\n'\\xd1'\n'\\xf1'\n'\\xa1'\n'\\xbf'\n'\\xa4'\n'\\xa3'\n'\\xa5'\n'\\xa7'\n'\\u0192'\n'\\xa2'\n'\\xe2'\n'\\xea'\n'\\xf4'\n'\\xfb'\n'\\xe1'\n'\\xe9'\n'\\xf3'\n'\\xfa'\n'\\xe0'\n'\\xe8'\n'\\xf2'\n'\\xf9'\n'\\xe4'\n'\\xeb'\n'\\xf6'\n'\\xfc'\n'\\xc5'\n'\\xee'\n'\\xd8'\n'\\xc6'\n'\\xe5'\n'\\xed'\n'\\xf8'\n'\\xe6'\n'\\xc4'\n'\\xec'\n'\\xd6'\n'\\xdc'\n'\\xc9'\n'\\xef'\n'\\xdf'\n'\\xd4'\n'\\xc1'\n'\\xc3'\n'\\xe3'\n'\\xd0'\n'\\xf0'\n'\\xcd'\n'\\xcc'\n'\\xd3'\n'\\xd2'\n'\\xd5'\n'\\xf5'\n'\\u0160'\n'\\u0161'\n'\\xda'\n'\\u0178'\n'\\xff'\n'\\xde'\n'\\xfe'\n'\\xb7'\n'\\xb5'\n'\\xb6'\n'\\xbe'\n'\\u2014'\n'\\xbc'\n'\\xbd'\n'\\xaa'\n'\\xba'\n'\\xab'\n'\\u25a0'\n'\\xbb'\n'\\xb1'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "time": [".py", "from browser import window\nimport javascript\n\n\ndate=javascript.JSConstructor(window.Date)\n\n\n\n\n\n\n\n_STRUCT_TM_ITEMS=9\n\n\n\n\n\ndef _get_day_of_year(arg):\n ''\n\n\n\n\n\n\n\n\n\n \n ml=[31,28,31,30,31,30,31,31,30,31,30,31]\n if arg[0]%4 ==0:\n  ml[1]+=1\n i=1\n yday=0\n while i <arg[1]:\n  yday +=ml[i -1]\n  i +=1\n yday +=arg[2]\n return yday\n \ndef _get_week_of_year(arg):\n ''\n\n\n\n\n\n\n\n\n\n\n \n d1=date(arg[0],arg[1]-1,arg[2])\n d0=date(arg[0],0,1)\n firstday=d0.getDay()\n if firstday ==0:firstday=7\n firstweek=8 -firstday\n doy=arg[7]\n if firstday !=1:\n  doy=doy -firstweek\n if doy %7 ==0:\n  week_number=doy //7\n else :\n  week_number=doy //7+1\n return week_number\n \ndef _check_struct_time(t):\n mm=t[1]\n if mm ==0:mm=1\n if -1 >mm >13:raise ValueError(\"month out of range\")\n \n dd=t[2]\n if dd ==0:dd=1\n if -1 >dd >32:raise ValueError(\"day of month out of range\")\n \n hh=t[3]\n if -1 >hh >24:raise ValueError(\"hour out of range\")\n \n minu=t[4]\n if -1 >minu >60:raise ValueError(\"minute out of range\")\n \n ss=t[5]\n if -1 >ss >62:raise ValueError(\"seconds out of range\")\n \n wd=t[6]%7\n if wd <-2:raise ValueError(\"day of week out of range\")\n \n dy=t[7]\n if dy ==0:dy=1\n if -1 >dy >367:raise ValueError(\"day of year out of range\")\n \n return t[0],mm,dd,hh,minu,ss,wd,dy,t[-1]\n \n \ndef _is_dst(secs=None ):\n ''\n d=date()\n if secs is not None :\n  d=date(secs *1000)\n  \n  \n jan=date(d.getFullYear(),0,1)\n jul=date(d.getFullYear(),6,1)\n dst=int(d.getTimezoneOffset()<max(abs(jan.getTimezoneOffset()),abs(jul.getTimezoneOffset())))\n return dst\n \ndef _get_tzname():\n ''\n d=date()\n d=d.toTimeString()\n try :\n  d=d.split('(')[1].split(')')[0]\n  return (d,'NotAvailable')\n except :\n  return ('','')\n  \ndef _set_altzone():\n d=date()\n jan=date(d.getFullYear(),0,1)\n jul=date(d.getFullYear(),6,1)\n result=timezone -(jan.getTimezoneOffset()-jul.getTimezoneOffset())*60\n return result\n \ndef _check_input(t):\n if t and isinstance(t,struct_time)and len(t.args)==9:\n  t=t.args\n elif t and isinstance(t,tuple)and len(t)==9:\n  t=t\n elif t and isinstance(t,struct_time)and len(t.args)!=9:\n  raise TypeError(\"function takes exactly 9 arguments ({} given)\".format(len(t.args)))\n elif t and isinstance(t,tuple)and len(t)!=9:\n  raise TypeError(\"function takes exactly 9 arguments ({} given)\".format(len(t.args)))\n elif t and not isinstance(t,(tuple,struct_time)):\n  raise TypeError(\"Tuple or struct_time argument required\")\n else :\n  t=localtime().args\n return t\n \n \n \n \n \ndaylight=_is_dst()\ntimezone=date().getTimezoneOffset()*60\ntzname=_get_tzname()\naltzone=_set_altzone()if daylight else timezone\n\n\ndef asctime(t=None ):\n weekdays={0:\"Mon\",1:\"Tue\",2:\"Wed\",3:\"Thu\",\n 4:\"Fri\",5:\"Sat\",6:\"Sun\"}\n months={1:'Jan',2:'Feb',3:'Mar',4:'Apr',5:'May',6:'Jun',\n 7:'Jul',8:'Aug',9:'Sep',10:'Oct',11:'Nov',12:'Dec'}\n \n t=_check_input(t)\n t=_check_struct_time(t)\n \n result=\"%s %s %2d %02d:%02d:%02d %d\"%(\n weekdays[t[6]],months[t[1]],t[2],t[3],t[4],t[5],t[0])\n return result\n \ndef ctime(timestamp=None ):\n if timestamp is None :\n  timestamp=date().getTime()/1000.\n d=date(0)\n d.setUTCSeconds(timestamp)\n jan=date(d.getFullYear(),0,1)\n jul=date(d.getFullYear(),6,1)\n dst=int(d.getTimezoneOffset()<max(jan.getTimezoneOffset(),jul.getTimezoneOffset()))\n d=date(0)\n d.setUTCSeconds(timestamp+(1+dst)*3600)\n weekdays={1:\"Mon\",2:\"Tue\",3:\"Wed\",4:\"Thu\",\n 5:\"Fri\",6:\"Sat\",0:\"Sun\"}\n months={0:'Jan',1:'Feb',2:'Mar',3:'Apr',4:'May',5:'Jun',\n 6:'Jul',7:'Aug',8:'Sep',9:'Oct',10:'Nov',11:'Dec'}\n result=\"%s %s %2d %02d:%02d:%02d %d\"%(weekdays[d.getUTCDay()],\n months[d.getUTCMonth()],d.getUTCDate(),\n d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),\n d.getUTCFullYear())\n return result\n \ndef gmtime(secs=None ):\n d=date()\n if secs is not None :\n  d=date(secs *1000)\n wday=d.getUTCDay()-1 if d.getUTCDay()-1 >=0 else 6\n tmp=struct_time([d.getUTCFullYear(),\n d.getUTCMonth()+1,d.getUTCDate(),\n d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),\n wday,0,0])\n tmp.args[7]=_get_day_of_year(tmp.args)\n return tmp\n \ndef localtime(secs=None ):\n d=date()\n if secs is not None :\n  d=date(secs *1000)\n dst=_is_dst(secs)\n wday=d.getDay()-1 if d.getDay()-1 >=0 else 6\n tmp=struct_time([d.getFullYear(),\n d.getMonth()+1,d.getDate(),\n d.getHours(),d.getMinutes(),d.getSeconds(),\n wday,0,dst])\n tmp.args[7]=_get_day_of_year(tmp.args)\n return tmp\n \ndef mktime(t):\n if isinstance(t,struct_time):\n  d1=date(t.tm_year,t.tm_mon -1,t.tm_mday,\n  t.tm_hour,t.tm_min,t.tm_sec,0).getTime()\n elif isinstance(t,tuple):\n  d1=date(t[0],t[1]-1,t[2],t[3],t[4],t[5],0).getTime()\n else :\n  raise ValueError(\"Tuple or struct_time argument required\")\n d2=date(0).getTime()\n return (d1 -d2)/1000.\n \ndef monotonic():\n return javascript.JSObject(window.performance.now)()/1000.\n \ndef perf_counter():\n return float(date().getTime()/1000.0)\n \ndef time():\n return float(date().getTime()/1000)\n \ndef sleep(secs):\n start=date().getTime()\n while date().getTime()-start <secs *1000.:\n  pass\n  \ndef strftime(_format,t=None ):\n\n def ns(t,nb):\n \n  res=str(t)\n  while len(res)<nb:\n   res='0'+res\n  return res\n  \n t=_check_input(t)\n t=_check_struct_time(t)\n \n YY=ns(t[0],4)\n yy=ns(t[0],4)[2:]\n mm=ns(t[1],2)\n dd=ns(t[2],2)\n HH=t[3]\n HH24=ns(HH,2)\n HH12=ns(HH %12,2)\n if HH12 ==0:HH12=12\n AMPM='AM'if 0 <=HH <12 else'PM'\n MM=ns(t[4],2)\n SS=ns(t[5],2)\n DoY=ns(t[7],3)\n w=t[6]+1 if t[6]<6 else 0\n W=ns(_get_week_of_year(t),2)\n \n abb_weekdays=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n full_weekdays=['Sunday','Monday','Tuesday','Wednesday',\n 'Thursday','Friday','Saturday']\n abb_months=['Jan','Feb','Mar','Apr','May','Jun',\n 'Jul','Aug','Sep','Oct','Nov','Dec']\n full_months=['January','February','March','April','May','June',\n 'July','August','September','October','November','December']\n \n res=_format\n res=res.replace(\"%H\",HH24)\n res=res.replace(\"%I\",HH12)\n res=res.replace(\"%p\",AMPM)\n res=res.replace(\"%M\",MM)\n res=res.replace(\"%S\",SS)\n res=res.replace(\"%Y\",YY)\n res=res.replace(\"%y\",yy)\n res=res.replace(\"%m\",mm)\n res=res.replace(\"%d\",dd)\n res=res.replace(\"%a\",abb_weekdays[w])\n res=res.replace(\"%A\",full_weekdays[w])\n res=res.replace(\"%b\",abb_months[int(mm)-1])\n res=res.replace(\"%B\",full_months[int(mm)-1])\n res=res.replace(\"%j\",DoY)\n res=res.replace(\"%w\",str(w))\n res=res.replace(\"%W\",W)\n res=res.replace(\"%x\",mm+'/'+dd+'/'+yy)\n res=res.replace(\"%X\",HH24+':'+MM+':'+SS)\n res=res.replace(\"%c\",abb_weekdays[w]+' '+abb_months[int(mm)-1]+\n ' '+dd+' '+HH24+':'+MM+':'+SS+' '+YY)\n res=res.replace(\"%%\",'%')\n \n return res\n \nclass struct_time:\n\n def __init__(self,args):\n \n  if len(args)!=9:\n   raise TypeError(\"time.struct_time() takes a 9-sequence (%s-sequence given)\"%len(args))\n   \n  self.args=args\n  \n @property\n def tm_year(self):\n  return self.args[0]\n  \n @property\n def tm_mon(self):\n  return self.args[1]\n  \n @property\n def tm_mday(self):\n  return self.args[2]\n  \n @property\n def tm_hour(self):\n  return self.args[3]\n  \n @property\n def tm_min(self):\n  return self.args[4]\n  \n @property\n def tm_sec(self):\n  return self.args[5]\n  \n @property\n def tm_wday(self):\n  return self.args[6]\n  \n @property\n def tm_yday(self):\n  return self.args[7]\n  \n @property\n def tm_isdst(self):\n  return self.args[8]\n  \n def __getitem__(self,i):\n  return self.args[i]\n  \n def __iter__(self):\n  return iter(self.args)\n  \n def __repr__(self):\n  return (\"time.structime(tm_year={}, tm_mon={}, tm_day={}, \"+  \"tm_hour={}, tm_min={}, tm_sec={}, tm_wday={}, \"+  \"tm_yday={}, tm_isdst={})\").format(*self.args)\n  \n def __str__(self):\n  return self.__repr__()\n  \ndef to_struct_time(*arg):\n arg=list(arg)\n \n \n ml=[31,28,31,30,31,30,31,31,30,31,30,31]\n if arg[0]%4 ==0:\n  ml[1]+=1\n  \n i=1\n yday=0\n while i <arg[1]:\n  yday +=ml[i -1]\n  i +=1\n yday +=arg[2]\n arg.append(yday)\n arg.append(-1)\n return struct_time(tuple(arg))\n \ndef strptime(string,_format):\n import _strptime\n return _strptime._strptime_datetime(to_struct_time,string,_format)\n \n \n \n_clock_msg=\"\"\"Browser cannot access CPU. See '%s'\"\"\"\ndef _clock_xx(url):\n raise NotImplementedError(_clock_msg %url)\nclock=lambda :_clock_xx(\"https://docs.python.org/3/library/time.html#time.clock\")\nclock_getres=lambda :_clock_xx(\"https://docs.python.org/3/library/time.html#time.clock_getres\")\nclock_gettime=lambda :_clock_xx(\"https://docs.python.org/3/library/time.html#time.clock_gettime\")\nclock_settime=lambda :_clock_xx(\"https://docs.python.org/3/library/time.html#time.clock_settime\")\nCLOCK_HIGHRES=_clock_msg %\"https://docs.python.org/3/library/time.html#time.CLOCK_HIGHRES\"\nCLOCK_MONOTONIC=_clock_msg %\"https://docs.python.org/3/library/time.html#time.CLOCK_MONOTONIC\"\nCLOCK_MONOTONIC_RAW=_clock_msg %\"https://docs.python.org/3/library/time.html#time.CLOCK_MONOTONIC_RAW\"\nCLOCK_PROCESS_CPUTIME_ID=_clock_msg %\"https://docs.python.org/3/library/time.html#time.CLOCK_PROCESS_CPUTIME_ID\"\nCLOCK_REALTIME=_clock_msg %\"https://docs.python.org/3/library/time.html#time.CLOCK_REALTIME\"\nCLOCK_THREAD_CPUTIME_ID=_clock_msg %\"https://docs.python.org/3/library/time.html#time.CLOCK_THREAD_CPUTIME_ID\"\nget_clock_info=lambda :_clock_xx(\"https://docs.python.org/3/library/time.html#time.get_clock_info\")\nprocess_time=lambda :_clock_xx(\"https://docs.python.org/3/library/time.html#time.process_time\")\n\ndef tzset():\n raise NotImplementedError()\n"], "xml.sax.handler": [".py", "''\n\n\n\n\n\n\n\n\n\n\nversion='2.0beta'\n\n\n\n\n\n\n\n\n\nclass ErrorHandler:\n ''\n\n\n\n\n\n\n \n \n def error(self,exception):\n  ''\n  raise exception\n  \n def fatalError(self,exception):\n  ''\n  raise exception\n  \n def warning(self,exception):\n  ''\n  print(exception)\n  \n  \n  \n  \nclass ContentHandler:\n ''\n\n\n\n \n \n def __init__(self):\n  self._locator=None\n  \n def setDocumentLocator(self,locator):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self._locator=locator\n  \n def startDocument(self):\n  ''\n\n\n\n  \n  \n def endDocument(self):\n  ''\n\n\n\n\n\n  \n  \n def startPrefixMapping(self,prefix,uri):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n def endPrefixMapping(self,prefix):\n  ''\n\n\n\n  \n  \n def startElement(self,name,attrs):\n  ''\n\n\n\n\n  \n  \n def endElement(self,name):\n  ''\n\n\n  \n  \n def startElementNS(self,name,qname,attrs):\n  ''\n\n\n\n\n\n\n\n\n  \n  \n def endElementNS(self,name,qname):\n  ''\n\n\n  \n  \n def characters(self,content):\n  ''\n\n\n\n\n\n\n  \n  \n def ignorableWhitespace(self,whitespace):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  \n def processingInstruction(self,target,data):\n  ''\n\n\n\n\n\n\n\n  \n  \n def skippedEntity(self,name):\n  ''\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \nclass DTDHandler:\n ''\n\n\n \n \n def notationDecl(self,name,publicId,systemId):\n  ''\n  \n def unparsedEntityDecl(self,name,publicId,systemId,ndata):\n  ''\n  \n  \n  \n  \nclass EntityResolver:\n ''\n\n\n\n \n \n def resolveEntity(self,publicId,systemId):\n  ''\n\n  \n  return systemId\n  \n  \n  \n  \n  \n  \n  \n  \nfeature_namespaces=\"http://xml.org/sax/features/namespaces\"\n\n\n\n\n\nfeature_namespace_prefixes=\"http://xml.org/sax/features/namespace-prefixes\"\n\n\n\n\n\n\nfeature_string_interning=\"http://xml.org/sax/features/string-interning\"\n\n\n\n\n\nfeature_validation=\"http://xml.org/sax/features/validation\"\n\n\n\n\n\nfeature_external_ges=\"http://xml.org/sax/features/external-general-entities\"\n\n\n\n\nfeature_external_pes=\"http://xml.org/sax/features/external-parameter-entities\"\n\n\n\n\n\n\nall_features=[feature_namespaces,\nfeature_namespace_prefixes,\nfeature_string_interning,\nfeature_validation,\nfeature_external_ges,\nfeature_external_pes]\n\n\n\n\n\n\n\n\nproperty_lexical_handler=\"http://xml.org/sax/properties/lexical-handler\"\n\n\n\n\nproperty_declaration_handler=\"http://xml.org/sax/properties/declaration-handler\"\n\n\n\n\n\nproperty_dom_node=\"http://xml.org/sax/properties/dom-node\"\n\n\n\n\n\n\nproperty_xml_string=\"http://xml.org/sax/properties/xml-string\"\n\n\n\n\n\nproperty_encoding=\"http://www.python.org/sax/properties/encoding\"\n\n\n\n\n\n\n\n\n\n\nproperty_interning_dict=\"http://www.python.org/sax/properties/interning-dict\"\n\n\n\n\n\n\n\nall_properties=[property_lexical_handler,\nproperty_dom_node,\nproperty_declaration_handler,\nproperty_xml_string,\nproperty_encoding,\nproperty_interning_dict]\n"], "xml.etree.ElementPath": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport re\n\nxpath_tokenizer_re=re.compile(\n\"(\"\n\"'[^']*'|\\\"[^\\\"]*\\\"|\"\n\"::|\"\n\"//?|\"\n\"\\.\\.|\"\n\"\\(\\)|\"\n\"[/.*:\\[\\]\\(\\)@=])|\"\n\"((?:\\{[^}]+\\})?[^/\\[\\]\\(\\)@=\\s]+)|\"\n\"\\s+\"\n)\n\ndef xpath_tokenizer(pattern,namespaces=None ):\n for token in xpath_tokenizer_re.findall(pattern):\n  tag=token[1]\n  if tag and tag[0]!=\"{\"and\":\"in tag:\n   try :\n    prefix,uri=tag.split(\":\",1)\n    if not namespaces:\n     raise KeyError\n    yield token[0],\"{%s}%s\"%(namespaces[prefix],uri)\n   except KeyError:\n    raise SyntaxError(\"prefix %r not found in prefix map\"%prefix)\n  else :\n   yield token\n   \ndef get_parent_map(context):\n parent_map=context.parent_map\n if parent_map is None :\n  context.parent_map=parent_map={}\n  for p in context.root.iter():\n   for e in p:\n    parent_map[e]=p\n return parent_map\n \ndef prepare_child(next,token):\n tag=token[1]\n def select(context,result):\n  for elem in result:\n   for e in elem:\n    if e.tag ==tag:\n     yield e\n return select\n \ndef prepare_star(next,token):\n def select(context,result):\n  for elem in result:\n   for e in elem:\n    yield e\n return select\n \ndef prepare_self(next,token):\n def select(context,result):\n  for elem in result:\n   yield elem\n return select\n \ndef prepare_descendant(next,token):\n token=next()\n if token[0]==\"*\":\n  tag=\"*\"\n elif not token[0]:\n  tag=token[1]\n else :\n  raise SyntaxError(\"invalid descendant\")\n def select(context,result):\n  for elem in result:\n   for e in elem.iter(tag):\n    if e is not elem:\n     yield e\n return select\n \ndef prepare_parent(next,token):\n def select(context,result):\n \n  parent_map=get_parent_map(context)\n  result_map={}\n  for elem in result:\n   if elem in parent_map:\n    parent=parent_map[elem]\n    if parent not in result_map:\n     result_map[parent]=None\n     yield parent\n return select\n \ndef prepare_predicate(next,token):\n\n\n\n signature=[]\n predicate=[]\n while 1:\n  token=next()\n  if token[0]==\"]\":\n   break\n  if token[0]and token[0][:1]in\"'\\\"\":\n   token=\"'\",token[0][1:-1]\n  signature.append(token[0]or\"-\")\n  predicate.append(token[1])\n signature=\"\".join(signature)\n \n if signature ==\"@-\":\n \n  key=predicate[1]\n  def select(context,result):\n   for elem in result:\n    if elem.get(key)is not None :\n     yield elem\n  return select\n if signature ==\"@-='\":\n \n  key=predicate[1]\n  value=predicate[-1]\n  def select(context,result):\n   for elem in result:\n    if elem.get(key)==value:\n     yield elem\n  return select\n if signature ==\"-\"and not re.match(\"\\d+$\",predicate[0]):\n \n  tag=predicate[0]\n  def select(context,result):\n   for elem in result:\n    if elem.find(tag)is not None :\n     yield elem\n  return select\n if signature ==\"-='\"and not re.match(\"\\d+$\",predicate[0]):\n \n  tag=predicate[0]\n  value=predicate[-1]\n  def select(context,result):\n   for elem in result:\n    for e in elem.findall(tag):\n     if\"\".join(e.itertext())==value:\n      yield elem\n      break\n  return select\n if signature ==\"-\"or signature ==\"-()\"or signature ==\"-()-\":\n \n  if signature ==\"-\":\n   index=int(predicate[0])-1\n  else :\n   if predicate[0]!=\"last\":\n    raise SyntaxError(\"unsupported function\")\n   if signature ==\"-()-\":\n    try :\n     index=int(predicate[2])-1\n    except ValueError:\n     raise SyntaxError(\"unsupported expression\")\n   else :\n    index=-1\n  def select(context,result):\n   parent_map=get_parent_map(context)\n   for elem in result:\n    try :\n     parent=parent_map[elem]\n     \n     elems=list(parent.findall(elem.tag))\n     if elems[index]is elem:\n      yield elem\n    except (IndexError,KeyError):\n     pass\n  return select\n raise SyntaxError(\"invalid predicate\")\n \nops={\n\"\":prepare_child,\n\"*\":prepare_star,\n\".\":prepare_self,\n\"..\":prepare_parent,\n\"//\":prepare_descendant,\n\"[\":prepare_predicate,\n}\n\n_cache={}\n\nclass _SelectorContext:\n parent_map=None\n def __init__(self,root):\n  self.root=root\n  \n  \n  \n  \n  \n  \ndef iterfind(elem,path,namespaces=None ):\n\n if path[-1:]==\"/\":\n  path=path+\"*\"\n try :\n  selector=_cache[path]\n except KeyError:\n  if len(_cache)>100:\n   _cache.clear()\n  if path[:1]==\"/\":\n   raise SyntaxError(\"cannot use absolute path on element\")\n  next=iter(xpath_tokenizer(path,namespaces)).__next__\n  token=next()\n  selector=[]\n  while 1:\n   try :\n    selector.append(ops[token[0]](next,token))\n   except StopIteration:\n    raise SyntaxError(\"invalid path\")\n   try :\n    token=next()\n    if token[0]==\"/\":\n     token=next()\n   except StopIteration:\n    break\n  _cache[path]=selector\n  \n result=[elem]\n context=_SelectorContext(elem)\n for select in selector:\n  result=select(context,result)\n return result\n \n \n \n \ndef find(elem,path,namespaces=None ):\n try :\n  return next(iterfind(elem,path,namespaces))\n except StopIteration:\n  return None\n  \n  \n  \n  \ndef findall(elem,path,namespaces=None ):\n return list(iterfind(elem,path,namespaces))\n \n \n \n \ndef findtext(elem,path,default=None ,namespaces=None ):\n try :\n  elem=next(iterfind(elem,path,namespaces))\n  return elem.text or\"\"\n except StopIteration:\n  return default\n"], "_sys": [".js", "var $module=(function($B){\n    var _b_=$B.builtins\n    return {\n        // Called \"Getframe\" because \"_getframe\" wouldn't be imported in \n        // sys.py with \"from _sys import *\"\n        Getframe : function(depth){\n            return $B._frame($B.frames_stack, depth)\n        },\n        modules :\n            {'__get__':function(){return $B.obj_dict($B.imported)},\n             '__set__':function(self, obj, value){ throw _b_.TypeError(\"Read only property 'sys.modules'\") }\n            },\n        path: \n            {'__get__':function(){return $B.path},\n             '__set__':function(self, obj, value){ $B.path = value }\n            },\n        meta_path: \n            {'__get__':function(){return $B.meta_path},\n             '__set__':function(self, obj, value){ $B.meta_path = value }\n            },\n        path_hooks: \n            {'__get__':function(){return $B.path_hooks},\n             '__set__':function(self, obj, value){ $B.path_hooks = value }\n            },\n        path_importer_cache: \n            {'__get__':function(){return _b_.dict($B.JSObject($B.path_importer_cache))},\n             '__set__':function(self, obj, value){ throw _b_.TypeError(\"Read only property 'sys.path_importer_cache'\") }\n            },\n        stderr : {\n            __get__:function(){return $B.stderr},\n            __set__:function(self, obj, value){$B.stderr = value},\n            write:function(data){_b_.getattr($B.stderr,\"write\")(data)}\n            },\n        stdout : {\n            __get__:function(){return $B.stdout},\n            __set__:function(self, obj, value){$B.stdout = value},\n            write:function(data){_b_.getattr($B.stdout,\"write\")(data)}\n            },\n        stdin : $B.stdin\n    }\n})(__BRYTHON__)\n"], "encodings.aliases": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\naliases={\n\n\n\n\n'646':'ascii',\n'ansi_x3.4_1968':'ascii',\n'ansi_x3_4_1968':'ascii',\n'ansi_x3.4_1986':'ascii',\n'cp367':'ascii',\n'csascii':'ascii',\n'ibm367':'ascii',\n'iso646_us':'ascii',\n'iso_646.irv_1991':'ascii',\n'iso_ir_6':'ascii',\n'us':'ascii',\n'us_ascii':'ascii',\n\n\n'base64':'base64_codec',\n'base_64':'base64_codec',\n\n\n'big5_tw':'big5',\n'csbig5':'big5',\n\n\n'big5_hkscs':'big5hkscs',\n'hkscs':'big5hkscs',\n\n\n'bz2':'bz2_codec',\n\n\n'037':'cp037',\n'csibm037':'cp037',\n'ebcdic_cp_ca':'cp037',\n'ebcdic_cp_nl':'cp037',\n'ebcdic_cp_us':'cp037',\n'ebcdic_cp_wt':'cp037',\n'ibm037':'cp037',\n'ibm039':'cp037',\n\n\n'1026':'cp1026',\n'csibm1026':'cp1026',\n'ibm1026':'cp1026',\n\n\n'1125':'cp1125',\n'ibm1125':'cp1125',\n'cp866u':'cp1125',\n'ruscii':'cp1125',\n\n\n'1140':'cp1140',\n'ibm1140':'cp1140',\n\n\n'1250':'cp1250',\n'windows_1250':'cp1250',\n\n\n'1251':'cp1251',\n'windows_1251':'cp1251',\n\n\n'1252':'cp1252',\n'windows_1252':'cp1252',\n\n\n'1253':'cp1253',\n'windows_1253':'cp1253',\n\n\n'1254':'cp1254',\n'windows_1254':'cp1254',\n\n\n'1255':'cp1255',\n'windows_1255':'cp1255',\n\n\n'1256':'cp1256',\n'windows_1256':'cp1256',\n\n\n'1257':'cp1257',\n'windows_1257':'cp1257',\n\n\n'1258':'cp1258',\n'windows_1258':'cp1258',\n\n\n'273':'cp273',\n'ibm273':'cp273',\n'csibm273':'cp273',\n\n\n'424':'cp424',\n'csibm424':'cp424',\n'ebcdic_cp_he':'cp424',\n'ibm424':'cp424',\n\n\n'437':'cp437',\n'cspc8codepage437':'cp437',\n'ibm437':'cp437',\n\n\n'500':'cp500',\n'csibm500':'cp500',\n'ebcdic_cp_be':'cp500',\n'ebcdic_cp_ch':'cp500',\n'ibm500':'cp500',\n\n\n'775':'cp775',\n'cspc775baltic':'cp775',\n'ibm775':'cp775',\n\n\n'850':'cp850',\n'cspc850multilingual':'cp850',\n'ibm850':'cp850',\n\n\n'852':'cp852',\n'cspcp852':'cp852',\n'ibm852':'cp852',\n\n\n'855':'cp855',\n'csibm855':'cp855',\n'ibm855':'cp855',\n\n\n'857':'cp857',\n'csibm857':'cp857',\n'ibm857':'cp857',\n\n\n'858':'cp858',\n'csibm858':'cp858',\n'ibm858':'cp858',\n\n\n'860':'cp860',\n'csibm860':'cp860',\n'ibm860':'cp860',\n\n\n'861':'cp861',\n'cp_is':'cp861',\n'csibm861':'cp861',\n'ibm861':'cp861',\n\n\n'862':'cp862',\n'cspc862latinhebrew':'cp862',\n'ibm862':'cp862',\n\n\n'863':'cp863',\n'csibm863':'cp863',\n'ibm863':'cp863',\n\n\n'864':'cp864',\n'csibm864':'cp864',\n'ibm864':'cp864',\n\n\n'865':'cp865',\n'csibm865':'cp865',\n'ibm865':'cp865',\n\n\n'866':'cp866',\n'csibm866':'cp866',\n'ibm866':'cp866',\n\n\n'869':'cp869',\n'cp_gr':'cp869',\n'csibm869':'cp869',\n'ibm869':'cp869',\n\n\n'932':'cp932',\n'ms932':'cp932',\n'mskanji':'cp932',\n'ms_kanji':'cp932',\n\n\n'949':'cp949',\n'ms949':'cp949',\n'uhc':'cp949',\n\n\n'950':'cp950',\n'ms950':'cp950',\n\n\n'jisx0213':'euc_jis_2004',\n'eucjis2004':'euc_jis_2004',\n'euc_jis2004':'euc_jis_2004',\n\n\n'eucjisx0213':'euc_jisx0213',\n\n\n'eucjp':'euc_jp',\n'ujis':'euc_jp',\n'u_jis':'euc_jp',\n\n\n'euckr':'euc_kr',\n'korean':'euc_kr',\n'ksc5601':'euc_kr',\n'ks_c_5601':'euc_kr',\n'ks_c_5601_1987':'euc_kr',\n'ksx1001':'euc_kr',\n'ks_x_1001':'euc_kr',\n\n\n'gb18030_2000':'gb18030',\n\n\n'chinese':'gb2312',\n'csiso58gb231280':'gb2312',\n'euc_cn':'gb2312',\n'euccn':'gb2312',\n'eucgb2312_cn':'gb2312',\n'gb2312_1980':'gb2312',\n'gb2312_80':'gb2312',\n'iso_ir_58':'gb2312',\n\n\n'936':'gbk',\n'cp936':'gbk',\n'ms936':'gbk',\n\n\n'hex':'hex_codec',\n\n\n'roman8':'hp_roman8',\n'r8':'hp_roman8',\n'csHPRoman8':'hp_roman8',\n\n\n'hzgb':'hz',\n'hz_gb':'hz',\n'hz_gb_2312':'hz',\n\n\n'csiso2022jp':'iso2022_jp',\n'iso2022jp':'iso2022_jp',\n'iso_2022_jp':'iso2022_jp',\n\n\n'iso2022jp_1':'iso2022_jp_1',\n'iso_2022_jp_1':'iso2022_jp_1',\n\n\n'iso2022jp_2':'iso2022_jp_2',\n'iso_2022_jp_2':'iso2022_jp_2',\n\n\n'iso_2022_jp_2004':'iso2022_jp_2004',\n'iso2022jp_2004':'iso2022_jp_2004',\n\n\n'iso2022jp_3':'iso2022_jp_3',\n'iso_2022_jp_3':'iso2022_jp_3',\n\n\n'iso2022jp_ext':'iso2022_jp_ext',\n'iso_2022_jp_ext':'iso2022_jp_ext',\n\n\n'csiso2022kr':'iso2022_kr',\n'iso2022kr':'iso2022_kr',\n'iso_2022_kr':'iso2022_kr',\n\n\n'csisolatin6':'iso8859_10',\n'iso_8859_10':'iso8859_10',\n'iso_8859_10_1992':'iso8859_10',\n'iso_ir_157':'iso8859_10',\n'l6':'iso8859_10',\n'latin6':'iso8859_10',\n\n\n'thai':'iso8859_11',\n'iso_8859_11':'iso8859_11',\n'iso_8859_11_2001':'iso8859_11',\n\n\n'iso_8859_13':'iso8859_13',\n'l7':'iso8859_13',\n'latin7':'iso8859_13',\n\n\n'iso_8859_14':'iso8859_14',\n'iso_8859_14_1998':'iso8859_14',\n'iso_celtic':'iso8859_14',\n'iso_ir_199':'iso8859_14',\n'l8':'iso8859_14',\n'latin8':'iso8859_14',\n\n\n'iso_8859_15':'iso8859_15',\n'l9':'iso8859_15',\n'latin9':'iso8859_15',\n\n\n'iso_8859_16':'iso8859_16',\n'iso_8859_16_2001':'iso8859_16',\n'iso_ir_226':'iso8859_16',\n'l10':'iso8859_16',\n'latin10':'iso8859_16',\n\n\n'csisolatin2':'iso8859_2',\n'iso_8859_2':'iso8859_2',\n'iso_8859_2_1987':'iso8859_2',\n'iso_ir_101':'iso8859_2',\n'l2':'iso8859_2',\n'latin2':'iso8859_2',\n\n\n'csisolatin3':'iso8859_3',\n'iso_8859_3':'iso8859_3',\n'iso_8859_3_1988':'iso8859_3',\n'iso_ir_109':'iso8859_3',\n'l3':'iso8859_3',\n'latin3':'iso8859_3',\n\n\n'csisolatin4':'iso8859_4',\n'iso_8859_4':'iso8859_4',\n'iso_8859_4_1988':'iso8859_4',\n'iso_ir_110':'iso8859_4',\n'l4':'iso8859_4',\n'latin4':'iso8859_4',\n\n\n'csisolatincyrillic':'iso8859_5',\n'cyrillic':'iso8859_5',\n'iso_8859_5':'iso8859_5',\n'iso_8859_5_1988':'iso8859_5',\n'iso_ir_144':'iso8859_5',\n\n\n'arabic':'iso8859_6',\n'asmo_708':'iso8859_6',\n'csisolatinarabic':'iso8859_6',\n'ecma_114':'iso8859_6',\n'iso_8859_6':'iso8859_6',\n'iso_8859_6_1987':'iso8859_6',\n'iso_ir_127':'iso8859_6',\n\n\n'csisolatingreek':'iso8859_7',\n'ecma_118':'iso8859_7',\n'elot_928':'iso8859_7',\n'greek':'iso8859_7',\n'greek8':'iso8859_7',\n'iso_8859_7':'iso8859_7',\n'iso_8859_7_1987':'iso8859_7',\n'iso_ir_126':'iso8859_7',\n\n\n'csisolatinhebrew':'iso8859_8',\n'hebrew':'iso8859_8',\n'iso_8859_8':'iso8859_8',\n'iso_8859_8_1988':'iso8859_8',\n'iso_ir_138':'iso8859_8',\n\n\n'csisolatin5':'iso8859_9',\n'iso_8859_9':'iso8859_9',\n'iso_8859_9_1989':'iso8859_9',\n'iso_ir_148':'iso8859_9',\n'l5':'iso8859_9',\n'latin5':'iso8859_9',\n\n\n'cp1361':'johab',\n'ms1361':'johab',\n\n\n'cskoi8r':'koi8_r',\n\n\n\n\n\n\n\n\n'8859':'latin_1',\n'cp819':'latin_1',\n'csisolatin1':'latin_1',\n'ibm819':'latin_1',\n'iso8859':'latin_1',\n'iso8859_1':'latin_1',\n'iso_8859_1':'latin_1',\n'iso_8859_1_1987':'latin_1',\n'iso_ir_100':'latin_1',\n'l1':'latin_1',\n'latin':'latin_1',\n'latin1':'latin_1',\n\n\n'maccyrillic':'mac_cyrillic',\n\n\n'macgreek':'mac_greek',\n\n\n'maciceland':'mac_iceland',\n\n\n'maccentraleurope':'mac_latin2',\n'maclatin2':'mac_latin2',\n\n\n'macintosh':'mac_roman',\n'macroman':'mac_roman',\n\n\n'macturkish':'mac_turkish',\n\n\n'dbcs':'mbcs',\n\n\n'csptcp154':'ptcp154',\n'pt154':'ptcp154',\n'cp154':'ptcp154',\n'cyrillic_asian':'ptcp154',\n\n\n'quopri':'quopri_codec',\n'quoted_printable':'quopri_codec',\n'quotedprintable':'quopri_codec',\n\n\n'rot13':'rot_13',\n\n\n'csshiftjis':'shift_jis',\n'shiftjis':'shift_jis',\n'sjis':'shift_jis',\n's_jis':'shift_jis',\n\n\n'shiftjis2004':'shift_jis_2004',\n'sjis_2004':'shift_jis_2004',\n's_jis_2004':'shift_jis_2004',\n\n\n'shiftjisx0213':'shift_jisx0213',\n'sjisx0213':'shift_jisx0213',\n's_jisx0213':'shift_jisx0213',\n\n\n'tis260':'tactis',\n\n\n'tis620':'tis_620',\n'tis_620_0':'tis_620',\n'tis_620_2529_0':'tis_620',\n'tis_620_2529_1':'tis_620',\n'iso_ir_166':'tis_620',\n\n\n'u16':'utf_16',\n'utf16':'utf_16',\n\n\n'unicodebigunmarked':'utf_16_be',\n'utf_16be':'utf_16_be',\n\n\n'unicodelittleunmarked':'utf_16_le',\n'utf_16le':'utf_16_le',\n\n\n'u32':'utf_32',\n'utf32':'utf_32',\n\n\n'utf_32be':'utf_32_be',\n\n\n'utf_32le':'utf_32_le',\n\n\n'u7':'utf_7',\n'utf7':'utf_7',\n'unicode_1_1_utf_7':'utf_7',\n\n\n'u8':'utf_8',\n'utf':'utf_8',\n'utf8':'utf_8',\n'utf8_ucs2':'utf_8',\n'utf8_ucs4':'utf_8',\n\n\n'uu':'uu_codec',\n\n\n'zip':'zlib_codec',\n'zlib':'zlib_codec',\n\n\n'x_mac_japanese':'shift_jis',\n'x_mac_korean':'euc_kr',\n'x_mac_simp_chinese':'gb2312',\n'x_mac_trad_chinese':'big5',\n}\n"], "xml.dom.domreg": [".py", "''\n\n\n\n\n\n\n\nwell_known_implementations={\n'minidom':'xml.dom.minidom',\n'4DOM':'xml.dom.DOMImplementation',\n}\n\n\n\n\nregistered={}\n\ndef registerDOMImplementation(name,factory):\n ''\n\n\n\n\n\n \n \n registered[name]=factory\n \ndef _good_enough(dom,features):\n ''\n for f,v in features:\n  if not dom.hasFeature(f,v):\n   return 0\n return 1\n \ndef getDOMImplementation(name=None ,features=()):\n ''\n\n\n\n\n\n\n\n\n\n \n \n import os\n creator=None\n mod=well_known_implementations.get(name)\n if mod:\n  mod=__import__(mod,{},{},['getDOMImplementation'])\n  return mod.getDOMImplementation()\n elif name:\n  return registered[name]()\n elif\"PYTHON_DOM\"in os.environ:\n  return getDOMImplementation(name=os.environ[\"PYTHON_DOM\"])\n  \n  \n  \n if isinstance(features,str):\n  features=_parse_feature_string(features)\n for creator in registered.values():\n  dom=creator()\n  if _good_enough(dom,features):\n   return dom\n   \n for creator in well_known_implementations.keys():\n  try :\n   dom=getDOMImplementation(name=creator)\n  except Exception:\n   continue\n  if _good_enough(dom,features):\n   return dom\n   \n raise ImportError(\"no suitable DOM implementation found\")\n \ndef _parse_feature_string(s):\n features=[]\n parts=s.split()\n i=0\n length=len(parts)\n while i <length:\n  feature=parts[i]\n  if feature[0]in\"0123456789\":\n   raise ValueError(\"bad feature name: %r\"%(feature,))\n  i=i+1\n  version=None\n  if i <length:\n   v=parts[i]\n   if v[0]in\"0123456789\":\n    i=i+1\n    version=v\n  features.append((feature,version))\n return tuple(features)\n"], "pprint": [".py", "\n\n\n\n\n\n\n\n\n\n\"\"\"Support to pretty-print lists, tuples, & dictionaries recursively.\n\nVery simple, but useful, especially in debugging data structures.\n\nClasses\n-------\n\nPrettyPrinter()\n    Handle pretty-printing operations onto a stream using a configured\n    set of formatting parameters.\n\nFunctions\n---------\n\npformat()\n    Format a Python object into a pretty-printed representation.\n\npprint()\n    Pretty-print a Python object to a stream [default is sys.stdout].\n\nsaferepr()\n    Generate a 'standard' repr()-like value, but protect against recursive\n    data structures.\n\n\"\"\"\n\nimport sys as _sys\nfrom collections import OrderedDict as _OrderedDict\nfrom io import StringIO as _StringIO\n\n__all__=[\"pprint\",\"pformat\",\"isreadable\",\"isrecursive\",\"saferepr\",\n\"PrettyPrinter\"]\n\n\n_commajoin=\", \".join\n_id=id\n_len=len\n_type=type\n\n\ndef pprint(object,stream=None ,indent=1,width=80,depth=None ):\n ''\n printer=PrettyPrinter(\n stream=stream,indent=indent,width=width,depth=depth)\n printer.pprint(object)\n \ndef pformat(object,indent=1,width=80,depth=None ):\n ''\n return PrettyPrinter(indent=indent,width=width,depth=depth).pformat(object)\n \ndef saferepr(object):\n ''\n return _safe_repr(object,{},None ,0)[0]\n \ndef isreadable(object):\n ''\n return _safe_repr(object,{},None ,0)[1]\n \ndef isrecursive(object):\n ''\n return _safe_repr(object,{},None ,0)[2]\n \nclass _safe_key:\n ''\n\n\n\n\n\n\n \n \n __slots__=['obj']\n \n def __init__(self,obj):\n  self.obj=obj\n  \n def __lt__(self,other):\n  try :\n   rv=self.obj.__lt__(other.obj)\n  except TypeError:\n   rv=NotImplemented\n   \n  if rv is NotImplemented:\n   rv=(str(type(self.obj)),id(self.obj))<   (str(type(other.obj)),id(other.obj))\n  return rv\n  \ndef _safe_tuple(t):\n ''\n return _safe_key(t[0]),_safe_key(t[1])\n \nclass PrettyPrinter:\n def __init__(self,indent=1,width=80,depth=None ,stream=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  indent=int(indent)\n  width=int(width)\n  assert indent >=0,\"indent must be >= 0\"\n  assert depth is None or depth >0,\"depth must be > 0\"\n  assert width,\"width must be != 0\"\n  self._depth=depth\n  self._indent_per_level=indent\n  self._width=width\n  if stream is not None :\n   self._stream=stream\n  else :\n   self._stream=_sys.stdout\n   \n def pprint(self,object):\n  self._format(object,self._stream,0,0,{},0)\n  self._stream.write(\"\\n\")\n  \n def pformat(self,object):\n  sio=_StringIO()\n  self._format(object,sio,0,0,{},0)\n  return sio.getvalue()\n  \n def isrecursive(self,object):\n  return self.format(object,{},0,0)[2]\n  \n def isreadable(self,object):\n  s,readable,recursive=self.format(object,{},0,0)\n  return readable and not recursive\n  \n def _format(self,object,stream,indent,allowance,context,level):\n  level=level+1\n  import sys\n  sys.stderr.write(str(object))\n  objid=_id(object)\n  if objid in context:\n   stream.write(_recursion(object))\n   self._recursive=True\n   self._readable=False\n   return\n  rep=self._repr(object,context,level -1)\n  typ=_type(object)\n  sepLines=_len(rep)>(self._width -1 -indent -allowance)\n  write=stream.write\n  \n  if self._depth and level >self._depth:\n   write(rep)\n   return\n   \n  if sepLines:\n   r=getattr(typ,\"__repr__\",None )\n   if issubclass(typ,dict):\n    write('{')\n    if self._indent_per_level >1:\n     write((self._indent_per_level -1)*' ')\n    length=_len(object)\n    if length:\n     context[objid]=1\n     indent=indent+self._indent_per_level\n     if issubclass(typ,_OrderedDict):\n      items=list(object.items())\n     else :\n      items=sorted(object.items(),key=_safe_tuple)\n     key,ent=items[0]\n     rep=self._repr(key,context,level)\n     write(rep)\n     write(': ')\n     self._format(ent,stream,indent+_len(rep)+2,\n     allowance+1,context,level)\n     if length >1:\n      for key,ent in items[1:]:\n       rep=self._repr(key,context,level)\n       write(',\\n%s%s: '%(' '*indent,rep))\n       self._format(ent,stream,indent+_len(rep)+2,\n       allowance+1,context,level)\n     indent=indent -self._indent_per_level\n     del context[objid]\n    write('}')\n    return\n    \n   if ((issubclass(typ,list)and r is list.__repr__)or\n   (issubclass(typ,tuple)and r is tuple.__repr__)or\n   (issubclass(typ,set)and r is set.__repr__)or\n   (issubclass(typ,frozenset)and r is frozenset.__repr__)\n   ):\n    length=_len(object)\n    if issubclass(typ,list):\n     write('[')\n     endchar=']'\n    elif issubclass(typ,tuple):\n     write('(')\n     endchar=')'\n    else :\n     if not length:\n      write(rep)\n      return\n     if typ is set:\n      write('{')\n      endchar='}'\n     else :\n      write(typ.__name__)\n      write('({')\n      endchar='})'\n      indent +=len(typ.__name__)+1\n     object=sorted(object,key=_safe_key)\n    if self._indent_per_level >1:\n     write((self._indent_per_level -1)*' ')\n    if length:\n     context[objid]=1\n     indent=indent+self._indent_per_level\n     self._format(object[0],stream,indent,allowance+1,\n     context,level)\n     if length >1:\n      for ent in object[1:]:\n       write(',\\n'+' '*indent)\n       self._format(ent,stream,indent,\n       allowance+1,context,level)\n     indent=indent -self._indent_per_level\n     del context[objid]\n    if issubclass(typ,tuple)and length ==1:\n     write(',')\n    write(endchar)\n    return\n    \n  write(rep)\n  \n def _repr(self,object,context,level):\n  repr,readable,recursive=self.format(object,context.copy(),\n  self._depth,level)\n  if not readable:\n   self._readable=False\n  if recursive:\n   self._recursive=True\n  return repr\n  \n def format(self,object,context,maxlevels,level):\n  ''\n\n\n  \n  return _safe_repr(object,context,maxlevels,level)\n  \n  \n  \n  \ndef _safe_repr(object,context,maxlevels,level):\n typ=_type(object)\n if typ is str:\n  if'locale'not in _sys.modules:\n   return repr(object),True ,False\n  if\"'\"in object and'\"'not in object:\n   closure='\"'\n   quotes={'\"':'\\\\\"'}\n  else :\n   closure=\"'\"\n   quotes={\"'\":\"\\\\'\"}\n  qget=quotes.get\n  sio=_StringIO()\n  write=sio.write\n  for char in object:\n   if char.isalpha():\n    write(char)\n   else :\n    write(qget(char,repr(char)[1:-1]))\n  return (\"%s%s%s\"%(closure,sio.getvalue(),closure)),True ,False\n  \n r=getattr(typ,\"__repr__\",None )\n if issubclass(typ,dict)and r is dict.__repr__:\n  if not object:\n   return\"{}\",True ,False\n  objid=_id(object)\n  if maxlevels and level >=maxlevels:\n   return\"{...}\",False ,objid in context\n  if objid in context:\n   return _recursion(object),False ,True\n  context[objid]=1\n  readable=True\n  recursive=False\n  components=[]\n  append=components.append\n  level +=1\n  saferepr=_safe_repr\n  items=sorted(object.items(),key=_safe_tuple)\n  for k,v in items:\n   krepr,kreadable,krecur=saferepr(k,context,maxlevels,level)\n   vrepr,vreadable,vrecur=saferepr(v,context,maxlevels,level)\n   append(\"%s: %s\"%(krepr,vrepr))\n   readable=readable and kreadable and vreadable\n   if krecur or vrecur:\n    recursive=True\n  del context[objid]\n  return\"{%s}\"%_commajoin(components),readable,recursive\n  \n if (issubclass(typ,list)and r is list.__repr__)or (issubclass(typ,tuple)and r is tuple.__repr__):\n  if issubclass(typ,list):\n   if not object:\n    return\"[]\",True ,False\n   format=\"[%s]\"\n  elif _len(object)==1:\n   format=\"(%s,)\"\n  else :\n   if not object:\n    return\"()\",True ,False\n   format=\"(%s)\"\n  objid=_id(object)\n  if maxlevels and level >=maxlevels:\n   return format %\"...\",False ,objid in context\n  if objid in context:\n   return _recursion(object),False ,True\n  context[objid]=1\n  readable=True\n  recursive=False\n  components=[]\n  append=components.append\n  level +=1\n  for o in object:\n   orepr,oreadable,orecur=_safe_repr(o,context,maxlevels,level)\n   append(orepr)\n   if not oreadable:\n    readable=False\n   if orecur:\n    recursive=True\n  del context[objid]\n  return format %_commajoin(components),readable,recursive\n  \n rep=repr(object)\n return rep,(rep and not rep.startswith('<')),False\n \n \ndef _recursion(object):\n return (\"<Recursion on %s with id=%s>\"\n %(_type(object).__name__,_id(object)))\n \n \ndef _perfcheck(object=None ):\n import time\n if object is None :\n  object=[(\"string\",(1,2),[3,4],{5:6,7:8})]*100000\n p=PrettyPrinter()\n t1=time.time()\n _safe_repr(object,{},None ,0)\n t2=time.time()\n p.pformat(object)\n t3=time.time()\n print(\"_safe_repr:\",t2 -t1)\n print(\"pformat:\",t3 -t2)\n \nif __name__ ==\"__main__\":\n _perfcheck()\n"], "_functools": [".py", "def partial(func,*args,**keywords):\n def newfunc(*fargs,**fkeywords):\n  newkeywords=keywords.copy()\n  newkeywords.update(fkeywords)\n  return func(*(args+fargs),**newkeywords)\n newfunc.func=func\n newfunc.args=args\n newfunc.keywords=keywords\n return newfunc\n \ndef reduce(func,iterable,initializer=None ):\n args=iter(iterable)\n if initializer is not None :\n  res=initializer\n else :\n  res=next(args)\n while True :\n  try :\n   res=func(res,next(args))\n  except StopIteration:\n   return res\n"], "encodings.cp1006": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1006',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u06f0'\n'\\u06f1'\n'\\u06f2'\n'\\u06f3'\n'\\u06f4'\n'\\u06f5'\n'\\u06f6'\n'\\u06f7'\n'\\u06f8'\n'\\u06f9'\n'\\u060c'\n'\\u061b'\n'\\xad'\n'\\u061f'\n'\\ufe81'\n'\\ufe8d'\n'\\ufe8e'\n'\\ufe8e'\n'\\ufe8f'\n'\\ufe91'\n'\\ufb56'\n'\\ufb58'\n'\\ufe93'\n'\\ufe95'\n'\\ufe97'\n'\\ufb66'\n'\\ufb68'\n'\\ufe99'\n'\\ufe9b'\n'\\ufe9d'\n'\\ufe9f'\n'\\ufb7a'\n'\\ufb7c'\n'\\ufea1'\n'\\ufea3'\n'\\ufea5'\n'\\ufea7'\n'\\ufea9'\n'\\ufb84'\n'\\ufeab'\n'\\ufead'\n'\\ufb8c'\n'\\ufeaf'\n'\\ufb8a'\n'\\ufeb1'\n'\\ufeb3'\n'\\ufeb5'\n'\\ufeb7'\n'\\ufeb9'\n'\\ufebb'\n'\\ufebd'\n'\\ufebf'\n'\\ufec1'\n'\\ufec5'\n'\\ufec9'\n'\\ufeca'\n'\\ufecb'\n'\\ufecc'\n'\\ufecd'\n'\\ufece'\n'\\ufecf'\n'\\ufed0'\n'\\ufed1'\n'\\ufed3'\n'\\ufed5'\n'\\ufed7'\n'\\ufed9'\n'\\ufedb'\n'\\ufb92'\n'\\ufb94'\n'\\ufedd'\n'\\ufedf'\n'\\ufee0'\n'\\ufee1'\n'\\ufee3'\n'\\ufb9e'\n'\\ufee5'\n'\\ufee7'\n'\\ufe85'\n'\\ufeed'\n'\\ufba6'\n'\\ufba8'\n'\\ufba9'\n'\\ufbaa'\n'\\ufe80'\n'\\ufe89'\n'\\ufe8a'\n'\\ufe8b'\n'\\ufef1'\n'\\ufef2'\n'\\ufef3'\n'\\ufbb0'\n'\\ufbae'\n'\\ufe7c'\n'\\ufe7d'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_jsre": [".js", "var $module=(function($B){\n\n    var _b_ = $B.builtins\n    var $s=[]\n    for(var $b in _b_) $s.push('var ' + $b +'=_b_[\"'+$b+'\"]')\n    eval($s.join(';'))\n\n    var JSObject = $B.JSObject\n\n    var obj = {__class__:$module,\n        __str__: function(){return \"<module 're'>\"}\n    }\n    obj.A = obj.ASCII = 256\n    obj.I = obj.IGNORECASE = 2 // 'i'\n    obj.L = obj.LOCALE = 4\n    obj.M = obj.MULTILINE = 8 // 'm'\n    obj.S = obj.DOTALL = 16\n    obj.U = obj.UNICODE = 32\n    obj.X = obj.VERBOSE = 64\n    obj._is_valid = function(pattern) {\n        if ($B.$options.re=='pyre') return false  //force use of python's re module\n        if ($B.$options.re=='jsre') return true   //force use of brythons re module\n        // FIXME: Improve\n\n        if (!isinstance(pattern, str)) {\n           // this is probably a SRE_PATTERN, so return false, and let\n           // python's re module handle this.\n           return false\n        }\n        var is_valid = false;\n        try {\n            new RegExp(pattern);\n            is_valid = true;\n        }\n        catch(e) {}\n        if (!is_valid) return false  //if js won't parse the pattern return false\n\n        // using reference http://www.regular-expressions.info/\n        // to compare python re and javascript regex libraries\n\n        // look for things javascript does not support\n        // check for name capturing group\n        var mylist=['?P=', '?P<', '(?#', '(?<=', '(?<!', '(?(']\n        for(var i=0, _len_i = mylist.length; i < _len_i; i++) {\n           if (pattern.indexOf(mylist[i]) > -1) return false\n        }\n\n        var re_list=['\\{,\\d+\\}']\n        for(var i=0, _len_i = re_list.length; i < _len_i; i++) {\n           var _re=new RegExp(re_list[i])\n           if (_re.test(pattern)) return false\n        }\n\n        // it looks like the pattern has passed all our tests so lets assume\n        // javascript can handle this pattern.\n        return true\n    }\n    var $SRE_PatternDict = {\n        __class__:$B.$type,\n        __name__:'SRE_Pattern'\n    }\n    $SRE_PatternDict.__mro__ = [$SRE_PatternDict,object.$dict]\n    $SRE_PatternDict.findall = function(self,string){\n        return obj.findall(self.pattern,string,self.flags)\n    }\n    $SRE_PatternDict.finditer = function(self,string){\n        return obj.finditer(self.pattern,string,self.flags)\n    }\n    $SRE_PatternDict.match = function(self,string){\n        return obj.match(self.pattern,string,self.flags)\n    }\n    $SRE_PatternDict.search = function(self,string){\n        return obj.search(self.pattern,string,self.flags)\n    }\n    function normflags(flags) {\n        return ((flags & obj.I)? 'i' : '') + ((flags & obj.M)? 'm' : '');\n    }\n    obj.compile = function(pattern,flags){\n        return {\n            __class__:$SRE_PatternDict,\n            pattern:pattern,\n            flags:normflags(flags)\n        }\n    }\n    obj.escape = function(string){\n        // Escape all the characters in pattern except ASCII letters, numbers \n        // and '_'. This is useful if you want to match an arbitrary literal \n        // string that may have regular expression metacharacters in it.\n        var res = ''\n        var ok = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'\n        for(var i=0, _len_i = string.length; i < _len_i;i++){\n            if(ok.search(string.charAt(i))>-1){res += string.charAt(i)}\n        }\n        return res\n    }\n    obj.findall = function(pattern,string,flags){\n        var $ns=$B.args('re.findall',2,\n            {pattern:null, string:null}, ['pattern', 'string'],\n            arguments,{},'args','kw') ,\n            args = $ns['args'] ,\n            _flags = 0;\n        if(args.length>0){var flags=args[0]}\n        else{var _flags = getattr($ns['kw'], 'get')('flags',0)}\n        \n        var flags = normflags();\n        flags += 'gm'\n        var jsp = new RegExp(pattern,flags) ,\n            jsmatch = string.match(jsp);\n        if(jsmatch===null){return []}\n        return jsmatch\n    }\n    obj.finditer = function(pattern,string,flags){\n        var $ns=$B.args('re.finditer',2,\n            {pattern:null, sring:null}, ['pattern','string'],\n            arguments,{},'args','kw'),\n            args = $ns['args'],\n            _flags = 0;\n        if(args.length>0){var flags=args[0]}\n        else{var _flags = getattr($ns['kw'], 'get')('flags',0)}\n        \n        var flags = normflags();\n        flags += 'gm'\n        var jsp = new RegExp(pattern,flags),\n            jsmatch = string.match(jsp);\n        if(jsmatch===null){return []}\n        \n        var _list=[]\n        for (var j=0, _len_j = jsmatch.length; j < _len_j; j++) {\n            var mo = {}\n            mo._match=jsmatch[j]\n            mo.group = function(){\n               var res = []\n               for(var i=0, _len_i = arguments.length; i < _len_i;i++){\n                   if(jsmatch[arguments[i]]===undefined){res.push(None)}\n                   else{res.push(jsmatch[arguments[i]])}\n               }\n               if(arguments.length===1){return res[0]}\n               return tuple(res)\n            }\n            mo.groups = function(_default){\n               if(_default===undefined){_default=None}\n               var res = []\n               for(var i=1, _len_i = jsmatch.length; i < _len_i;i++){\n                  if(jsmatch[i]===undefined){res.push(_default)}\n                  else{res.push(jsmatch[i])}\n               }\n               return tuple(res)\n            }\n            mo.start = function(){return mo._match.index}\n            mo.end = function(){return mo._match.length-mo._match.index}\n            mo.string = string\n            _list.push(JSObject(mo))\n        }\n        return _list\n    }\n    obj.search = function(pattern,string){\n        var $ns=$B.args('re.search', 2,\n            {pattern:null, string:null},['pattern','string'],\n            arguments,{},'args','kw')\n        var args = $ns['args']\n        if(args.length>0){var flags=args[0]}\n        else{var flags = getattr($ns['kw'],'get')('flags','')}\n        flags = normflags(flags);\n        var jsp = new RegExp(pattern,flags)\n        var jsmatch = string.match(jsp)\n        if(jsmatch===null){return None}\n        var mo = new Object()\n        mo.group = function(){\n            var res = []\n            for(var i=0, _len_i = arguments.length; i < _len_i;i++){\n                if(jsmatch[arguments[i]]===undefined){res.push(None)}\n                else{res.push(jsmatch[arguments[i]])}\n            }\n            if(arguments.length===1){return res[0]}\n            return tuple(res)\n        }\n        mo.groups = function(_default){\n            if(_default===undefined){_default=None}\n            var res = []\n            for(var i=1, _len_i = jsmatch.length; i < _len_i;i++){\n                if(jsmatch[i]===undefined){res.push(_default)}\n                else{res.push(jsmatch[i])}\n            }\n            return tuple(res)\n        }\n        mo.start = function(){return jsmatch.index}\n        mo.end = function(){return jsmatch.length-jsmatch.index}\n        mo.string = string\n        return JSObject(mo)\n    }\n    obj.sub = function(pattern,repl,string){\n        var $ns=$B.args('re.search', 3,\n            {pattern:null, repl:null, string:null}, \n            ['pattern','repl','string'],\n            arguments,{},'args','kw')\n        for($var in $ns){eval(\"var \"+$var+\"=$ns[$var]\")}\n        var args = $ns['args']\n        var count = _b_.dict.$dict.get($ns['kw'],'count',0)\n        var flags = _b_.dict.$dict.get($ns['kw'],'flags','')\n        if(args.length>0){var count=args[0]}\n        if(args.length>1){var flags=args[1]}\n        flags = normflags(flags);\n        if(typeof repl===\"string\"){\n            // backreferences are \\1, \\2... in Python but $1,$2... in Javascript\n            repl = repl.replace(/\\\\(\\d+)/g,'$$$1')\n        }else if(typeof repl===\"function\"){\n            // the argument passed to the Python function is the match object\n            // the arguments passed to the Javascript function are :\n            // - the matched substring\n            // - the matched groups\n            // - the offset of the matched substring inside the string\n            // - the string being examined\n            var $repl1 = function(){\n                var mo = Object()\n                mo.string = arguments[arguments.length-1]\n                var start = arguments[arguments.length-2]\n                var end = start + arguments[0].length\n                mo.start = function(){return start}\n                mo.end = function(){return end}\n                groups = []\n                for(var i=1, _len_i = arguments.length-2; i < _len_i;i++){groups.push(arguments[i])}\n                mo.groups = function(_default){\n                    if(_default===undefined){_default=None}\n                    var res = []\n                    for(var i=0, _len_i = groups.length; i < _len_i;i++){\n                        if(groups[i]===undefined){res.push(_default)}\n                        else{res.push(groups[i])}\n                    }\n                    return res\n                }\n                return repl(JSObject(mo))\n            }\n        }\n        if(count==0){flags+='g'}\n        var jsp = new RegExp(pattern,flags)\n        if(typeof repl==='function'){return string.replace(jsp,$repl1)}\n        else{return string.replace(jsp,repl)}\n    }\n    obj.match = (function(search_func){\n        return function(){\n            // match is like search but pattern must start with ^\n            var pattern = arguments[0]\n            if(pattern.charAt(0)!=='^'){pattern = '^'+pattern}\n            var args = [pattern]\n            for(var i=1, _len_i = arguments.length; i < _len_i;i++){args.push(arguments[i])}\n            return search_func.apply(null,args)\n        }\n    })(obj.search)\n\n    return obj\n}\n)(__BRYTHON__)\n"], "crypto_js.rollups.md5": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(s,p){var m={},l=m.lib={},n=function(){},r=l.Base={extend:function(b){n.prototype=this;var h=new n;b&&h.mixIn(b);h.hasOwnProperty(\"init\")||(h.init=function(){h.$super.init.apply(this,arguments)});h.init.prototype=h;h.$super=this;return h},create:function(){var b=this.extend();b.init.apply(b,arguments);return b},init:function(){},mixIn:function(b){for(var h in b)b.hasOwnProperty(h)&&(this[h]=b[h]);b.hasOwnProperty(\"toString\")&&(this.toString=b.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=l.WordArray=r.extend({init:function(b,h){b=this.words=b||[];this.sigBytes=h!=p?h:4*b.length},toString:function(b){return(b||t).stringify(this)},concat:function(b){var h=this.words,a=b.words,j=this.sigBytes;b=b.sigBytes;this.clamp();if(j%4)for(var g=0;g<b;g++)h[j+g>>>2]|=(a[g>>>2]>>>24-8*(g%4)&255)<<24-8*((j+g)%4);else if(65535<a.length)for(g=0;g<b;g+=4)h[j+g>>>2]=a[g>>>2];else h.push.apply(h,a);this.sigBytes+=b;return this},clamp:function(){var b=this.words,h=this.sigBytes;b[h>>>2]&=4294967295<<\n32-8*(h%4);b.length=s.ceil(h/4)},clone:function(){var b=r.clone.call(this);b.words=this.words.slice(0);return b},random:function(b){for(var h=[],a=0;a<b;a+=4)h.push(4294967296*s.random()|0);return new q.init(h,b)}}),v=m.enc={},t=v.Hex={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j<b;j++){var k=a[j>>>2]>>>24-8*(j%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join(\"\")},parse:function(b){for(var a=b.length,g=[],j=0;j<a;j+=2)g[j>>>3]|=parseInt(b.substr(j,\n2),16)<<24-4*(j%8);return new q.init(g,a/2)}},a=v.Latin1={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j<b;j++)g.push(String.fromCharCode(a[j>>>2]>>>24-8*(j%4)&255));return g.join(\"\")},parse:function(b){for(var a=b.length,g=[],j=0;j<a;j++)g[j>>>2]|=(b.charCodeAt(j)&255)<<24-8*(j%4);return new q.init(g,a)}},u=v.Utf8={stringify:function(b){try{return decodeURIComponent(escape(a.stringify(b)))}catch(g){throw Error(\"Malformed UTF-8 data\");}},parse:function(b){return a.parse(unescape(encodeURIComponent(b)))}},\ng=l.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(b){\"string\"==typeof b&&(b=u.parse(b));this._data.concat(b);this._nDataBytes+=b.sigBytes},_process:function(b){var a=this._data,g=a.words,j=a.sigBytes,k=this.blockSize,m=j/(4*k),m=b?s.ceil(m):s.max((m|0)-this._minBufferSize,0);b=m*k;j=s.min(4*b,j);if(b){for(var l=0;l<b;l+=k)this._doProcessBlock(g,l);l=g.splice(0,b);a.sigBytes-=j}return new q.init(l,j)},clone:function(){var b=r.clone.call(this);\nb._data=this._data.clone();return b},_minBufferSize:0});l.Hasher=g.extend({cfg:r.extend(),init:function(b){this.cfg=this.cfg.extend(b);this.reset()},reset:function(){g.reset.call(this);this._doReset()},update:function(b){this._append(b);this._process();return this},finalize:function(b){b&&this._append(b);return this._doFinalize()},blockSize:16,_createHelper:function(b){return function(a,g){return(new b.init(g)).finalize(a)}},_createHmacHelper:function(b){return function(a,g){return(new k.HMAC.init(b,\ng)).finalize(a)}}});var k=m.algo={};return m}(Math);\n(function(s){function p(a,k,b,h,l,j,m){a=a+(k&b|~k&h)+l+m;return(a<<j|a>>>32-j)+k}function m(a,k,b,h,l,j,m){a=a+(k&h|b&~h)+l+m;return(a<<j|a>>>32-j)+k}function l(a,k,b,h,l,j,m){a=a+(k^b^h)+l+m;return(a<<j|a>>>32-j)+k}function n(a,k,b,h,l,j,m){a=a+(b^(k|~h))+l+m;return(a<<j|a>>>32-j)+k}for(var r=CryptoJS,q=r.lib,v=q.WordArray,t=q.Hasher,q=r.algo,a=[],u=0;64>u;u++)a[u]=4294967296*s.abs(s.sin(u+1))|0;q=q.MD5=t.extend({_doReset:function(){this._hash=new v.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(g,k){for(var b=0;16>b;b++){var h=k+b,w=g[h];g[h]=(w<<8|w>>>24)&16711935|(w<<24|w>>>8)&4278255360}var b=this._hash.words,h=g[k+0],w=g[k+1],j=g[k+2],q=g[k+3],r=g[k+4],s=g[k+5],t=g[k+6],u=g[k+7],v=g[k+8],x=g[k+9],y=g[k+10],z=g[k+11],A=g[k+12],B=g[k+13],C=g[k+14],D=g[k+15],c=b[0],d=b[1],e=b[2],f=b[3],c=p(c,d,e,f,h,7,a[0]),f=p(f,c,d,e,w,12,a[1]),e=p(e,f,c,d,j,17,a[2]),d=p(d,e,f,c,q,22,a[3]),c=p(c,d,e,f,r,7,a[4]),f=p(f,c,d,e,s,12,a[5]),e=p(e,f,c,d,t,17,a[6]),d=p(d,e,f,c,u,22,a[7]),\nc=p(c,d,e,f,v,7,a[8]),f=p(f,c,d,e,x,12,a[9]),e=p(e,f,c,d,y,17,a[10]),d=p(d,e,f,c,z,22,a[11]),c=p(c,d,e,f,A,7,a[12]),f=p(f,c,d,e,B,12,a[13]),e=p(e,f,c,d,C,17,a[14]),d=p(d,e,f,c,D,22,a[15]),c=m(c,d,e,f,w,5,a[16]),f=m(f,c,d,e,t,9,a[17]),e=m(e,f,c,d,z,14,a[18]),d=m(d,e,f,c,h,20,a[19]),c=m(c,d,e,f,s,5,a[20]),f=m(f,c,d,e,y,9,a[21]),e=m(e,f,c,d,D,14,a[22]),d=m(d,e,f,c,r,20,a[23]),c=m(c,d,e,f,x,5,a[24]),f=m(f,c,d,e,C,9,a[25]),e=m(e,f,c,d,q,14,a[26]),d=m(d,e,f,c,v,20,a[27]),c=m(c,d,e,f,B,5,a[28]),f=m(f,c,\nd,e,j,9,a[29]),e=m(e,f,c,d,u,14,a[30]),d=m(d,e,f,c,A,20,a[31]),c=l(c,d,e,f,s,4,a[32]),f=l(f,c,d,e,v,11,a[33]),e=l(e,f,c,d,z,16,a[34]),d=l(d,e,f,c,C,23,a[35]),c=l(c,d,e,f,w,4,a[36]),f=l(f,c,d,e,r,11,a[37]),e=l(e,f,c,d,u,16,a[38]),d=l(d,e,f,c,y,23,a[39]),c=l(c,d,e,f,B,4,a[40]),f=l(f,c,d,e,h,11,a[41]),e=l(e,f,c,d,q,16,a[42]),d=l(d,e,f,c,t,23,a[43]),c=l(c,d,e,f,x,4,a[44]),f=l(f,c,d,e,A,11,a[45]),e=l(e,f,c,d,D,16,a[46]),d=l(d,e,f,c,j,23,a[47]),c=n(c,d,e,f,h,6,a[48]),f=n(f,c,d,e,u,10,a[49]),e=n(e,f,c,d,\nC,15,a[50]),d=n(d,e,f,c,s,21,a[51]),c=n(c,d,e,f,A,6,a[52]),f=n(f,c,d,e,q,10,a[53]),e=n(e,f,c,d,y,15,a[54]),d=n(d,e,f,c,w,21,a[55]),c=n(c,d,e,f,v,6,a[56]),f=n(f,c,d,e,D,10,a[57]),e=n(e,f,c,d,t,15,a[58]),d=n(d,e,f,c,B,21,a[59]),c=n(c,d,e,f,r,6,a[60]),f=n(f,c,d,e,z,10,a[61]),e=n(e,f,c,d,j,15,a[62]),d=n(d,e,f,c,x,21,a[63]);b[0]=b[0]+c|0;b[1]=b[1]+d|0;b[2]=b[2]+e|0;b[3]=b[3]+f|0},_doFinalize:function(){var a=this._data,k=a.words,b=8*this._nDataBytes,h=8*a.sigBytes;k[h>>>5]|=128<<24-h%32;var l=s.floor(b/\n4294967296);k[(h+64>>>9<<4)+15]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360;k[(h+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;a.sigBytes=4*(k.length+1);this._process();a=this._hash;k=a.words;for(b=0;4>b;b++)h=k[b],k[b]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;return a},clone:function(){var a=t.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=t._createHelper(q);r.HmacMD5=t._createHmacHelper(q)})(Math);\n"], "_weakref": [".py", "class ProxyType:\n\n def __init__(self,obj):\n  self.obj=obj\n  \nCallableProxyType=ProxyType\nProxyTypes=[ProxyType,CallableProxyType]\n\nclass ReferenceType:\n\n def __init__(self,obj,callback):\n  self.obj=obj\n  self.callback=callback\n  \nclass ref:\n\n def __init__(self,obj,callback=None ):\n  self.obj=ReferenceType(obj,callback)\n  self.callback=callback\n  \n def __call__(self):\n  return self.obj.obj\n  \ndef getweakrefcount(obj):\n return 1\n \ndef getweakrefs(obj):\n return obj\n \n \ndef proxy(obj,callback=None ):\n return ProxyType(obj)\n \n"], "multiprocessing": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__version__='0.70a1'\n\n__all__=[\n'Process','current_process','active_children','freeze_support',\n'Manager','Pipe','cpu_count','log_to_stderr','get_logger',\n'allow_connection_pickling','BufferTooShort','TimeoutError',\n'Lock','RLock','Semaphore','BoundedSemaphore','Condition',\n'Event','Barrier','Queue','SimpleQueue','JoinableQueue','Pool',\n'Value','Array','RawValue','RawArray','SUBDEBUG','SUBWARNING',\n]\n\n__author__='R. Oudkerk (r.m.oudkerk@gmail.com)'\n\n\n\n\n\nimport os\nimport sys\n\nfrom multiprocessing.process import Process,current_process,active_children\nfrom multiprocessing.util import SUBDEBUG,SUBWARNING\n\n\n\n\n\nclass ProcessError(Exception):\n pass\n \nclass BufferTooShort(ProcessError):\n pass\n \nclass TimeoutError(ProcessError):\n pass\n \nclass AuthenticationError(ProcessError):\n pass\n \nimport _multiprocessing\n\n\n\n\n\ndef Manager():\n ''\n\n\n\n\n \n from multiprocessing.managers import SyncManager\n m=SyncManager()\n m.start()\n return m\n \n \n \n \n \n \n \n \n \ndef cpu_count():\n ''\n\n \n if sys.platform =='win32':\n  try :\n   num=int(os.environ['NUMBER_OF_PROCESSORS'])\n  except (ValueError,KeyError):\n   num=0\n elif'bsd'in sys.platform or sys.platform =='darwin':\n  comm='/sbin/sysctl -n hw.ncpu'\n  if sys.platform =='darwin':\n   comm='/usr'+comm\n  try :\n   with os.popen(comm)as p:\n    num=int(p.read())\n  except ValueError:\n   num=0\n else :\n  try :\n   num=os.sysconf('SC_NPROCESSORS_ONLN')\n  except (ValueError,OSError,AttributeError):\n   num=0\n   \n if num >=1:\n  return num\n else :\n  raise NotImplementedError('cannot determine number of cpus')\n  \ndef freeze_support():\n ''\n\n\n \n if sys.platform =='win32'and getattr(sys,'frozen',False ):\n  from multiprocessing.forking import freeze_support\n  freeze_support()\n  \ndef get_logger():\n ''\n\n \n from multiprocessing.util import get_logger\n return get_logger()\n \ndef log_to_stderr(level=None ):\n ''\n\n \n from multiprocessing.util import log_to_stderr\n return log_to_stderr(level)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \ndef Lock():\n ''\n\n \n from multiprocessing.synchronize import Lock\n return Lock()\n \ndef RLock():\n ''\n\n \n from multiprocessing.synchronize import RLock\n return RLock()\n \ndef Condition(lock=None ):\n ''\n\n \n from multiprocessing.synchronize import Condition\n return Condition(lock)\n \ndef Semaphore(value=1):\n ''\n\n \n from multiprocessing.synchronize import Semaphore\n return Semaphore(value)\n \ndef BoundedSemaphore(value=1):\n ''\n\n \n from multiprocessing.synchronize import BoundedSemaphore\n return BoundedSemaphore(value)\n \ndef Event():\n ''\n\n \n from multiprocessing.synchronize import Event\n return Event()\n \ndef Barrier(parties,action=None ,timeout=None ):\n ''\n\n \n from multiprocessing.synchronize import Barrier\n return Barrier(parties,action,timeout)\n \ndef Queue(maxsize=0):\n ''\n\n \n from multiprocessing.queues import Queue\n return Queue(maxsize)\n \ndef JoinableQueue(maxsize=0):\n ''\n\n \n from multiprocessing.queues import JoinableQueue\n return JoinableQueue(maxsize)\n \ndef SimpleQueue():\n ''\n\n \n from multiprocessing.queues import SimpleQueue\n return SimpleQueue()\n \ndef Pool(processes=None ,initializer=None ,initargs=(),maxtasksperchild=None ):\n ''\n\n \n from multiprocessing.pool import Pool\n return Pool(processes,initializer,initargs,maxtasksperchild)\n \ndef RawValue(typecode_or_type,*args):\n ''\n\n \n from multiprocessing.sharedctypes import RawValue\n return RawValue(typecode_or_type,*args)\n \ndef RawArray(typecode_or_type,size_or_initializer):\n ''\n\n \n from multiprocessing.sharedctypes import RawArray\n return RawArray(typecode_or_type,size_or_initializer)\n \ndef Value(typecode_or_type,*args,lock=True ):\n ''\n\n \n from multiprocessing.sharedctypes import Value\n return Value(typecode_or_type,*args,lock=lock)\n \ndef Array(typecode_or_type,size_or_initializer,*,lock=True ):\n ''\n\n \n from multiprocessing.sharedctypes import Array\n return Array(typecode_or_type,size_or_initializer,lock=lock)\n \n \n \n \n \nif sys.platform =='win32':\n\n def set_executable(executable):\n  ''\n\n\n\n  \n  from multiprocessing.forking import set_executable\n  set_executable(executable)\n  \n __all__ +=['set_executable']\n", 1], "encodings.mac_romanian": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-romanian',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\u0102'\n'\\u0218'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u03c0'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\u0103'\n'\\u0219'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\xff'\n'\\u0178'\n'\\u2044'\n'\\u20ac'\n'\\u2039'\n'\\u203a'\n'\\u021a'\n'\\u021b'\n'\\u2021'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\xca'\n'\\xc1'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\uf8ff'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u02d8'\n'\\u02d9'\n'\\u02da'\n'\\xb8'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "signal": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCTRL_BREAK_EVENT=1\nCTRL_C_EVENT=0\nNSIG=23\nSIGABRT=22\nSIGBREAK=21\nSIGFPE=8\nSIGILL=4\nSIGINT=2\nSIGSEGV=11\nSIGTERM=15\nSIG_DFL=0\nSIG_IGN=1\n\ndef signal(signalnum,handler):\n pass\n"], "encodings.cp856": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp856',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\ufffe'\n'\\xa3'\n'\\ufffe'\n'\\xd7'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\ufffe'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\ufffe'\n'\\ufffe'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\ufffe'\n'\\u2580'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xb5'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\u2017'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_sysconfigdata": [".py", "build_time_vars={'HAVE_SYS_WAIT_H':1,'HAVE_UTIL_H':0,'HAVE_SYMLINKAT':1,'HAVE_LIBSENDFILE':0,'SRCDIRS':'Parser Grammar Objects Python Modules Mac','SIZEOF_OFF_T':8,'BASECFLAGS':'-Wno-unused-result','HAVE_UTIME_H':1,'EXTRAMACHDEPPATH':'','HAVE_SYS_TIME_H':1,'CFLAGSFORSHARED':'-fPIC','HAVE_HYPOT':1,'PGSRCS':'\\\\','HAVE_LIBUTIL_H':0,'HAVE_COMPUTED_GOTOS':1,'HAVE_LUTIMES':1,'HAVE_MAKEDEV':1,'HAVE_REALPATH':1,'HAVE_LINUX_TIPC_H':1,'MULTIARCH':'i386-linux-gnu','HAVE_GETWD':1,'HAVE_GCC_ASM_FOR_X64':0,'HAVE_INET_PTON':1,'HAVE_GETHOSTBYNAME_R_6_ARG':1,'SIZEOF__BOOL':1,'HAVE_ZLIB_COPY':1,'ASDLGEN':'python3.3 ../Parser/asdl_c.py','GRAMMAR_INPUT':'../Grammar/Grammar','HOST_GNU_TYPE':'i686-pc-linux-gnu','HAVE_SCHED_RR_GET_INTERVAL':1,'HAVE_BLUETOOTH_H':0,'HAVE_MKFIFO':1,'TIMEMODULE_LIB':0,'LIBM':'-lm','PGENOBJS':'\\\\ \\\\','PYTHONFRAMEWORK':'','GETPGRP_HAVE_ARG':0,'HAVE_MMAP':1,'SHLIB_SUFFIX':'.so','SIZEOF_FLOAT':4,'HAVE_RENAMEAT':1,'HAVE_LANGINFO_H':1,'HAVE_STDLIB_H':1,'PY_CORE_CFLAGS':'-Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security   -I. -IInclude -I../Include -D_FORTIFY_SOURCE=2 -fPIC -DPy_BUILD_CORE','HAVE_BROKEN_PIPE_BUF':0,'HAVE_CONFSTR':1,'HAVE_SIGTIMEDWAIT':1,'HAVE_FTELLO':1,'READELF':'readelf','HAVE_SIGALTSTACK':1,'TESTTIMEOUT':3600,'PYTHONPATH':':plat-i386-linux-gnu','SIZEOF_WCHAR_T':4,'LIBOBJS':'','HAVE_SYSCONF':1,'MAKESETUP':'../Modules/makesetup','HAVE_UTIMENSAT':1,'HAVE_FCHOWNAT':1,'HAVE_WORKING_TZSET':1,'HAVE_FINITE':1,'HAVE_ASINH':1,'HAVE_SETEUID':1,'CONFIGFILES':'configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in','HAVE_SETGROUPS':1,'PARSER_OBJS':'\\\\ Parser/myreadline.o Parser/parsetok.o Parser/tokenizer.o','HAVE_MBRTOWC':1,'SIZEOF_INT':4,'HAVE_STDARG_PROTOTYPES':1,'TM_IN_SYS_TIME':0,'HAVE_SYS_TIMES_H':1,'HAVE_LCHOWN':1,'HAVE_SSIZE_T':1,'HAVE_PAUSE':1,'SYSLIBS':'-lm','POSIX_SEMAPHORES_NOT_ENABLED':0,'HAVE_DEVICE_MACROS':1,'BLDSHARED':'i686-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security  ','LIBSUBDIRS':'tkinter tkinter/test tkinter/test/test_tkinter \\\\','HAVE_SYS_UN_H':1,'HAVE_SYS_STAT_H':1,'VPATH':'..','INCLDIRSTOMAKE':'/usr/include /usr/include /usr/include/python3.3m /usr/include/python3.3m','HAVE_BROKEN_SEM_GETVALUE':0,'HAVE_TIMEGM':1,'PACKAGE_VERSION':0,'MAJOR_IN_SYSMACROS':0,'HAVE_ATANH':1,'HAVE_GAI_STRERROR':1,'HAVE_SYS_POLL_H':1,'SIZEOF_PTHREAD_T':4,'SIZEOF_FPOS_T':16,'HAVE_CTERMID':1,'HAVE_TMPFILE':1,'HAVE_SETUID':1,'CXX':'i686-linux-gnu-g++ -pthread','srcdir':'..','HAVE_UINT32_T':1,'HAVE_ADDRINFO':1,'HAVE_GETSPENT':1,'SIZEOF_DOUBLE':8,'HAVE_INT32_T':1,'LIBRARY_OBJS_OMIT_FROZEN':'\\\\','HAVE_FUTIMES':1,'CONFINCLUDEPY':'/usr/include/python3.3m','HAVE_RL_COMPLETION_APPEND_CHARACTER':1,'LIBFFI_INCLUDEDIR':'','HAVE_SETGID':1,'HAVE_UINT64_T':1,'EXEMODE':755,'UNIVERSALSDK':'','HAVE_LIBDL':1,'HAVE_GETNAMEINFO':1,'HAVE_STDINT_H':1,'COREPYTHONPATH':':plat-i386-linux-gnu','HAVE_SOCKADDR_STORAGE':1,'HAVE_WAITID':1,'EXTRAPLATDIR':'@EXTRAPLATDIR@','HAVE_ACCEPT4':1,'RUNSHARED':'LD_LIBRARY_PATH=/build/buildd/python3.3-3.3.1/build-shared:','EXE':'','HAVE_SIGACTION':1,'HAVE_CHOWN':1,'HAVE_GETLOGIN':1,'HAVE_TZNAME':0,'PACKAGE_NAME':0,'HAVE_GETPGID':1,'HAVE_GLIBC_MEMMOVE_BUG':0,'BUILD_GNU_TYPE':'i686-pc-linux-gnu','HAVE_LINUX_CAN_H':1,'DYNLOADFILE':'dynload_shlib.o','HAVE_PWRITE':1,'BUILDEXE':'','HAVE_OPENPTY':1,'HAVE_LOCKF':1,'HAVE_COPYSIGN':1,'HAVE_PREAD':1,'HAVE_DLOPEN':1,'HAVE_SYS_KERN_CONTROL_H':0,'PY_FORMAT_LONG_LONG':'\"ll\"','HAVE_TCSETPGRP':1,'HAVE_SETSID':1,'HAVE_STRUCT_STAT_ST_BIRTHTIME':0,'HAVE_STRING_H':1,'LDLIBRARY':'libpython3.3m.so','INSTALL_SCRIPT':'/usr/bin/install -c','HAVE_SYS_XATTR_H':1,'HAVE_CURSES_IS_TERM_RESIZED':1,'HAVE_TMPNAM_R':1,'STRICT_SYSV_CURSES':\"/* Don't use ncurses extensions */\",'WANT_SIGFPE_HANDLER':1,'HAVE_INT64_T':1,'HAVE_STAT_TV_NSEC':1,'HAVE_SYS_MKDEV_H':0,'HAVE_BROKEN_POLL':0,'HAVE_IF_NAMEINDEX':1,'HAVE_GETPWENT':1,'PSRCS':'\\\\','RANLIB':'ranlib','HAVE_WCSCOLL':1,'WITH_NEXT_FRAMEWORK':0,'ASDLGEN_FILES':'../Parser/asdl.py ../Parser/asdl_c.py','HAVE_RL_PRE_INPUT_HOOK':1,'PACKAGE_URL':0,'SHLIB_EXT':0,'HAVE_SYS_LOADAVG_H':0,'HAVE_LIBIEEE':0,'HAVE_SEM_OPEN':1,'HAVE_TERM_H':1,'IO_OBJS':'\\\\','IO_H':'Modules/_io/_iomodule.h','HAVE_STATVFS':1,'VERSION':'3.3','HAVE_GETC_UNLOCKED':1,'MACHDEPS':'plat-i386-linux-gnu @EXTRAPLATDIR@','SUBDIRSTOO':'Include Lib Misc','HAVE_SETREUID':1,'HAVE_ERFC':1,'HAVE_SETRESUID':1,'LINKFORSHARED':'-Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions','HAVE_SYS_TYPES_H':1,'HAVE_GETPAGESIZE':1,'HAVE_SETEGID':1,'HAVE_PTY_H':1,'HAVE_STRUCT_STAT_ST_FLAGS':0,'HAVE_WCHAR_H':1,'HAVE_FSEEKO':1,'Py_ENABLE_SHARED':1,'HAVE_SIGRELSE':1,'HAVE_PTHREAD_INIT':0,'FILEMODE':644,'HAVE_SYS_RESOURCE_H':1,'HAVE_READLINKAT':1,'PYLONG_BITS_IN_DIGIT':0,'LINKCC':'i686-linux-gnu-gcc -pthread','HAVE_SETLOCALE':1,'HAVE_CHROOT':1,'HAVE_OPENAT':1,'HAVE_FEXECVE':1,'LDCXXSHARED':'i686-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions','DIST':'README ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in Include Lib Misc Ext-dummy','HAVE_MKNOD':1,'PY_LDFLAGS':'-Wl,-Bsymbolic-functions -Wl,-z,relro','HAVE_BROKEN_MBSTOWCS':0,'LIBRARY_OBJS':'\\\\','HAVE_LOG1P':1,'SIZEOF_VOID_P':4,'HAVE_FCHOWN':1,'PYTHONFRAMEWORKPREFIX':'','HAVE_LIBDLD':0,'HAVE_TGAMMA':1,'HAVE_ERRNO_H':1,'HAVE_IO_H':0,'OTHER_LIBTOOL_OPT':'','HAVE_POLL_H':1,'PY_CPPFLAGS':'-I. -IInclude -I../Include -D_FORTIFY_SOURCE=2','XMLLIBSUBDIRS':'xml xml/dom xml/etree xml/parsers xml/sax','GRAMMAR_H':'Include/graminit.h','TANH_PRESERVES_ZERO_SIGN':1,'HAVE_GETLOADAVG':1,'UNICODE_DEPS':'\\\\ \\\\','HAVE_GETCWD':1,'MANDIR':'/usr/share/man','MACHDESTLIB':'/usr/lib/python3.3','GRAMMAR_C':'Python/graminit.c','PGOBJS':'\\\\','HAVE_DEV_PTMX':1,'HAVE_UINTPTR_T':1,'HAVE_SCHED_SETAFFINITY':1,'PURIFY':'','HAVE_DECL_ISINF':1,'HAVE_RL_CALLBACK':1,'HAVE_WRITEV':1,'HAVE_GETHOSTBYNAME_R_5_ARG':0,'HAVE_SYS_AUDIOIO_H':0,'EXT_SUFFIX':'.cpython-33m.so','SIZEOF_LONG_LONG':8,'DLINCLDIR':'.','HAVE_PATHCONF':1,'HAVE_UNLINKAT':1,'MKDIR_P':'/bin/mkdir -p','HAVE_ALTZONE':0,'SCRIPTDIR':'/usr/lib','OPCODETARGETGEN_FILES':'\\\\','HAVE_GETSPNAM':1,'HAVE_SYS_TERMIO_H':0,'HAVE_ATTRIBUTE_FORMAT_PARSETUPLE':0,'HAVE_PTHREAD_H':1,'Py_DEBUG':0,'HAVE_STRUCT_STAT_ST_BLOCKS':1,'X87_DOUBLE_ROUNDING':1,'SIZEOF_TIME_T':4,'HAVE_DYNAMIC_LOADING':1,'HAVE_DIRECT_H':0,'SRC_GDB_HOOKS':'../Tools/gdb/libpython.py','HAVE_GETADDRINFO':1,'HAVE_BROKEN_NICE':0,'HAVE_DIRENT_H':1,'HAVE_WCSXFRM':1,'HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK':1,'HAVE_FSTATVFS':1,'PYTHON':'python','HAVE_OSX105_SDK':0,'BINDIR':'/usr/bin','TESTPYTHON':'LD_LIBRARY_PATH=/build/buildd/python3.3-3.3.1/build-shared: ./python','ARFLAGS':'rc','PLATDIR':'plat-i386-linux-gnu','HAVE_ASM_TYPES_H':1,'PY3LIBRARY':'libpython3.so','HAVE_PLOCK':0,'FLOCK_NEEDS_LIBBSD':0,'WITH_TSC':0,'HAVE_LIBREADLINE':1,'MACHDEP':'linux','HAVE_SELECT':1,'LDFLAGS':'-Wl,-Bsymbolic-functions -Wl,-z,relro','HAVE_HSTRERROR':1,'SOABI':'cpython-33m','HAVE_GETTIMEOFDAY':1,'HAVE_LIBRESOLV':0,'HAVE_UNSETENV':1,'HAVE_TM_ZONE':1,'HAVE_GETPGRP':1,'HAVE_FLOCK':1,'HAVE_SYS_BSDTTY_H':0,'SUBDIRS':'','PYTHONFRAMEWORKINSTALLDIR':'','PACKAGE_BUGREPORT':0,'HAVE_CLOCK':1,'HAVE_GETPEERNAME':1,'SIZEOF_PID_T':4,'HAVE_CONIO_H':0,'HAVE_FSTATAT':1,'HAVE_NETPACKET_PACKET_H':1,'HAVE_WAIT3':1,'DESTPATH':'','HAVE_STAT_TV_NSEC2':0,'HAVE_GETRESGID':1,'HAVE_UCS4_TCL':0,'SIGNED_RIGHT_SHIFT_ZERO_FILLS':0,'HAVE_TIMES':1,'HAVE_UNAME':1,'HAVE_ERF':1,'SIZEOF_SHORT':2,'HAVE_NCURSES_H':1,'HAVE_SYS_SENDFILE_H':1,'HAVE_CTERMID_R':0,'HAVE_TMPNAM':1,'prefix':'/usr','HAVE_NICE':1,'WITH_THREAD':1,'LN':'ln','TESTRUNNER':'LD_LIBRARY_PATH=/build/buildd/python3.3-3.3.1/build-shared: ./python ../Tools/scripts/run_tests.py','HAVE_SIGINTERRUPT':1,'HAVE_SETPGID':1,'RETSIGTYPE':'void','HAVE_SCHED_GET_PRIORITY_MAX':1,'HAVE_SYS_SYS_DOMAIN_H':0,'HAVE_SYS_DIR_H':0,'HAVE__GETPTY':0,'HAVE_BLUETOOTH_BLUETOOTH_H':1,'HAVE_BIND_TEXTDOMAIN_CODESET':1,'HAVE_POLL':1,'PYTHON_OBJS':'\\\\','HAVE_WAITPID':1,'USE_INLINE':1,'HAVE_FUTIMENS':1,'USE_COMPUTED_GOTOS':1,'MAINCC':'i686-linux-gnu-gcc -pthread','HAVE_SOCKETPAIR':1,'HAVE_PROCESS_H':0,'HAVE_SETVBUF':1,'HAVE_FDOPENDIR':1,'CONFINCLUDEDIR':'/usr/include','BINLIBDEST':'/usr/lib/python3.3','HAVE_SYS_IOCTL_H':1,'HAVE_SYSEXITS_H':1,'LDLAST':'','HAVE_SYS_FILE_H':1,'HAVE_RL_COMPLETION_SUPPRESS_APPEND':1,'HAVE_RL_COMPLETION_MATCHES':1,'HAVE_TCGETPGRP':1,'SIZEOF_SIZE_T':4,'HAVE_EPOLL_CREATE1':1,'HAVE_SYS_SELECT_H':1,'HAVE_CLOCK_GETTIME':1,'CFLAGS':'-Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security  ','HAVE_SNPRINTF':1,'BLDLIBRARY':'-lpython3.3m','PARSER_HEADERS':'\\\\','SO':'.so','LIBRARY':'libpython3.3m.a','HAVE_FPATHCONF':1,'HAVE_TERMIOS_H':1,'HAVE_BROKEN_PTHREAD_SIGMASK':0,'AST_H':'Include/Python-ast.h','HAVE_GCC_UINT128_T':0,'HAVE_ACOSH':1,'MODOBJS':'Modules/_threadmodule.o  Modules/signalmodule.o  Modules/arraymodule.o  Modules/mathmodule.o Modules/_math.o  Modules/_struct.o  Modules/timemodule.o  Modules/_randommodule.o  Modules/atexitmodule.o  Modules/_elementtree.o  Modules/_pickle.o  Modules/_datetimemodule.o  Modules/_bisectmodule.o  Modules/_heapqmodule.o  Modules/unicodedata.o  Modules/fcntlmodule.o  Modules/spwdmodule.o  Modules/grpmodule.o  Modules/selectmodule.o  Modules/socketmodule.o  Modules/_posixsubprocess.o  Modules/md5module.o  Modules/sha1module.o  Modules/sha256module.o  Modules/sha512module.o  Modules/syslogmodule.o  Modules/binascii.o  Modules/zlibmodule.o  Modules/pyexpat.o  Modules/posixmodule.o  Modules/errnomodule.o  Modules/pwdmodule.o  Modules/_sre.o  Modules/_codecsmodule.o  Modules/_weakref.o  Modules/_functoolsmodule.o  Modules/operator.o  Modules/_collectionsmodule.o  Modules/itertoolsmodule.o  Modules/_localemodule.o  Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o  Modules/zipimport.o  Modules/faulthandler.o  Modules/symtablemodule.o  Modules/xxsubtype.o','AST_C':'Python/Python-ast.c','HAVE_SYS_NDIR_H':0,'DESTDIRS':'/usr /usr/lib /usr/lib/python3.3 /usr/lib/python3.3/lib-dynload','HAVE_SIGNAL_H':1,'PACKAGE_TARNAME':0,'HAVE_GETPRIORITY':1,'INCLUDEDIR':'/usr/include','HAVE_INTTYPES_H':1,'SIGNAL_OBJS':'','HAVE_READV':1,'HAVE_SETHOSTNAME':1,'MODLIBS':'-lrt    -lexpat                   -L/usr/lib -lz  -lexpat','CC':'i686-linux-gnu-gcc -pthread','HAVE_LCHMOD':0,'SIZEOF_UINTPTR_T':4,'LIBPC':'/usr/lib/i386-linux-gnu/pkgconfig','BYTESTR_DEPS':'\\\\','HAVE_MKDIRAT':1,'LIBPL':'/usr/lib/python3.3/config-3.3m-i386-linux-gnu','HAVE_SHADOW_H':1,'HAVE_SYS_EVENT_H':0,'INSTALL':'/usr/bin/install -c','HAVE_GCC_ASM_FOR_X87':1,'HAVE_BROKEN_UNSETENV':0,'BASECPPFLAGS':'','DOUBLE_IS_BIG_ENDIAN_IEEE754':0,'HAVE_STRUCT_STAT_ST_RDEV':1,'HAVE_SEM_UNLINK':1,'BUILDPYTHON':'python','HAVE_RL_CATCH_SIGNAL':1,'HAVE_DECL_TZNAME':0,'RESSRCDIR':'Mac/Resources/framework','HAVE_PTHREAD_SIGMASK':1,'HAVE_UTIMES':1,'DISTDIRS':'Include Lib Misc Ext-dummy','HAVE_FDATASYNC':1,'HAVE_USABLE_WCHAR_T':0,'PY_FORMAT_SIZE_T':'\"z\"','HAVE_SCHED_SETSCHEDULER':1,'VA_LIST_IS_ARRAY':0,'HAVE_LINUX_NETLINK_H':1,'HAVE_SETREGID':1,'HAVE_STROPTS_H':1,'LDVERSION':'3.3m','abs_builddir':'/build/buildd/python3.3-3.3.1/build-shared','SITEPATH':'','HAVE_GETHOSTBYNAME':0,'HAVE_SIGPENDING':1,'HAVE_KQUEUE':0,'HAVE_SYNC':1,'HAVE_GETSID':1,'HAVE_ROUND':1,'HAVE_STRFTIME':1,'AST_H_DIR':'Include','HAVE_PIPE2':1,'AST_C_DIR':'Python','TESTPYTHONOPTS':'','HAVE_DEV_PTC':0,'GETTIMEOFDAY_NO_TZ':0,'HAVE_NET_IF_H':1,'HAVE_SENDFILE':1,'HAVE_SETPGRP':1,'HAVE_SEM_GETVALUE':1,'CONFIGURE_LDFLAGS':'-Wl,-Bsymbolic-functions -Wl,-z,relro','DLLLIBRARY':'','PYTHON_FOR_BUILD':'./python -E','SETPGRP_HAVE_ARG':0,'HAVE_INET_ATON':1,'INSTALL_SHARED':'/usr/bin/install -c -m 555','WITH_DOC_STRINGS':1,'OPCODETARGETS_H':'\\\\','HAVE_INITGROUPS':1,'HAVE_LINKAT':1,'BASEMODLIBS':'','SGI_ABI':'','HAVE_SCHED_SETPARAM':1,'OPT':'-DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes','HAVE_POSIX_FADVISE':1,'datarootdir':'/usr/share','HAVE_MEMRCHR':1,'HGTAG':'','HAVE_MEMMOVE':1,'HAVE_GETRESUID':1,'DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754':0,'HAVE_LSTAT':1,'AR':'ar','HAVE_WAIT4':1,'HAVE_SYS_MODEM_H':0,'INSTSONAME':'libpython3.3m.so.1.0','HAVE_SYS_STATVFS_H':1,'HAVE_LGAMMA':1,'HAVE_PROTOTYPES':1,'HAVE_SYS_UIO_H':1,'MAJOR_IN_MKDEV':0,'QUICKTESTOPTS':'-x test_subprocess test_io test_lib2to3 \\\\','HAVE_SYS_DEVPOLL_H':0,'HAVE_CHFLAGS':0,'HAVE_FSYNC':1,'HAVE_FCHMOD':1,'INCLUDEPY':'/usr/include/python3.3m','HAVE_SEM_TIMEDWAIT':1,'LDLIBRARYDIR':'','HAVE_STRUCT_TM_TM_ZONE':1,'HAVE_CURSES_H':1,'TIME_WITH_SYS_TIME':1,'HAVE_DUP2':1,'ENABLE_IPV6':1,'WITH_VALGRIND':0,'HAVE_SETITIMER':1,'THREADOBJ':'Python/thread.o','LOCALMODLIBS':'-lrt    -lexpat                   -L/usr/lib -lz  -lexpat','HAVE_MEMORY_H':1,'HAVE_GETITIMER':1,'HAVE_C99_BOOL':1,'INSTALL_DATA':'/usr/bin/install -c -m 644','PGEN':'Parser/pgen','HAVE_GRP_H':1,'HAVE_WCSFTIME':1,'AIX_GENUINE_CPLUSPLUS':0,'HAVE_LIBINTL_H':1,'SHELL':'/bin/sh','HAVE_UNISTD_H':1,'EXTRATESTOPTS':'','HAVE_EXECV':1,'HAVE_FSEEK64':0,'MVWDELCH_IS_EXPRESSION':1,'DESTSHARED':'/usr/lib/python3.3/lib-dynload','OPCODETARGETGEN':'\\\\','LIBDEST':'/usr/lib/python3.3','CCSHARED':'-fPIC','HAVE_EXPM1':1,'HAVE_DLFCN_H':1,'exec_prefix':'/usr','HAVE_READLINK':1,'WINDOW_HAS_FLAGS':1,'HAVE_FTELL64':0,'HAVE_STRLCPY':0,'MACOSX_DEPLOYMENT_TARGET':'','HAVE_SYS_SYSCALL_H':1,'DESTLIB':'/usr/lib/python3.3','LDSHARED':'i686-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security  ','HGVERSION':'','PYTHON_HEADERS':'\\\\','HAVE_STRINGS_H':1,'DOUBLE_IS_LITTLE_ENDIAN_IEEE754':1,'HAVE_POSIX_FALLOCATE':1,'HAVE_DIRFD':1,'HAVE_LOG2':1,'HAVE_GETPID':1,'HAVE_ALARM':1,'MACHDEP_OBJS':'','HAVE_SPAWN_H':1,'HAVE_FORK':1,'HAVE_SETRESGID':1,'HAVE_FCHMODAT':1,'HAVE_CLOCK_GETRES':1,'MACHDEPPATH':':plat-i386-linux-gnu','STDC_HEADERS':1,'HAVE_SETPRIORITY':1,'LIBC':'','HAVE_SYS_EPOLL_H':1,'HAVE_SYS_UTSNAME_H':1,'HAVE_PUTENV':1,'HAVE_CURSES_RESIZE_TERM':1,'HAVE_FUTIMESAT':1,'WITH_DYLD':0,'INSTALL_PROGRAM':'/usr/bin/install -c','LIBS':'-lpthread -ldl  -lutil','HAVE_TRUNCATE':1,'TESTOPTS':'','PROFILE_TASK':'../Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck','HAVE_CURSES_RESIZETERM':1,'ABIFLAGS':'m','HAVE_GETGROUPLIST':1,'OBJECT_OBJS':'\\\\','HAVE_MKNODAT':1,'HAVE_ST_BLOCKS':1,'HAVE_STRUCT_STAT_ST_GEN':0,'SYS_SELECT_WITH_SYS_TIME':1,'SHLIBS':'-lpthread -ldl  -lutil','HAVE_GETGROUPS':1,'MODULE_OBJS':'\\\\','PYTHONFRAMEWORKDIR':'no-framework','HAVE_FCNTL_H':1,'HAVE_LINK':1,'HAVE_SIGWAIT':1,'HAVE_GAMMA':1,'HAVE_SYS_LOCK_H':0,'HAVE_FORKPTY':1,'HAVE_SOCKADDR_SA_LEN':0,'HAVE_TEMPNAM':1,'HAVE_STRUCT_STAT_ST_BLKSIZE':1,'HAVE_MKFIFOAT':1,'HAVE_SIGWAITINFO':1,'HAVE_FTIME':1,'HAVE_EPOLL':1,'HAVE_SYS_SOCKET_H':1,'HAVE_LARGEFILE_SUPPORT':1,'CONFIGURE_CFLAGS':'-g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security','HAVE_PTHREAD_DESTRUCTOR':0,'CONFIGURE_CPPFLAGS':'-D_FORTIFY_SOURCE=2','HAVE_SYMLINK':1,'HAVE_LONG_LONG':1,'HAVE_IEEEFP_H':0,'LIBDIR':'/usr/lib','HAVE_PTHREAD_KILL':1,'TESTPATH':'','HAVE_STRDUP':1,'POBJS':'\\\\','NO_AS_NEEDED':'-Wl,--no-as-needed','HAVE_LONG_DOUBLE':1,'HGBRANCH':'','DISTFILES':'README ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in','PTHREAD_SYSTEM_SCHED_SUPPORTED':1,'HAVE_FACCESSAT':1,'AST_ASDL':'../Parser/Python.asdl','CPPFLAGS':'-I. -IInclude -I../Include -D_FORTIFY_SOURCE=2','HAVE_MKTIME':1,'HAVE_NDIR_H':0,'PY_CFLAGS':'-Wno-unused-result -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security  ','LIBOBJDIR':'Python/','HAVE_LINUX_CAN_RAW_H':1,'HAVE_GETHOSTBYNAME_R_3_ARG':0,'PACKAGE_STRING':0,'GNULD':'yes','LOG1P_DROPS_ZERO_SIGN':0,'HAVE_FTRUNCATE':1,'WITH_LIBINTL':0,'HAVE_MREMAP':1,'HAVE_DECL_ISNAN':1,'HAVE_KILLPG':1,'SIZEOF_LONG':4,'HAVE_DECL_ISFINITE':1,'HAVE_IPA_PURE_CONST_BUG':0,'WITH_PYMALLOC':1,'abs_srcdir':'/build/buildd/python3.3-3.3.1/build-shared/..','HAVE_FCHDIR':1,'HAVE_BROKEN_POSIX_SEMAPHORES':0,'AC_APPLE_UNIVERSAL_BUILD':0,'PGENSRCS':'\\\\ \\\\','DIRMODE':755,'HAVE_GETHOSTBYNAME_R':1,'HAVE_LCHFLAGS':0,'HAVE_SYS_PARAM_H':1,'SIZEOF_LONG_DOUBLE':12,'CONFIG_ARGS':\"'--enable-shared' '--prefix=/usr' '--enable-ipv6' '--enable-loadable-sqlite-extensions' '--with-dbmliborder=bdb:gdbm' '--with-computed-gotos' '--with-system-expat' '--with-system-ffi' '--with-fpectl' 'CC=i686-linux-gnu-gcc' 'CFLAGS=-g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro' 'CPPFLAGS=-D_FORTIFY_SOURCE=2'\",'HAVE_SCHED_H':1,'HAVE_KILL':1}\n\n"], "long_int": [".js", "/*\nModule to manipulate long integers\n*/\n\nvar $module=(function($B){\n\neval($B.InjectBuiltins())\n\nvar $LongIntDict = {__class__:$B.$type,__name__:'LongInt'}\n\nfunction add_pos(v1, v2){\n    // Add two positive numbers\n    // v1, v2 : strings\n    // Return an instance of LongInt\n\n    var res = '', carry = 0, iself=v1.length, sv=0\n    for(var i=v2.length-1;i>=0;i--){\n        iself--\n        if(iself<0){sv=0}else{sv=parseInt(v1.charAt(iself))}\n        x = (carry+sv+parseInt(v2.charAt(i))).toString()\n        if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}\n        else{res=x+res;carry=0}\n    }\n    while(iself>0){\n        iself--\n        x = (carry+parseInt(v1.charAt(iself))).toString()\n        if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}\n        else{res=x+res;carry=0}\n    }\n    if(carry){res=carry+res}        \n    return {__class__:$LongIntDict, value:res, pos:true}\n}\n\nfunction check_shift(shift){\n    // Check the argument of >> and <<\n    if(!isinstance(shift, LongInt)){\n        throw TypeError(\"shift must be LongInt, not '\"+\n            $B.get_class(shift).__name__+\"'\")\n    }\n    if(!shift.pos){throw ValueError(\"negative shift count\")}\n}\n\nfunction clone(obj){\n    // Used for traces\n    var obj1 = {}\n    for(var attr in obj){obj1[attr]=obj[attr]}\n    return obj1\n}\n\nfunction comp_pos(v1, v2){\n    // Compare two positive numbers\n    if(v1.length>v2.length){return 1}\n    else if(v1.length<v2.length){return -1}\n    else{\n        if(v1>v2){return 1}\n        else if(v1<v2){return -1}\n    }\n    return 0\n}\n\nfunction divmod_pos(v1, v2){\n    // v1, v2 : strings, represent 2 positive integers A and B\n    // Return [a, b] where a and b are instances of LongInt\n    // a = A // B, b = A % B\n    var v1_init = v1, quotient, mod\n    if(comp_pos(v1, v2)==-1){ // a < b\n        quotient='0'\n        mod = LongInt(v1)\n    }else if(v2==v1){ // a = b\n        quotient = '1';\n        mod = LongInt('0')\n    }else{\n        var quotient = '', v1_init = v1\n        var left = v1.substr(0, v2.length)\n        if(v1<v2){left = v1.substr(0, v2.length+1)}\n        var right = v1.substr(left.length)\n        // mv2 maps integers i from 2 to 9 to i*v2, used as a cache to avoid\n        // having to compute i*v2 each time\n        var mv2 = {}\n        // Javascript \"safe integer\" with the 15 first digits in v2,\n        // used in the algorithm to test candidate values\n        var jsv2 = parseInt(v2.substr(0,15))\n\n        // Division algorithm\n        // At each step in the division, v1 is split into substrings\n        // \"left\" is the left part, with the same length as v2\n        // \"rest\" is the rest of v1 after \"left\"\n        // The algorithm finds the one-digit integer \"candidate\" such\n        // that 0 <= left - candidate*v2 < v2\n        // It stops when right is empty\n        while(true){\n            // Uses JS division to test an approximate result\n            var jsleft = parseInt(left.substr(0,15))\n            var candidate = Math.floor(jsleft/jsv2).toString()\n\n            // Check that candidate is the correct result\n            // Start by computing candidate*v2 : for this, use the table\n            // mv2, which stores the multiples of v2 already calculated\n            if(mv2[candidate]===undefined){\n                mv2[candidate] = mul_pos(v2, candidate).value\n            }\n            if(comp_pos(left, mv2[candidate])==-1){\n                // If left < candidate * v2, use candidate-1\n                candidate--\n                if(mv2[candidate]===undefined){\n                    mv2[candidate] = mul_pos(v2, candidate).value\n                }\n            }\n\n            // Add candidate to the quotient\n            quotient += candidate\n\n            // New value for left : left - v2*candidate\n            left = sub_pos(left, mv2[candidate]).value\n\n            // Stop if all digits in v1 have been used\n            if(right.length==0){break}\n\n            // Else, add next digit to left and remove it from right\n            left += right.charAt(0)\n            right = right.substr(1)\n        }\n        // Modulo is A - (A//B)*B\n        mod = sub_pos(v1, mul_pos(quotient, v2).value)\n    }\n    return [LongInt(quotient), mod]\n}\n\nfunction mul_pos(v1, v2){\n    // Multiply positive numbers v1 by v2\n    // Make v2 smaller than v1\n    if(v1.length<v2.length){var a=v1; v1=v2 ; v2=a}\n    if(v2=='0'){return LongInt('0')}\n    var cols = {}, i=v2.length, j\n    \n    // Built the object \"cols\", indexed by integers from 1 to nb1+nb2-2\n    // where nb1 and nb2 are the number of digits in v1 and v2.\n    // cols[n] is the sum of v1[i]*v2[j] for i+j = n\n    \n    while(i--){\n        var car = v2.charAt(i)\n        if(car==\"0\"){\n            j = v1.length\n            while(j--){\n                if(cols[i+j]===undefined){cols[i+j]=0}\n            }        \n        }else if(car==\"1\"){\n            j = v1.length\n            while(j--){\n                var z = parseInt(v1.charAt(j))\n                if(cols[i+j]===undefined){cols[i+j]=z}\n                else{cols[i+j] += z}\n            }\n        }else{\n            var x = parseInt(car), j = v1.length, y, z\n            while(j--){\n                y = x * parseInt(v1.charAt(j))\n                if(cols[i+j]===undefined){cols[i+j]=y}\n                else{cols[i+j] += y}\n            }\n        }\n    }\n\n    // Transform cols so that cols[x] is a one-digit integers\n    i = v1.length+v2.length-1\n    while(i--){\n        var col = cols[i].toString()\n        if(col.length>1){\n            // If the value in cols[i] has more than one digit, only keep the\n            // last one and report the others at the right index\n            // For instance if cols[i] = 123, keep 3 in cols[i], add 2 to\n            // cols[i-1] and 1 to cols[i-2]\n            cols[i] = parseInt(col.charAt(col.length-1))\n            j = col.length\n            while(j-->1){\n                var report = parseInt(col.charAt(j-1))\n                var pos = i-col.length+j\n                if(cols[pos]===undefined){cols[pos]=report}\n                else{cols[pos] += report}\n            }\n        }\n    }\n\n    // Find minimum index in cols\n    // The previous loop may have introduced negative indices\n    var imin\n    for(var attr in cols){\n        i = parseInt(attr)\n        if(imin===undefined){imin=i}\n        else if(i<imin){imin=i}\n    }\n\n    // Result is the concatenation of digits in cols\n    var res = ''\n    for(var i=imin;i<=v1.length+v2.length-2;i++){res+=cols[i].toString()}\n    return LongInt(res)\n}\n\nfunction sub_pos(v1, v2){\n    // Substraction of positive numbers with v1>=v2\n\n    var res = '', carry = 0, i1=v1.length, sv=0\n    \n    // For all digits in v2, starting by the rightmost, substract it from\n    // the matching digit in v1\n    // This is the equivalent of the manual operation :\n    //    12345678\n    //   -   98765\n    //\n    // We begin by the rightmost operation : 8-5 (3, no carry),\n    // then 7-6 (1, no carry)\n    // then 6-7 (9, carry 1) and so on\n    for(var i=v2.length-1;i>=0;i--){\n        i1--\n        sv = parseInt(v1.charAt(i1))\n        x = (sv-carry-parseInt(v2.charAt(i)))\n        if(x<0){res=(10+x)+res;carry=1}\n        else{res=x+res;carry=0}\n    }\n    \n    // If there are remaining digits in v1, substract the carry, if any\n    while(i1>0){\n        i1--\n        x = (parseInt(v1.charAt(i1))-carry)\n        if(x<0){res=(10+x)+res;carry=1}\n        else{res=x+res;carry=0}\n    }\n\n    // Remove leading zeros and return the result\n    while(res.charAt(0)=='0' && res.length>1){res=res.substr(1)}\n    return {__class__:$LongIntDict, value:res, pos:true}\n}\n\n// Special methods to implement operations on instances of LongInt\n\n$LongIntDict.__abs__ = function(self){\n    return {__class__:$LongIntDict, value: self.value, pos:true}\n}\n\n$LongIntDict.__add__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n    // Addition of \"self\" and \"other\"\n    // If both have the same sign (+ or -) we add their absolute values\n    // If they have different sign we use the substraction of their\n    // absolute values\n    var res\n    if(self.pos&&other.pos){  // self > 0, other > 0\n        return add_pos(self.value, other.value)\n    }else if(!self.pos&&!other.pos){ // self < 0, other < 0\n        res = add_pos(self.value, other.value)\n        res.pos = false\n        return res\n    }else if(self.pos && !other.pos){ // self > 0, other < 0\n        switch (comp_pos(self.value, other.value)){\n            case 1:\n                res = sub_pos(self.value, other.value)\n                break\n            case 0:\n                res = {__class__:$LongIntDict, value:0, pos:true}\n                break\n            case -1:\n                res = sub_pos(other.value, self.value)\n                res.pos = false\n                break\n        }\n        return res\n    }else{ // self < 0, other > 0\n        switch(comp_pos(self.value, other.value)){\n            case 1:\n                res = sub_pos(self.value, other.value)\n                res.pos = false\n                break\n            case 0:\n                res = {__class__:$LongIntDict, value:0, pos:true}\n                break\n            case -1:\n                res = sub_pos(other.value, self.value)\n                break\n        }\n        return res\n    }\n}\n\n$LongIntDict.__and__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n    // Bitwise \"and\" : build the binary representation of self and other\n    var v1 = $LongIntDict.__index__(self)\n    var v2 = $LongIntDict.__index__(other)\n    // apply \"and\" on zeros and ones\n    if(v1.length<v2.length){var temp=v2;v2=v1;v1=temp}\n    var start = v1.length-v2.length\n    var res = ''\n    for(var i=0;i<v2.length;i++){\n        if(v1.charAt(start+i)=='1' && v2.charAt(i)=='1'){res += '1'}\n        else{res += '0'}\n    }\n    // Return the LongInt instance represented by res in base 2\n    return LongInt(res, 2)\n}\n\n$LongIntDict.__divmod__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n\n    var dm = divmod_pos(self.value, other.value)\n    if(self.pos!==other.pos){\n        if(dm[0].value!='0'){dm[0].pos = false}\n        if(dm[1].value!='0'){\n            // If self and other have different signs and self is not a multiple\n            // of other, round to the previous integer\n            dm[0] = $LongIntDict.__sub__(dm[0], LongInt('1'))\n            dm[1] = $LongIntDict.__add__(dm[1], LongInt('1'))\n        }\n    }\n    return dm    \n}\n\n$LongIntDict.__eq__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n    return self.value==other.value && self.pos==other.pos\n}\n\n$LongIntDict.__floordiv__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n    return $LongIntDict.__divmod__(self, other)[0]\n}\n\n$LongIntDict.__ge__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n    if(self.value.length>other.value.length){return true}\n    else if(self.value.length<other.value.length){return false}\n    else{return self.value >= other.value}\n}\n\n$LongIntDict.__gt__ = function(self, other){\n    return !$LongIntDict.__le__(self, other)\n}\n\n$LongIntDict.__index__ = function(self){\n    // Used by bin()\n    // returns a string with the binary value of self\n    // The algorithm computes the result of the floor division of self by 2\n    \n    // XXX to do : negative integers\n    \n    var res = '', pos=self.value.length,\n        temp = self.value, d\n    while(true){\n        d = divmod_pos(temp, '2')\n        res = d[1].value + res\n        temp = d[0].value\n        if(temp=='0'){break}\n    }\n    return res\n}\n\n$LongIntDict.__invert__ = function(self){\n    var bin = $LongIntDict.__index__(self)\n    var res = ''\n    for(var i=0;i<bin.length;i++){\n        res += bin.charAt(i)=='0' ? '1' : '0'\n    }\n    return LongInt(res, 2)\n}\n\n$LongIntDict.__le__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n    if(self.value.length>other.value.length){return false}\n    else if(self.value.length<other.value.length){return true}\n    else{return self.value <= other.value}\n}\n\n$LongIntDict.__lt__ = function(self, other){\n    return !$LongIntDict.__ge__(self, other)\n}\n\n$LongIntDict.__lshift__ = function(self, shift){\n    check_shift(shift)\n    var res = self.value\n    while(true){\n        var x, carry=0, res1=''\n        for(var i=res.length-1;i>=0;i--){\n            x = (carry+parseInt(res.charAt(i))*2).toString()\n            if(x.length==2){res1=x.charAt(1)+res1;carry=parseInt(x.charAt(0))}\n            else{res1=x+res1;carry=0}\n        }\n        if(carry){res1=carry+res1}\n        res=res1\n        shift = sub_pos(shift.value, '1')\n        if(shift.value=='0'){break}\n    }\n    return {__class__:$LongIntDict, value:res, pos:self.pos}\n}\n\n$LongIntDict.__mod__ = function(self, other){\n    return $LongIntDict.__divmod__(self, other)[1]\n}\n\n$LongIntDict.__mro__ = [$LongIntDict, _b_.object.$dict]\n\n$LongIntDict.__mul__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n    var res = mul_pos(self.value, other.value)\n    if(self.pos==other.pos){return res}\n    res.pos = false\n    return res\n}\n\n$LongIntDict.__neg__ = function(obj){\n    return {__class__:$LongIntDict, value:obj.value, pos:!obj.pos}\n}\n\n$LongIntDict.__or__ = function(self, other){\n    var v1 = $LongIntDict.__index__(self)\n    var v2 = $LongIntDict.__index__(other)\n    if(v1.length<v2.length){var temp=v2;v2=v1;v1=temp}\n    var start = v1.length-v2.length\n    var res = v1.substr(0, start)\n    for(var i=0;i<v2.length;i++){\n        if(v1.charAt(start+i)=='1' || v2.charAt(i)=='1'){res += '1'}\n        else{res += '0'}\n    }\n    return LongInt(res, 2)\n}\n\n\n$LongIntDict.__pow__ = function(self, power){\n    if (typeof power == \"number\") {\n        power=LongInt(_b_.str(power))\n    }else if(!isinstance(power, LongInt)){\n        var msg = \"power must be a LongDict, not '\"\n        throw TypeError(msg+$B.get_class(power).__name__+\"'\")\n    }\n    if(!power.pos){\n        if(self.value=='1'){return self}\n        // For all other integers, x**-n is 0\n        return LongInt('0')\n    }else if(power.value=='0'){\n        return LongInt('1')\n    }\n    var res = {__class__:$LongIntDict, value:self.value, pos:self.pos}\n    var pow = power.value\n    while(true){\n        pow = sub_pos(pow, '1').value\n        if(pow == '0'){break}\n        res = $LongIntDict.__mul__(res, self)\n    }\n    return res    \n}\n\n$LongIntDict.__rshift__ = function(self, shift){\n    check_shift(shift)\n    var res = self.value\n    while(true){\n        res = divmod_pos(res, '2')[0].value\n        if(res.value=='0'){break}\n        shift = sub_pos(shift.value, '1')\n        if(shift.value=='0'){break}\n    }\n    return {__class__:$LongIntDict, value:res, pos:self.pos}\n}\n\n$LongIntDict.__str__ = $LongIntDict.__repr__ = function(self){\n    var res = \"LongInt('\"\n    if(!self.pos){res += '-'}\n    return res+self.value+\"')\"\n}\n\n$LongIntDict.__sub__ = function(self, other){\n    if (typeof other == 'number') other=LongInt(_b_.str(other))\n    var res\n    if(self.pos && other.pos){\n        switch(comp_pos(self.value, other.value)){\n            case 1:\n                res = sub_pos(self.value, other.value)\n                break\n            case 0:\n                res = {__class__:$LongIntDict, value:'0', pos:true}\n                break\n            case -1:\n                res = sub_pos(other.value, self.value)\n                res.pos = false\n                break\n        }\n        return res\n    }else if(!self.pos && !other.pos){\n        switch(comp_pos(self.value, other.value)){\n            case 1:\n                res = sub_pos(self.value, other.value)\n                res.pos = false\n                break\n            case 0:\n                res = {__class__:$LongIntDict, value:'0', pos:true}\n                break\n            case -1:\n                res = sub_pos(other.value, self.value)\n                break\n        }\n        return res\n    }else if(self.pos && !other.pos){\n        return add_pos(self.value, other.value)\n    }else{\n        res = add_pos(self.value, other.value)\n        res.pos = false\n        return res\n    }\n}\n\n$LongIntDict.__xor__ = function(self, other){\n    var v1 = $LongIntDict.__index__(self)\n    var v2 = $LongIntDict.__index__(other)\n    if(v1.length<v2.length){var temp=v2;v2=v1;v1=temp}\n    var start = v1.length-v2.length\n    var res = v1.substr(0, start)\n    for(var i=0;i<v2.length;i++){\n        if(v1.charAt(start+i)=='1' && v2.charAt(i)=='0'){res += '1'}\n        else if(v1.charAt(start+i)=='0' && v2.charAt(i)=='1'){res += '1'}\n        else{res += '0'}\n    }\n    return LongInt(res, 2)\n}\n\n$LongIntDict.to_base = function(self, base){\n    // Returns the string representation of self in specified base\n    var res='', v=self.value\n    while(v>0){\n        var dm = divmod_pos(v, base.toString())\n        res = parseInt(dm[1].value).toString(base)+res\n        v = dm[0].value\n        if(v==0){break}\n    }\n    return res\n}\n\nfunction digits(base){\n    // Return an object where keys are all the digits valid in specified base\n    // and value is \"true\"\n    // Used to test if the string passed as first argument to LongInt is valid\n    var is_digits = {}\n    // Number from 0 to base, or from 0 to 9 if base > 10\n    for(var i=0;i<base;i++){\n        if(i==10){break}\n        is_digits[i]=true\n    }\n    if(base>10){\n        // Additional letters\n        // For instance in base 16, add \"abcdefABCDEF\" as keys\n        for(var i=0;i<base-10;i++){\n            is_digits[String.fromCharCode(65+i)]=true\n            is_digits[String.fromCharCode(97+i)]=true\n        }\n    }\n    return is_digits\n}\n\nvar MAX_SAFE_INTEGER = Math.pow(2, 53)-1;\nvar MIN_SAFE_INTEGER = -Number.MAX_SAFE_INTEGER;\n\nfunction isSafeInteger(n) {\n    return (typeof n === 'number' &&\n        Math.round(n) === n &&\n        Number.MIN_SAFE_INTEGER <= n &&\n        n <= Number.MAX_SAFE_INTEGER);\n}\n\nfunction LongInt(value, base){\n    if(arguments.length>2){\n        throw _b_.TypeError(\"LongInt takes at most 2 arguments (\"+\n            arguments.length+\" given)\")\n    }\n    // base defaults to 10\n    if(base===undefined){base = 10}\n    else if(!isinstance(base, int)){\n        throw TypeError(\"'\"+$B.get_class(base).__name__+\"' object cannot be interpreted as an integer\")\n    }\n    if(base<0 || base==1 || base>36){\n        throw ValueError(\"LongInt() base must be >= 2 and <= 36\")\n    }\n    if(isinstance(value, float)){\n        if(value>=0){value=Math.round(value.value)}\n        else{value=Math.ceil(value.value)}\n    }\n    if(typeof value=='number'){\n        if(isSafeInteger(value)){value = value.toString()}\n        else{throw ValueError(\"argument of long_int is not a safe integer\")}\n    }else if(typeof value!='string'){\n        throw ValueError(\"argument of long_int must be a string, not \"+\n            $B.get_class(value).__name__)\n    }\n    var has_prefix = false, pos = true, start = 0\n    // Strip leading and trailing whitespaces\n    while(value.charAt(0)==' ' && value.length){value = value.substr(1)}\n    while(value.charAt(value.length-1)==' ' && value.length){\n        value = value.substr(0, value.length-1)\n    }\n    // Check if string starts with + or -\n    if(value.charAt(0)=='+'){has_prefix=true}\n    else if(value.charAt(0)=='-'){has_prefix=true;pos=false}\n    if(has_prefix){\n        // Remove prefix\n        if(value.length==1){\n            // \"+\" or \"-\" alone are not valid arguments\n            throw ValueError('LongInt argument is not a valid number: \"'+value+'\"')\n        }else{value=value.substr(1)}\n    }\n    // Ignore leading zeros\n    while(start<value.length-1 && value.charAt(start)=='0'){start++}\n    value = value.substr(start)\n\n    // Check if all characters in value are valid in the base\n    var is_digits = digits(base), point = -1\n    for(var i=0;i<value.length;i++){\n        if(value.charAt(i)=='.' && point==-1){point=i}\n        else if(!is_digits[value.charAt(i)]){\n            throw ValueError('LongInt argument is not a valid number: \"'+value+'\"')\n        }\n    }\n    if(point!=-1){value=value.substr(0,point)}\n    if(base!=10){\n        // Conversion to base 10\n        var coef = '1', v10 = LongInt(0),\n            pos = value.length, digit_base10\n        while(pos--){\n            digit_base10 = parseInt(value.charAt(pos), base).toString()\n            digit_by_coef = mul_pos(coef, digit_base10).value\n            v10 = add_pos(v10.value, digit_by_coef)\n            coef = mul_pos(coef, base.toString()).value\n        }\n        return v10\n    }\n    return {__class__:$LongIntDict, value:value, pos:pos}\n}\n\nLongInt.__class__ = $B.$factory\nLongInt.$dict = $LongIntDict\n$LongIntDict.$factory = LongInt\n\nreturn {LongInt:LongInt}\n\n})(__BRYTHON__)\n"], "browser.object_storage": [".py", "import pickle\n\nclass __UnProvided():\n pass\n \n \nclass ObjectStorage():\n\n def __init__(self,storage):\n  self.storage=storage\n  \n def __delitem__(self,key):\n  del self.storage[pickle.dumps(key)]\n  \n def __getitem__(self,key):\n  return pickle.loads(self.storage[pickle.dumps(key)])\n  \n def __setitem__(self,key,value):\n  self.storage[pickle.dumps(key)]=pickle.dumps(value)\n  \n def __contains__(self,key):\n  return pickle.dumps(key)in self.storage\n  \n def get(self,key,default=None ):\n  if pickle.dumps(key)in self.storage:\n   return self.storage[pickle.dumps(key)]\n  return default\n  \n def pop(self,key,default=__UnProvided()):\n  if type(default)is __UnProvided or pickle.dumps(key)in self.storage:\n   return pickle.loads(self.storage.pop(pickle.dumps(key)))\n  return default\n  \n def __iter__(self):\n  keys=self.keys()\n  return keys.__iter__()\n  \n def keys(self):\n  return [pickle.loads(key)for key in self.storage.keys()]\n  \n def values(self):\n  return [pickle.loads(val)for val in self.storage.values()]\n  \n def items(self):\n  return list(zip(self.keys(),self.values()))\n  \n def clear(self):\n  self.storage.clear()\n  \n def __len__(self):\n  return len(self.storage)\n"], "_warnings": [".py", "''\n\n\n\ndefault_action=\"\"\"default\"\"\"\n\nfilters=[('ignore',None ,DeprecationWarning,None ,0),\n('ignore',None ,PendingDeprecationWarning,None ,0),\n('ignore',None ,ImportWarning,None ,0),\n('ignore',None ,BytesWarning,None ,0)]\n\nonce_registry={}\n\ndef warn(*args,**kw):\n ''\n pass\n \ndef warn_explicit(*args,**kw):\n ''\n pass\n"], "importlib.machinery": [".py", "''\n\nimport _imp\n\nfrom ._bootstrap import (SOURCE_SUFFIXES,DEBUG_BYTECODE_SUFFIXES,\nOPTIMIZED_BYTECODE_SUFFIXES,\nEXTENSION_SUFFIXES)\nfrom ._bootstrap import BuiltinImporter\nfrom ._bootstrap import FrozenImporter\nfrom ._bootstrap import WindowsRegistryFinder\nfrom ._bootstrap import PathFinder\nfrom ._bootstrap import FileFinder\nfrom ._bootstrap import SourceFileLoader\nfrom ._bootstrap import SourcelessFileLoader\nfrom ._bootstrap import ExtensionFileLoader\n\n\n\n\n\n"], "encodings.iso8859_10": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-10',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u0112'\n'\\u0122'\n'\\u012a'\n'\\u0128'\n'\\u0136'\n'\\xa7'\n'\\u013b'\n'\\u0110'\n'\\u0160'\n'\\u0166'\n'\\u017d'\n'\\xad'\n'\\u016a'\n'\\u014a'\n'\\xb0'\n'\\u0105'\n'\\u0113'\n'\\u0123'\n'\\u012b'\n'\\u0129'\n'\\u0137'\n'\\xb7'\n'\\u013c'\n'\\u0111'\n'\\u0161'\n'\\u0167'\n'\\u017e'\n'\\u2015'\n'\\u016b'\n'\\u014b'\n'\\u0100'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\u012e'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u0116'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\u0145'\n'\\u014c'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\u0168'\n'\\xd8'\n'\\u0172'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\u0101'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\u012f'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u0117'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\u0146'\n'\\u014d'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\u0169'\n'\\xf8'\n'\\u0173'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\u0138'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "base64": [".py", "#! /usr/bin/env python3\n\n\"\"\"RFC 3548: Base16, Base32, Base64 Data Encodings\"\"\"\n\n\n\n\n\nimport re\nimport struct\nimport binascii\n\n\n__all__=[\n\n'encode','decode','encodebytes','decodebytes',\n\n'b64encode','b64decode','b32encode','b32decode',\n'b16encode','b16decode',\n\n'standard_b64encode','standard_b64decode',\n\n\n\n\n'urlsafe_b64encode','urlsafe_b64decode',\n]\n\n\nbytes_types=(bytes,bytearray)\n\ndef _bytes_from_decode_data(s):\n if isinstance(s,str):\n  try :\n   return s.encode('ascii')\n  except UnicodeEncodeError:\n   raise ValueError('string argument should contain only ASCII characters')\n elif isinstance(s,bytes_types):\n  return s\n else :\n  raise TypeError(\"argument should be bytes or ASCII string, not %s\"%s.__class__.__name__)\n  \n  \n  \n  \n  \ndef b64encode(s,altchars=None ):\n ''\n\n\n\n\n\n\n\n \n if not isinstance(s,bytes_types):\n  raise TypeError(\"expected bytes, not %s\"%s.__class__.__name__)\n  \n encoded=binascii.b2a_base64(s)[:-1]\n if altchars is not None :\n  if not isinstance(altchars,bytes_types):\n   raise TypeError(\"expected bytes, not %s\"\n   %altchars.__class__.__name__)\n  assert len(altchars)==2,repr(altchars)\n  return encoded.translate(bytes.maketrans(b'+/',altchars))\n return encoded\n \n \ndef b64decode(s,altchars=None ,validate=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if altchars is not None :\n  altchars=_bytes_from_decode_data(altchars)\n  assert len(altchars)==2,repr(altchars)\n  s=s.translate(bytes.maketrans(altchars,b'+/'))\n if validate and not re.match(b'^[A-Za-z0-9+/]*={0,2}$',s):\n  raise binascii.Error('Non-base64 digit found')\n return binascii.a2b_base64(s)\n \n \ndef standard_b64encode(s):\n ''\n\n\n \n return b64encode(s)\n \ndef standard_b64decode(s):\n ''\n\n\n\n\n\n \n return b64decode(s)\n \n \n_urlsafe_encode_translation=bytes.maketrans(b'+/',b'-_')\n_urlsafe_decode_translation=bytes.maketrans(b'-_',b'+/')\n\ndef urlsafe_b64encode(s):\n ''\n\n\n\n\n \n return b64encode(s).translate(_urlsafe_encode_translation)\n \ndef urlsafe_b64decode(s):\n ''\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n s=s.translate(_urlsafe_decode_translation)\n return b64decode(s)\n \n \n \n \n_b32alphabet={\n0:b'A',9:b'J',18:b'S',27:b'3',\n1:b'B',10:b'K',19:b'T',28:b'4',\n2:b'C',11:b'L',20:b'U',29:b'5',\n3:b'D',12:b'M',21:b'V',30:b'6',\n4:b'E',13:b'N',22:b'W',31:b'7',\n5:b'F',14:b'O',23:b'X',\n6:b'G',15:b'P',24:b'Y',\n7:b'H',16:b'Q',25:b'Z',\n8:b'I',17:b'R',26:b'2',\n}\n\n_b32tab=[v[0]for k,v in sorted(_b32alphabet.items())]\n_b32rev=dict([(v[0],k)for k,v in _b32alphabet.items()])\n\n\ndef b32encode(s):\n ''\n\n\n \n if not isinstance(s,bytes_types):\n  raise TypeError(\"expected bytes, not %s\"%s.__class__.__name__)\n quanta,leftover=divmod(len(s),5)\n \n if leftover:\n  s=s+bytes(5 -leftover)\n  quanta +=1\n encoded=bytearray()\n for i in range(quanta):\n \n \n \n \n \n  c1,c2,c3=struct.unpack('!HHB',s[i *5:(i+1)*5])\n  c2 +=(c1&1)<<16\n  c3 +=(c2&3)<<8\n  encoded +=bytes([_b32tab[c1 >>11],\n  _b32tab[(c1 >>6)&0x1f],\n  _b32tab[(c1 >>1)&0x1f],\n  _b32tab[c2 >>12],\n  _b32tab[(c2 >>7)&0x1f],\n  _b32tab[(c2 >>2)&0x1f],\n  _b32tab[c3 >>5],\n  _b32tab[c3&0x1f],\n  ])\n  \n if leftover ==1:\n  encoded[-6:]=b'======'\n elif leftover ==2:\n  encoded[-4:]=b'===='\n elif leftover ==3:\n  encoded[-3:]=b'==='\n elif leftover ==4:\n  encoded[-1:]=b'='\n return bytes(encoded)\n \n \ndef b32decode(s,casefold=False ,map01=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n quanta,leftover=divmod(len(s),8)\n if leftover:\n  raise binascii.Error('Incorrect padding')\n  \n  \n  \n if map01 is not None :\n  map01=_bytes_from_decode_data(map01)\n  assert len(map01)==1,repr(map01)\n  s=s.translate(bytes.maketrans(b'01',b'O'+map01))\n if casefold:\n  s=s.upper()\n  \n  \n  \n padchars=0\n mo=re.search(b'(?P<pad>[=]*)$',s)\n if mo:\n  padchars=len(mo.group('pad'))\n  if padchars >0:\n   s=s[:-padchars]\n   \n parts=[]\n acc=0\n shift=35\n for c in s:\n  val=_b32rev.get(c)\n  if val is None :\n   raise binascii.Error('Non-base32 digit found')\n  acc +=_b32rev[c]<<shift\n  shift -=5\n  if shift <0:\n   parts.append(binascii.unhexlify(bytes('%010x'%acc,\"ascii\")))\n   acc=0\n   shift=35\n   \n last=binascii.unhexlify(bytes('%010x'%acc,\"ascii\"))\n if padchars ==0:\n  last=b''\n elif padchars ==1:\n  last=last[:-1]\n elif padchars ==3:\n  last=last[:-2]\n elif padchars ==4:\n  last=last[:-3]\n elif padchars ==6:\n  last=last[:-4]\n else :\n  raise binascii.Error('Incorrect padding')\n parts.append(last)\n return b''.join(parts)\n \n \n \n \n \n \ndef b16encode(s):\n ''\n\n\n \n if not isinstance(s,bytes_types):\n  raise TypeError(\"expected bytes, not %s\"%s.__class__.__name__)\n return binascii.hexlify(s).upper()\n \n \ndef b16decode(s,casefold=False ):\n ''\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if casefold:\n  s=s.upper()\n if re.search(b'[^0-9A-F]',s):\n  raise binascii.Error('Non-base16 digit found')\n return binascii.unhexlify(s)\n \n \n \n \n \n \n \nMAXLINESIZE=76\nMAXBINSIZE=(MAXLINESIZE //4)*3\n\ndef encode(input,output):\n ''\n while True :\n  s=input.read(MAXBINSIZE)\n  if not s:\n   break\n  while len(s)<MAXBINSIZE:\n   ns=input.read(MAXBINSIZE -len(s))\n   if not ns:\n    break\n   s +=ns\n  line=binascii.b2a_base64(s)\n  output.write(line)\n  \n  \ndef decode(input,output):\n ''\n while True :\n  line=input.readline()\n  if not line:\n   break\n  s=binascii.a2b_base64(line)\n  output.write(s)\n  \n  \ndef encodebytes(s):\n ''\n \n if not isinstance(s,bytes_types):\n  raise TypeError(\"expected bytes, not %s\"%s.__class__.__name__)\n pieces=[]\n for i in range(0,len(s),MAXBINSIZE):\n  chunk=s[i:i+MAXBINSIZE]\n  pieces.append(binascii.b2a_base64(chunk))\n return b\"\".join(pieces)\n \ndef encodestring(s):\n ''\n import warnings\n warnings.warn(\"encodestring() is a deprecated alias, use encodebytes()\",\n DeprecationWarning,2)\n return encodebytes(s)\n \n \ndef decodebytes(s):\n ''\n if not isinstance(s,bytes_types):\n  raise TypeError(\"expected bytes, not %s\"%s.__class__.__name__)\n return binascii.a2b_base64(s)\n \ndef decodestring(s):\n ''\n import warnings\n warnings.warn(\"decodestring() is a deprecated alias, use decodebytes()\",\n DeprecationWarning,2)\n return decodebytes(s)\n \n \n \ndef main():\n ''\n import sys,getopt\n try :\n  opts,args=getopt.getopt(sys.argv[1:],'deut')\n except getopt.error as msg:\n  sys.stdout=sys.stderr\n  print(msg)\n  print(\"\"\"usage: %s [-d|-e|-u|-t] [file|-]\n        -d, -u: decode\n        -e: encode (default)\n        -t: encode and decode string 'Aladdin:open sesame'\"\"\"%sys.argv[0])\n  sys.exit(2)\n func=encode\n for o,a in opts:\n  if o =='-e':func=encode\n  if o =='-d':func=decode\n  if o =='-u':func=decode\n  if o =='-t':test();return\n if args and args[0]!='-':\n  with open(args[0],'rb')as f:\n   func(f,sys.stdout.buffer)\n else :\n  func(sys.stdin.buffer,sys.stdout.buffer)\n  \n  \ndef test():\n s0=b\"Aladdin:open sesame\"\n print(repr(s0))\n s1=encodebytes(s0)\n print(repr(s1))\n s2=decodebytes(s1)\n print(repr(s2))\n assert s0 ==s2\n \n \nif __name__ =='__main__':\n main()\n"], "encodings.cp037": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp037',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xf1'\n'\\xa2'\n'.'\n'<'\n'('\n'+'\n'|'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n'!'\n'$'\n'*'\n')'\n';'\n'\\xac'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'\\xc7'\n'\\xd1'\n'\\xa6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\xf0'\n'\\xfd'\n'\\xfe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n'\\xd0'\n'\\xdd'\n'\\xde'\n'\\xae'\n'^'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'['\n']'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\xfc'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\\\'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'\\xd6'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\\xdc'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "html.parser": [".py", "''\n\n\n\n\n\n\n\n\n\nimport _markupbase\nimport re\nimport warnings\n\n\n\ninteresting_normal=re.compile('[&<]')\nincomplete=re.compile('&[a-zA-Z#]')\n\nentityref=re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]')\ncharref=re.compile('&#(?:[0-9]+|[xX][0-9a-fA-F]+)[^0-9a-fA-F]')\n\nstarttagopen=re.compile('<[a-zA-Z]')\npiclose=re.compile('>')\ncommentclose=re.compile(r'--\\s*>')\ntagfind=re.compile('([a-zA-Z][-.a-zA-Z0-9:_]*)(?:\\s|/(?!>))*')\n\n\ntagfind_tolerant=re.compile('[a-zA-Z][^\\t\\n\\r\\f />\\x00]*')\n\n\n\n\n\n\nattrfind=re.compile(\nr'\\s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(\\s*=\\s*'\nr'(\\'[^\\']*\\'|\"[^\"]*\"|[^\\s\"\\'=<>`]*))?')\nattrfind_tolerant=re.compile(\nr'((?<=[\\'\"\\s/])[^\\s/>][^\\s/=>]*)(\\s*=+\\s*'\nr'(\\'[^\\']*\\'|\"[^\"]*\"|(?![\\'\"])[^>\\s]*))?(?:\\s|/(?!>))*')\nlocatestarttagend=re.compile(r\"\"\"\n  <[a-zA-Z][-.a-zA-Z0-9:_]*          # tag name\n  (?:\\s+                             # whitespace before attribute name\n    (?:[a-zA-Z_][-.:a-zA-Z0-9_]*     # attribute name\n      (?:\\s*=\\s*                     # value indicator\n        (?:'[^']*'                   # LITA-enclosed value\n          |\\\"[^\\\"]*\\\"                # LIT-enclosed value\n          |[^'\\\">\\s]+                # bare value\n         )\n       )?\n     )\n   )*\n  \\s*                                # trailing whitespace\n\"\"\",re.VERBOSE)\nlocatestarttagend_tolerant=re.compile(r\"\"\"\n  <[a-zA-Z][-.a-zA-Z0-9:_]*          # tag name\n  (?:[\\s/]*                          # optional whitespace before attribute name\n    (?:(?<=['\"\\s/])[^\\s/>][^\\s/=>]*  # attribute name\n      (?:\\s*=+\\s*                    # value indicator\n        (?:'[^']*'                   # LITA-enclosed value\n          |\"[^\"]*\"                   # LIT-enclosed value\n          |(?!['\"])[^>\\s]*           # bare value\n         )\n         (?:\\s*,)*                   # possibly followed by a comma\n       )?(?:\\s|/(?!>))*\n     )*\n   )?\n  \\s*                                # trailing whitespace\n\"\"\",re.VERBOSE)\nendendtag=re.compile('>')\n\n\nendtagfind=re.compile('</\\s*([a-zA-Z][-.a-zA-Z0-9:_]*)\\s*>')\n\n\nclass HTMLParseError(Exception):\n ''\n \n def __init__(self,msg,position=(None ,None )):\n  assert msg\n  self.msg=msg\n  self.lineno=position[0]\n  self.offset=position[1]\n  \n def __str__(self):\n  result=self.msg\n  if self.lineno is not None :\n   result=result+\", at line %d\"%self.lineno\n  if self.offset is not None :\n   result=result+\", column %d\"%(self.offset+1)\n  return result\n  \n  \nclass HTMLParser(_markupbase.ParserBase):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n CDATA_CONTENT_ELEMENTS=(\"script\",\"style\")\n \n def __init__(self,strict=False ):\n  ''\n\n\n\n\n  \n  if strict:\n   warnings.warn(\"The strict mode is deprecated.\",\n   DeprecationWarning,stacklevel=2)\n  self.strict=strict\n  self.reset()\n  \n def reset(self):\n  ''\n  self.rawdata=''\n  self.lasttag='???'\n  self.interesting=interesting_normal\n  self.cdata_elem=None\n  _markupbase.ParserBase.reset(self)\n  \n def feed(self,data):\n  ''\n\n\n\n  \n  self.rawdata=self.rawdata+data\n  self.goahead(0)\n  \n def close(self):\n  ''\n  self.goahead(1)\n  \n def error(self,message):\n  raise HTMLParseError(message,self.getpos())\n  \n __starttag_text=None\n \n def get_starttag_text(self):\n  ''\n  return self.__starttag_text\n  \n def set_cdata_mode(self,elem):\n  self.cdata_elem=elem.lower()\n  self.interesting=re.compile(r'</\\s*%s\\s*>'%self.cdata_elem,re.I)\n  \n def clear_cdata_mode(self):\n  self.interesting=interesting_normal\n  self.cdata_elem=None\n  \n  \n  \n  \n def goahead(self,end):\n  rawdata=self.rawdata\n  i=0\n  n=len(rawdata)\n  while i <n:\n   match=self.interesting.search(rawdata,i)\n   if match:\n    j=match.start()\n   else :\n    if self.cdata_elem:\n     break\n    j=n\n   if i <j:self.handle_data(rawdata[i:j])\n   i=self.updatepos(i,j)\n   if i ==n:break\n   startswith=rawdata.startswith\n   if startswith('<',i):\n    if starttagopen.match(rawdata,i):\n     k=self.parse_starttag(i)\n    elif startswith(\"</\",i):\n     k=self.parse_endtag(i)\n    elif startswith(\"<!--\",i):\n     k=self.parse_comment(i)\n    elif startswith(\"<?\",i):\n     k=self.parse_pi(i)\n    elif startswith(\"<!\",i):\n     if self.strict:\n      k=self.parse_declaration(i)\n     else :\n      k=self.parse_html_declaration(i)\n    elif (i+1)<n:\n     self.handle_data(\"<\")\n     k=i+1\n    else :\n     break\n    if k <0:\n     if not end:\n      break\n     if self.strict:\n      self.error(\"EOF in middle of construct\")\n     k=rawdata.find('>',i+1)\n     if k <0:\n      k=rawdata.find('<',i+1)\n      if k <0:\n       k=i+1\n     else :\n      k +=1\n     self.handle_data(rawdata[i:k])\n    i=self.updatepos(i,k)\n   elif startswith(\"&#\",i):\n    match=charref.match(rawdata,i)\n    if match:\n     name=match.group()[2:-1]\n     self.handle_charref(name)\n     k=match.end()\n     if not startswith(';',k -1):\n      k=k -1\n     i=self.updatepos(i,k)\n     continue\n    else :\n     if\";\"in rawdata[i:]:\n      self.handle_data(rawdata[0:2])\n      i=self.updatepos(i,2)\n     break\n   elif startswith('&',i):\n    match=entityref.match(rawdata,i)\n    if match:\n     name=match.group(1)\n     self.handle_entityref(name)\n     k=match.end()\n     if not startswith(';',k -1):\n      k=k -1\n     i=self.updatepos(i,k)\n     continue\n    match=incomplete.match(rawdata,i)\n    if match:\n    \n     if end and match.group()==rawdata[i:]:\n      if self.strict:\n       self.error(\"EOF in middle of entity or char ref\")\n      else :\n       k=match.end()\n       if k <=i:\n        k=n\n       i=self.updatepos(i,i+1)\n       \n     break\n    elif (i+1)<n:\n    \n    \n     self.handle_data(\"&\")\n     i=self.updatepos(i,i+1)\n    else :\n     break\n   else :\n    assert 0,\"interesting.search() lied\"\n    \n  if end and i <n and not self.cdata_elem:\n   self.handle_data(rawdata[i:n])\n   i=self.updatepos(i,n)\n  self.rawdata=rawdata[i:]\n  \n  \n  \n  \n def parse_html_declaration(self,i):\n  rawdata=self.rawdata\n  assert rawdata[i:i+2]=='<!',('unexpected call to '\n  'parse_html_declaration()')\n  if rawdata[i:i+4]=='<!--':\n  \n   return self.parse_comment(i)\n  elif rawdata[i:i+3]=='<![':\n   return self.parse_marked_section(i)\n  elif rawdata[i:i+9].lower()=='<!doctype':\n  \n   gtpos=rawdata.find('>',i+9)\n   if gtpos ==-1:\n    return -1\n   self.handle_decl(rawdata[i+2:gtpos])\n   return gtpos+1\n  else :\n   return self.parse_bogus_comment(i)\n   \n   \n   \n def parse_bogus_comment(self,i,report=1):\n  rawdata=self.rawdata\n  assert rawdata[i:i+2]in ('<!','</'),('unexpected call to '\n  'parse_comment()')\n  pos=rawdata.find('>',i+2)\n  if pos ==-1:\n   return -1\n  if report:\n   self.handle_comment(rawdata[i+2:pos])\n  return pos+1\n  \n  \n def parse_pi(self,i):\n  rawdata=self.rawdata\n  assert rawdata[i:i+2]=='<?','unexpected call to parse_pi()'\n  match=piclose.search(rawdata,i+2)\n  if not match:\n   return -1\n  j=match.start()\n  self.handle_pi(rawdata[i+2:j])\n  j=match.end()\n  return j\n  \n  \n def parse_starttag(self,i):\n  self.__starttag_text=None\n  endpos=self.check_for_whole_start_tag(i)\n  if endpos <0:\n   return endpos\n  rawdata=self.rawdata\n  self.__starttag_text=rawdata[i:endpos]\n  \n  \n  attrs=[]\n  match=tagfind.match(rawdata,i+1)\n  assert match,'unexpected call to parse_starttag()'\n  k=match.end()\n  self.lasttag=tag=match.group(1).lower()\n  while k <endpos:\n   if self.strict:\n    m=attrfind.match(rawdata,k)\n   else :\n    m=attrfind_tolerant.match(rawdata,k)\n   if not m:\n    break\n   attrname,rest,attrvalue=m.group(1,2,3)\n   if not rest:\n    attrvalue=None\n   elif attrvalue[:1]=='\\''==attrvalue[-1:]or   attrvalue[:1]=='\"'==attrvalue[-1:]:\n    attrvalue=attrvalue[1:-1]\n   if attrvalue:\n    attrvalue=self.unescape(attrvalue)\n   attrs.append((attrname.lower(),attrvalue))\n   k=m.end()\n   \n  end=rawdata[k:endpos].strip()\n  if end not in (\">\",\"/>\"):\n   lineno,offset=self.getpos()\n   if\"\\n\"in self.__starttag_text:\n    lineno=lineno+self.__starttag_text.count(\"\\n\")\n    offset=len(self.__starttag_text)    -self.__starttag_text.rfind(\"\\n\")\n   else :\n    offset=offset+len(self.__starttag_text)\n   if self.strict:\n    self.error(\"junk characters in start tag: %r\"\n    %(rawdata[k:endpos][:20],))\n   self.handle_data(rawdata[i:endpos])\n   return endpos\n  if end.endswith('/>'):\n  \n   self.handle_startendtag(tag,attrs)\n  else :\n   self.handle_starttag(tag,attrs)\n   if tag in self.CDATA_CONTENT_ELEMENTS:\n    self.set_cdata_mode(tag)\n  return endpos\n  \n  \n  \n def check_for_whole_start_tag(self,i):\n  rawdata=self.rawdata\n  if self.strict:\n   m=locatestarttagend.match(rawdata,i)\n  else :\n   m=locatestarttagend_tolerant.match(rawdata,i)\n  if m:\n   j=m.end()\n   next=rawdata[j:j+1]\n   if next ==\">\":\n    return j+1\n   if next ==\"/\":\n    if rawdata.startswith(\"/>\",j):\n     return j+2\n    if rawdata.startswith(\"/\",j):\n    \n     return -1\n     \n    if self.strict:\n     self.updatepos(i,j+1)\n     self.error(\"malformed empty start tag\")\n    if j >i:\n     return j\n    else :\n     return i+1\n   if next ==\"\":\n   \n    return -1\n   if next in (\"abcdefghijklmnopqrstuvwxyz=/\"\n   \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"):\n   \n   \n    return -1\n   if self.strict:\n    self.updatepos(i,j)\n    self.error(\"malformed start tag\")\n   if j >i:\n    return j\n   else :\n    return i+1\n  raise AssertionError(\"we should not get here!\")\n  \n  \n def parse_endtag(self,i):\n  rawdata=self.rawdata\n  assert rawdata[i:i+2]==\"</\",\"unexpected call to parse_endtag\"\n  match=endendtag.search(rawdata,i+1)\n  if not match:\n   return -1\n  gtpos=match.end()\n  match=endtagfind.match(rawdata,i)\n  if not match:\n   if self.cdata_elem is not None :\n    self.handle_data(rawdata[i:gtpos])\n    return gtpos\n   if self.strict:\n    self.error(\"bad end tag: %r\"%(rawdata[i:gtpos],))\n    \n   namematch=tagfind_tolerant.match(rawdata,i+2)\n   if not namematch:\n   \n    if rawdata[i:i+3]=='</>':\n     return i+3\n    else :\n     return self.parse_bogus_comment(i)\n   tagname=namematch.group().lower()\n   \n   \n   \n   \n   gtpos=rawdata.find('>',namematch.end())\n   self.handle_endtag(tagname)\n   return gtpos+1\n   \n  elem=match.group(1).lower()\n  if self.cdata_elem is not None :\n   if elem !=self.cdata_elem:\n    self.handle_data(rawdata[i:gtpos])\n    return gtpos\n    \n  self.handle_endtag(elem.lower())\n  self.clear_cdata_mode()\n  return gtpos\n  \n  \n def handle_startendtag(self,tag,attrs):\n  self.handle_starttag(tag,attrs)\n  self.handle_endtag(tag)\n  \n  \n def handle_starttag(self,tag,attrs):\n  pass\n  \n  \n def handle_endtag(self,tag):\n  pass\n  \n  \n def handle_charref(self,name):\n  pass\n  \n  \n def handle_entityref(self,name):\n  pass\n  \n  \n def handle_data(self,data):\n  pass\n  \n  \n def handle_comment(self,data):\n  pass\n  \n  \n def handle_decl(self,decl):\n  pass\n  \n  \n def handle_pi(self,data):\n  pass\n  \n def unknown_decl(self,data):\n  if self.strict:\n   self.error(\"unknown declaration: %r\"%(data,))\n   \n   \n def unescape(self,s):\n  if'&'not in s:\n   return s\n  def replaceEntities(s):\n   s=s.groups()[0]\n   try :\n    if s[0]==\"#\":\n     s=s[1:]\n     if s[0]in ['x','X']:\n      c=int(s[1:].rstrip(';'),16)\n     else :\n      c=int(s.rstrip(';'))\n     return chr(c)\n   except ValueError:\n    return'&#'+s\n   else :\n    from html.entities import html5\n    if s in html5:\n     return html5[s]\n    elif s.endswith(';'):\n     return'&'+s\n    for x in range(2,len(s)):\n     if s[:x]in html5:\n      return html5[s[:x]]+s[x:]\n    else :\n     return'&'+s\n     \n  return re.sub(r\"&(#?[xX]?(?:[0-9a-fA-F]+;|\\w{1,32};?))\",\n  replaceEntities,s,flags=re.ASCII)\n"], "encodings.iso8859_6": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-6',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa4'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u060c'\n'\\xad'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u061b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u061f'\n'\\ufffe'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\u0636'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0640'\n'\\u0641'\n'\\u0642'\n'\\u0643'\n'\\u0644'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\u0649'\n'\\u064a'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\u064f'\n'\\u0650'\n'\\u0651'\n'\\u0652'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "gettext": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport locale,copy,io,os,re,struct,sys\nfrom errno import ENOENT\n\n\n__all__=['NullTranslations','GNUTranslations','Catalog',\n'find','translation','install','textdomain','bindtextdomain',\n'dgettext','dngettext','gettext','ngettext',\n]\n\n_default_localedir=os.path.join(sys.base_prefix,'share','locale')\n\n\ndef c2py(plural):\n ''\n\n \n \n import token,tokenize\n tokens=tokenize.generate_tokens(io.StringIO(plural).readline)\n try :\n  danger=[x for x in tokens if x[0]==token.NAME and x[1]!='n']\n except tokenize.TokenError:\n  raise ValueError('plural forms expression error, maybe unbalanced parenthesis')\n else :\n  if danger:\n   raise ValueError('plural forms expression could be dangerous')\n   \n   \n plural=plural.replace('&&',' and ')\n plural=plural.replace('||',' or ')\n \n expr=re.compile(r'\\!([^=])')\n plural=expr.sub(' not \\\\1',plural)\n \n \n \n expr=re.compile(r'(.*?)\\?(.*?):(.*)')\n def repl(x):\n  return\"(%s if %s else %s)\"%(x.group(2),x.group(1),\n  expr.sub(repl,x.group(3)))\n  \n  \n stack=['']\n for c in plural:\n  if c =='(':\n   stack.append('')\n  elif c ==')':\n   if len(stack)==1:\n   \n   \n   \n    raise ValueError('unbalanced parenthesis in plural form')\n   s=expr.sub(repl,stack.pop())\n   stack[-1]+='(%s)'%s\n  else :\n   stack[-1]+=c\n plural=expr.sub(repl,stack.pop())\n \n return eval('lambda n: int(%s)'%plural)\n \n \n \ndef _expand_lang(loc):\n loc=locale.normalize(loc)\n COMPONENT_CODESET=1 <<0\n COMPONENT_TERRITORY=1 <<1\n COMPONENT_MODIFIER=1 <<2\n \n mask=0\n pos=loc.find('@')\n if pos >=0:\n  modifier=loc[pos:]\n  loc=loc[:pos]\n  mask |=COMPONENT_MODIFIER\n else :\n  modifier=''\n pos=loc.find('.')\n if pos >=0:\n  codeset=loc[pos:]\n  loc=loc[:pos]\n  mask |=COMPONENT_CODESET\n else :\n  codeset=''\n pos=loc.find('_')\n if pos >=0:\n  territory=loc[pos:]\n  loc=loc[:pos]\n  mask |=COMPONENT_TERRITORY\n else :\n  territory=''\n language=loc\n ret=[]\n for i in range(mask+1):\n  if not (i&~mask):\n   val=language\n   if i&COMPONENT_TERRITORY:val +=territory\n   if i&COMPONENT_CODESET:val +=codeset\n   if i&COMPONENT_MODIFIER:val +=modifier\n   ret.append(val)\n ret.reverse()\n return ret\n \n \n \nclass NullTranslations:\n def __init__(self,fp=None ):\n  self._info={}\n  self._charset=None\n  self._output_charset=None\n  self._fallback=None\n  if fp is not None :\n   self._parse(fp)\n   \n def _parse(self,fp):\n  pass\n  \n def add_fallback(self,fallback):\n  if self._fallback:\n   self._fallback.add_fallback(fallback)\n  else :\n   self._fallback=fallback\n   \n def gettext(self,message):\n  if self._fallback:\n   return self._fallback.gettext(message)\n  return message\n  \n def lgettext(self,message):\n  if self._fallback:\n   return self._fallback.lgettext(message)\n  return message\n  \n def ngettext(self,msgid1,msgid2,n):\n  if self._fallback:\n   return self._fallback.ngettext(msgid1,msgid2,n)\n  if n ==1:\n   return msgid1\n  else :\n   return msgid2\n   \n def lngettext(self,msgid1,msgid2,n):\n  if self._fallback:\n   return self._fallback.lngettext(msgid1,msgid2,n)\n  if n ==1:\n   return msgid1\n  else :\n   return msgid2\n   \n def info(self):\n  return self._info\n  \n def charset(self):\n  return self._charset\n  \n def output_charset(self):\n  return self._output_charset\n  \n def set_output_charset(self,charset):\n  self._output_charset=charset\n  \n def install(self,names=None ):\n  import builtins\n  builtins.__dict__['_']=self.gettext\n  if hasattr(names,\"__contains__\"):\n   if\"gettext\"in names:\n    builtins.__dict__['gettext']=builtins.__dict__['_']\n   if\"ngettext\"in names:\n    builtins.__dict__['ngettext']=self.ngettext\n   if\"lgettext\"in names:\n    builtins.__dict__['lgettext']=self.lgettext\n   if\"lngettext\"in names:\n    builtins.__dict__['lngettext']=self.lngettext\n    \n    \nclass GNUTranslations(NullTranslations):\n\n LE_MAGIC=0x950412de\n BE_MAGIC=0xde120495\n \n def _parse(self,fp):\n  ''\n  unpack=struct.unpack\n  filename=getattr(fp,'name','')\n  \n  \n  self._catalog=catalog={}\n  self.plural=lambda n:int(n !=1)\n  buf=fp.read()\n  buflen=len(buf)\n  \n  magic=unpack('<I',buf[:4])[0]\n  if magic ==self.LE_MAGIC:\n   version,msgcount,masteridx,transidx=unpack('<4I',buf[4:20])\n   ii='<II'\n  elif magic ==self.BE_MAGIC:\n   version,msgcount,masteridx,transidx=unpack('>4I',buf[4:20])\n   ii='>II'\n  else :\n   raise OSError(0,'Bad magic number',filename)\n   \n   \n  for i in range(0,msgcount):\n   mlen,moff=unpack(ii,buf[masteridx:masteridx+8])\n   mend=moff+mlen\n   tlen,toff=unpack(ii,buf[transidx:transidx+8])\n   tend=toff+tlen\n   if mend <buflen and tend <buflen:\n    msg=buf[moff:mend]\n    tmsg=buf[toff:tend]\n   else :\n    raise OSError(0,'File is corrupt',filename)\n    \n   if mlen ==0:\n   \n    lastk=k=None\n    for b_item in tmsg.split('\\n'.encode(\"ascii\")):\n     item=b_item.decode().strip()\n     if not item:\n      continue\n     if':'in item:\n      k,v=item.split(':',1)\n      k=k.strip().lower()\n      v=v.strip()\n      self._info[k]=v\n      lastk=k\n     elif lastk:\n      self._info[lastk]+='\\n'+item\n     if k =='content-type':\n      self._charset=v.split('charset=')[1]\n     elif k =='plural-forms':\n      v=v.split(';')\n      plural=v[1].split('plural=')[1]\n      self.plural=c2py(plural)\n      \n      \n      \n      \n      \n      \n      \n      \n      \n   charset=self._charset or'ascii'\n   if b'\\x00'in msg:\n   \n    msgid1,msgid2=msg.split(b'\\x00')\n    tmsg=tmsg.split(b'\\x00')\n    msgid1=str(msgid1,charset)\n    for i,x in enumerate(tmsg):\n     catalog[(msgid1,i)]=str(x,charset)\n   else :\n    catalog[str(msg,charset)]=str(tmsg,charset)\n    \n   masteridx +=8\n   transidx +=8\n   \n def lgettext(self,message):\n  missing=object()\n  tmsg=self._catalog.get(message,missing)\n  if tmsg is missing:\n   if self._fallback:\n    return self._fallback.lgettext(message)\n   return message\n  if self._output_charset:\n   return tmsg.encode(self._output_charset)\n  return tmsg.encode(locale.getpreferredencoding())\n  \n def lngettext(self,msgid1,msgid2,n):\n  try :\n   tmsg=self._catalog[(msgid1,self.plural(n))]\n   if self._output_charset:\n    return tmsg.encode(self._output_charset)\n   return tmsg.encode(locale.getpreferredencoding())\n  except KeyError:\n   if self._fallback:\n    return self._fallback.lngettext(msgid1,msgid2,n)\n   if n ==1:\n    return msgid1\n   else :\n    return msgid2\n    \n def gettext(self,message):\n  missing=object()\n  tmsg=self._catalog.get(message,missing)\n  if tmsg is missing:\n   if self._fallback:\n    return self._fallback.gettext(message)\n   return message\n  return tmsg\n  \n def ngettext(self,msgid1,msgid2,n):\n  try :\n   tmsg=self._catalog[(msgid1,self.plural(n))]\n  except KeyError:\n   if self._fallback:\n    return self._fallback.ngettext(msgid1,msgid2,n)\n   if n ==1:\n    tmsg=msgid1\n   else :\n    tmsg=msgid2\n  return tmsg\n  \n  \n  \ndef find(domain,localedir=None ,languages=None ,all=False ):\n\n if localedir is None :\n  localedir=_default_localedir\n if languages is None :\n  languages=[]\n  for envar in ('LANGUAGE','LC_ALL','LC_MESSAGES','LANG'):\n   val=os.environ.get(envar)\n   if val:\n    languages=val.split(':')\n    break\n  if'C'not in languages:\n   languages.append('C')\n   \n nelangs=[]\n for lang in languages:\n  for nelang in _expand_lang(lang):\n   if nelang not in nelangs:\n    nelangs.append(nelang)\n    \n if all:\n  result=[]\n else :\n  result=None\n for lang in nelangs:\n  if lang =='C':\n   break\n  mofile=os.path.join(localedir,lang,'LC_MESSAGES','%s.mo'%domain)\n  if os.path.exists(mofile):\n   if all:\n    result.append(mofile)\n   else :\n    return mofile\n return result\n \n \n \n \n_translations={}\n\ndef translation(domain,localedir=None ,languages=None ,\nclass_=None ,fallback=False ,codeset=None ):\n if class_ is None :\n  class_=GNUTranslations\n mofiles=find(domain,localedir,languages,all=True )\n if not mofiles:\n  if fallback:\n   return NullTranslations()\n  raise OSError(ENOENT,'No translation file found for domain',domain)\n  \n  \n result=None\n for mofile in mofiles:\n  key=(class_,os.path.abspath(mofile))\n  t=_translations.get(key)\n  if t is None :\n   with open(mofile,'rb')as fp:\n    t=_translations.setdefault(key,class_(fp))\n    \n    \n    \n  t=copy.copy(t)\n  if codeset:\n   t.set_output_charset(codeset)\n  if result is None :\n   result=t\n  else :\n   result.add_fallback(t)\n return result\n \n \ndef install(domain,localedir=None ,codeset=None ,names=None ):\n t=translation(domain,localedir,fallback=True ,codeset=codeset)\n t.install(names)\n \n \n \n \n_localedirs={}\n\n_localecodesets={}\n\n_current_domain='messages'\n\n\ndef textdomain(domain=None ):\n global _current_domain\n if domain is not None :\n  _current_domain=domain\n return _current_domain\n \n \ndef bindtextdomain(domain,localedir=None ):\n global _localedirs\n if localedir is not None :\n  _localedirs[domain]=localedir\n return _localedirs.get(domain,_default_localedir)\n \n \ndef bind_textdomain_codeset(domain,codeset=None ):\n global _localecodesets\n if codeset is not None :\n  _localecodesets[domain]=codeset\n return _localecodesets.get(domain)\n \n \ndef dgettext(domain,message):\n try :\n  t=translation(domain,_localedirs.get(domain,None ),\n  codeset=_localecodesets.get(domain))\n except OSError:\n  return message\n return t.gettext(message)\n \ndef ldgettext(domain,message):\n try :\n  t=translation(domain,_localedirs.get(domain,None ),\n  codeset=_localecodesets.get(domain))\n except OSError:\n  return message\n return t.lgettext(message)\n \ndef dngettext(domain,msgid1,msgid2,n):\n try :\n  t=translation(domain,_localedirs.get(domain,None ),\n  codeset=_localecodesets.get(domain))\n except OSError:\n  if n ==1:\n   return msgid1\n  else :\n   return msgid2\n return t.ngettext(msgid1,msgid2,n)\n \ndef ldngettext(domain,msgid1,msgid2,n):\n try :\n  t=translation(domain,_localedirs.get(domain,None ),\n  codeset=_localecodesets.get(domain))\n except OSError:\n  if n ==1:\n   return msgid1\n  else :\n   return msgid2\n return t.lngettext(msgid1,msgid2,n)\n \ndef gettext(message):\n return dgettext(_current_domain,message)\n \ndef lgettext(message):\n return ldgettext(_current_domain,message)\n \ndef ngettext(msgid1,msgid2,n):\n return dngettext(_current_domain,msgid1,msgid2,n)\n \ndef lngettext(msgid1,msgid2,n):\n return ldngettext(_current_domain,msgid1,msgid2,n)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nCatalog=translation\n"], "sysconfig": [".py", "''\n\n\n\n\nvariables={'TANH_PRESERVES_ZERO_SIGN':0,'WITH_DOC_STRINGS':0}\n\ndef get_config_var(var):\n if var in variables:\n  return variables[var]\n  \n raise NotImplementedError(\"sysconfig.py:get_config_var: variable '%s' does not exist\"%variable)\n"], "browser.svg": [".py", "from _svg import *"], "encodings.cp1253": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1253',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\ufffe'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\ufffe'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\u0385'\n'\\u0386'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\ufffe'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\u2015'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\u0384'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\u0388'\n'\\u0389'\n'\\u038a'\n'\\xbb'\n'\\u038c'\n'\\xbd'\n'\\u038e'\n'\\u038f'\n'\\u0390'\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0398'\n'\\u0399'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u039e'\n'\\u039f'\n'\\u03a0'\n'\\u03a1'\n'\\ufffe'\n'\\u03a3'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03aa'\n'\\u03ab'\n'\\u03ac'\n'\\u03ad'\n'\\u03ae'\n'\\u03af'\n'\\u03b0'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u03b4'\n'\\u03b5'\n'\\u03b6'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c2'\n'\\u03c3'\n'\\u03c4'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\u03c8'\n'\\u03c9'\n'\\u03ca'\n'\\u03cb'\n'\\u03cc'\n'\\u03cd'\n'\\u03ce'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "xml.etree": [".py", "", 1], "pwd": [".py", "\ndef getpwuid():\n pass\n"], "encodings.iso8859_1": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-1',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.cp855": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp855',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0452,\n0x0081:0x0402,\n0x0082:0x0453,\n0x0083:0x0403,\n0x0084:0x0451,\n0x0085:0x0401,\n0x0086:0x0454,\n0x0087:0x0404,\n0x0088:0x0455,\n0x0089:0x0405,\n0x008a:0x0456,\n0x008b:0x0406,\n0x008c:0x0457,\n0x008d:0x0407,\n0x008e:0x0458,\n0x008f:0x0408,\n0x0090:0x0459,\n0x0091:0x0409,\n0x0092:0x045a,\n0x0093:0x040a,\n0x0094:0x045b,\n0x0095:0x040b,\n0x0096:0x045c,\n0x0097:0x040c,\n0x0098:0x045e,\n0x0099:0x040e,\n0x009a:0x045f,\n0x009b:0x040f,\n0x009c:0x044e,\n0x009d:0x042e,\n0x009e:0x044a,\n0x009f:0x042a,\n0x00a0:0x0430,\n0x00a1:0x0410,\n0x00a2:0x0431,\n0x00a3:0x0411,\n0x00a4:0x0446,\n0x00a5:0x0426,\n0x00a6:0x0434,\n0x00a7:0x0414,\n0x00a8:0x0435,\n0x00a9:0x0415,\n0x00aa:0x0444,\n0x00ab:0x0424,\n0x00ac:0x0433,\n0x00ad:0x0413,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x0445,\n0x00b6:0x0425,\n0x00b7:0x0438,\n0x00b8:0x0418,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x0439,\n0x00be:0x0419,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x043a,\n0x00c7:0x041a,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x043b,\n0x00d1:0x041b,\n0x00d2:0x043c,\n0x00d3:0x041c,\n0x00d4:0x043d,\n0x00d5:0x041d,\n0x00d6:0x043e,\n0x00d7:0x041e,\n0x00d8:0x043f,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x041f,\n0x00de:0x044f,\n0x00df:0x2580,\n0x00e0:0x042f,\n0x00e1:0x0440,\n0x00e2:0x0420,\n0x00e3:0x0441,\n0x00e4:0x0421,\n0x00e5:0x0442,\n0x00e6:0x0422,\n0x00e7:0x0443,\n0x00e8:0x0423,\n0x00e9:0x0436,\n0x00ea:0x0416,\n0x00eb:0x0432,\n0x00ec:0x0412,\n0x00ed:0x044c,\n0x00ee:0x042c,\n0x00ef:0x2116,\n0x00f0:0x00ad,\n0x00f1:0x044b,\n0x00f2:0x042b,\n0x00f3:0x0437,\n0x00f4:0x0417,\n0x00f5:0x0448,\n0x00f6:0x0428,\n0x00f7:0x044d,\n0x00f8:0x042d,\n0x00f9:0x0449,\n0x00fa:0x0429,\n0x00fb:0x0447,\n0x00fc:0x0427,\n0x00fd:0x00a7,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0452'\n'\\u0402'\n'\\u0453'\n'\\u0403'\n'\\u0451'\n'\\u0401'\n'\\u0454'\n'\\u0404'\n'\\u0455'\n'\\u0405'\n'\\u0456'\n'\\u0406'\n'\\u0457'\n'\\u0407'\n'\\u0458'\n'\\u0408'\n'\\u0459'\n'\\u0409'\n'\\u045a'\n'\\u040a'\n'\\u045b'\n'\\u040b'\n'\\u045c'\n'\\u040c'\n'\\u045e'\n'\\u040e'\n'\\u045f'\n'\\u040f'\n'\\u044e'\n'\\u042e'\n'\\u044a'\n'\\u042a'\n'\\u0430'\n'\\u0410'\n'\\u0431'\n'\\u0411'\n'\\u0446'\n'\\u0426'\n'\\u0434'\n'\\u0414'\n'\\u0435'\n'\\u0415'\n'\\u0444'\n'\\u0424'\n'\\u0433'\n'\\u0413'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u0445'\n'\\u0425'\n'\\u0438'\n'\\u0418'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u0439'\n'\\u0419'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u043a'\n'\\u041a'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\u043b'\n'\\u041b'\n'\\u043c'\n'\\u041c'\n'\\u043d'\n'\\u041d'\n'\\u043e'\n'\\u041e'\n'\\u043f'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u041f'\n'\\u044f'\n'\\u2580'\n'\\u042f'\n'\\u0440'\n'\\u0420'\n'\\u0441'\n'\\u0421'\n'\\u0442'\n'\\u0422'\n'\\u0443'\n'\\u0423'\n'\\u0436'\n'\\u0416'\n'\\u0432'\n'\\u0412'\n'\\u044c'\n'\\u042c'\n'\\u2116'\n'\\xad'\n'\\u044b'\n'\\u042b'\n'\\u0437'\n'\\u0417'\n'\\u0448'\n'\\u0428'\n'\\u044d'\n'\\u042d'\n'\\u0449'\n'\\u0429'\n'\\u0447'\n'\\u0427'\n'\\xa7'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00cf,\n0x00a7:0x00fd,\n0x00ab:0x00ae,\n0x00ad:0x00f0,\n0x00bb:0x00af,\n0x0401:0x0085,\n0x0402:0x0081,\n0x0403:0x0083,\n0x0404:0x0087,\n0x0405:0x0089,\n0x0406:0x008b,\n0x0407:0x008d,\n0x0408:0x008f,\n0x0409:0x0091,\n0x040a:0x0093,\n0x040b:0x0095,\n0x040c:0x0097,\n0x040e:0x0099,\n0x040f:0x009b,\n0x0410:0x00a1,\n0x0411:0x00a3,\n0x0412:0x00ec,\n0x0413:0x00ad,\n0x0414:0x00a7,\n0x0415:0x00a9,\n0x0416:0x00ea,\n0x0417:0x00f4,\n0x0418:0x00b8,\n0x0419:0x00be,\n0x041a:0x00c7,\n0x041b:0x00d1,\n0x041c:0x00d3,\n0x041d:0x00d5,\n0x041e:0x00d7,\n0x041f:0x00dd,\n0x0420:0x00e2,\n0x0421:0x00e4,\n0x0422:0x00e6,\n0x0423:0x00e8,\n0x0424:0x00ab,\n0x0425:0x00b6,\n0x0426:0x00a5,\n0x0427:0x00fc,\n0x0428:0x00f6,\n0x0429:0x00fa,\n0x042a:0x009f,\n0x042b:0x00f2,\n0x042c:0x00ee,\n0x042d:0x00f8,\n0x042e:0x009d,\n0x042f:0x00e0,\n0x0430:0x00a0,\n0x0431:0x00a2,\n0x0432:0x00eb,\n0x0433:0x00ac,\n0x0434:0x00a6,\n0x0435:0x00a8,\n0x0436:0x00e9,\n0x0437:0x00f3,\n0x0438:0x00b7,\n0x0439:0x00bd,\n0x043a:0x00c6,\n0x043b:0x00d0,\n0x043c:0x00d2,\n0x043d:0x00d4,\n0x043e:0x00d6,\n0x043f:0x00d8,\n0x0440:0x00e1,\n0x0441:0x00e3,\n0x0442:0x00e5,\n0x0443:0x00e7,\n0x0444:0x00aa,\n0x0445:0x00b5,\n0x0446:0x00a4,\n0x0447:0x00fb,\n0x0448:0x00f5,\n0x0449:0x00f9,\n0x044a:0x009e,\n0x044b:0x00f1,\n0x044c:0x00ed,\n0x044d:0x00f7,\n0x044e:0x009c,\n0x044f:0x00de,\n0x0451:0x0084,\n0x0452:0x0080,\n0x0453:0x0082,\n0x0454:0x0086,\n0x0455:0x0088,\n0x0456:0x008a,\n0x0457:0x008c,\n0x0458:0x008e,\n0x0459:0x0090,\n0x045a:0x0092,\n0x045b:0x0094,\n0x045c:0x0096,\n0x045e:0x0098,\n0x045f:0x009a,\n0x2116:0x00ef,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "encodings.mac_turkish": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-turkish',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\xc6'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\xa5'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u03c0'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\xe6'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\xff'\n'\\u0178'\n'\\u011e'\n'\\u011f'\n'\\u0130'\n'\\u0131'\n'\\u015e'\n'\\u015f'\n'\\u2021'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\xca'\n'\\xc1'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\uf8ff'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\uf8a0'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u02d8'\n'\\u02d9'\n'\\u02da'\n'\\xb8'\n'\\u02dd'\n'\\u02db'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "abc": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) according to PEP 3119.\"\"\"\n\nfrom _weakrefset import WeakSet\n\ndef abstractmethod(funcobj):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n funcobj.__isabstractmethod__=True\n return funcobj\n \n \nclass abstractclassmethod(classmethod):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n  callable.__isabstractmethod__=True\n  super().__init__(callable)\n  \n  \nclass abstractstaticmethod(staticmethod):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n  callable.__isabstractmethod__=True\n  super().__init__(callable)\n  \n  \nclass abstractproperty(property):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __isabstractmethod__=True\n \n \nclass ABCMeta(type):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n _abc_invalidation_counter=0\n \n def __new__(mcls,name,bases,namespace):\n  cls=super().__new__(mcls,name,bases,namespace)\n  \n  abstracts={name\n  for name,value in namespace.items()\n  if getattr(value,\"__isabstractmethod__\",False )}\n  for base in bases:\n   for name in getattr(base,\"__abstractmethods__\",set()):\n    value=getattr(cls,name,None )\n    if getattr(value,\"__isabstractmethod__\",False ):\n     abstracts.add(name)\n  cls.__abstractmethods__=frozenset(abstracts)\n  \n  cls._abc_registry=WeakSet()\n  cls._abc_cache=WeakSet()\n  cls._abc_negative_cache=WeakSet()\n  cls._abc_negative_cache_version=ABCMeta._abc_invalidation_counter\n  return cls\n  \n def register(cls,subclass):\n  ''\n\n\n  \n  if not isinstance(subclass,type):\n   raise TypeError(\"Can only register classes\")\n  if issubclass(subclass,cls):\n   return subclass\n   \n   \n  if issubclass(cls,subclass):\n  \n   raise RuntimeError(\"Refusing to create an inheritance cycle\")\n  cls._abc_registry.add(subclass)\n  ABCMeta._abc_invalidation_counter +=1\n  return subclass\n  \n def _dump_registry(cls,file=None ):\n  ''\n  print(\"Class: %s.%s\"%(cls.__module__,cls.__name__),file=file)\n  print(\"Inv.counter: %s\"%ABCMeta._abc_invalidation_counter,file=file)\n  for name in sorted(cls.__dict__.keys()):\n   if name.startswith(\"_abc_\"):\n    value=getattr(cls,name)\n    print(\"%s: %r\"%(name,value),file=file)\n    \n def __instancecheck__(cls,instance):\n  ''\n  \n  subclass=instance.__class__\n  if subclass in cls._abc_cache:\n   return True\n  subtype=type(instance)\n  if subtype is subclass:\n   if (cls._abc_negative_cache_version ==\n   ABCMeta._abc_invalidation_counter and\n   subclass in cls._abc_negative_cache):\n    return False\n    \n   return cls.__subclasscheck__(subclass)\n  return any(cls.__subclasscheck__(c)for c in {subclass,subtype})\n  \n def __subclasscheck__(cls,subclass):\n  ''\n  \n  if subclass in cls._abc_cache:\n   return True\n   \n  if cls._abc_negative_cache_version <ABCMeta._abc_invalidation_counter:\n  \n   cls._abc_negative_cache=WeakSet()\n   cls._abc_negative_cache_version=ABCMeta._abc_invalidation_counter\n  elif subclass in cls._abc_negative_cache:\n   return False\n   \n  ok=cls.__subclasshook__(subclass)\n  if ok is not NotImplemented:\n   assert isinstance(ok,bool)\n   if ok:\n    cls._abc_cache.add(subclass)\n   else :\n    cls._abc_negative_cache.add(subclass)\n   return ok\n   \n  if cls in getattr(subclass,'__mro__',()):\n   cls._abc_cache.add(subclass)\n   return True\n   \n  for rcls in cls._abc_registry:\n   if issubclass(subclass,rcls):\n    cls._abc_cache.add(subclass)\n    return True\n    \n  for scls in cls.__subclasses__():\n   if issubclass(subclass,scls):\n    cls._abc_cache.add(subclass)\n    return True\n    \n  cls._abc_negative_cache.add(subclass)\n  return False\n"], "encodings.iso8859_11": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-11',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0e01'\n'\\u0e02'\n'\\u0e03'\n'\\u0e04'\n'\\u0e05'\n'\\u0e06'\n'\\u0e07'\n'\\u0e08'\n'\\u0e09'\n'\\u0e0a'\n'\\u0e0b'\n'\\u0e0c'\n'\\u0e0d'\n'\\u0e0e'\n'\\u0e0f'\n'\\u0e10'\n'\\u0e11'\n'\\u0e12'\n'\\u0e13'\n'\\u0e14'\n'\\u0e15'\n'\\u0e16'\n'\\u0e17'\n'\\u0e18'\n'\\u0e19'\n'\\u0e1a'\n'\\u0e1b'\n'\\u0e1c'\n'\\u0e1d'\n'\\u0e1e'\n'\\u0e1f'\n'\\u0e20'\n'\\u0e21'\n'\\u0e22'\n'\\u0e23'\n'\\u0e24'\n'\\u0e25'\n'\\u0e26'\n'\\u0e27'\n'\\u0e28'\n'\\u0e29'\n'\\u0e2a'\n'\\u0e2b'\n'\\u0e2c'\n'\\u0e2d'\n'\\u0e2e'\n'\\u0e2f'\n'\\u0e30'\n'\\u0e31'\n'\\u0e32'\n'\\u0e33'\n'\\u0e34'\n'\\u0e35'\n'\\u0e36'\n'\\u0e37'\n'\\u0e38'\n'\\u0e39'\n'\\u0e3a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0e3f'\n'\\u0e40'\n'\\u0e41'\n'\\u0e42'\n'\\u0e43'\n'\\u0e44'\n'\\u0e45'\n'\\u0e46'\n'\\u0e47'\n'\\u0e48'\n'\\u0e49'\n'\\u0e4a'\n'\\u0e4b'\n'\\u0e4c'\n'\\u0e4d'\n'\\u0e4e'\n'\\u0e4f'\n'\\u0e50'\n'\\u0e51'\n'\\u0e52'\n'\\u0e53'\n'\\u0e54'\n'\\u0e55'\n'\\u0e56'\n'\\u0e57'\n'\\u0e58'\n'\\u0e59'\n'\\u0e5a'\n'\\u0e5b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "jqueryui.jquery-ui.min": [".js", "/*! jQuery UI - v1.11.4 - 2015-03-11\n* http://jqueryui.com\n* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\n\n(function(e){\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return\"area\"===r?(n=t.parentNode,a=n.name,t.href&&a&&\"map\"===n.nodeName.toLowerCase()?(o=e(\"img[usemap='#\"+a+\"']\")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:\"a\"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return\"hidden\"===e.css(this,\"visibility\")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css(\"position\"),(\"absolute\"===t||\"relative\"===t||\"fixed\"===t)&&(i=parseInt(e.css(\"zIndex\"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId=\"ui-datepicker-div\",this._inlineClass=\"ui-datepicker-inline\",this._appendClass=\"ui-datepicker-append\",this._triggerClass=\"ui-datepicker-trigger\",this._dialogClass=\"ui-datepicker-dialog\",this._disableClass=\"ui-datepicker-disabled\",this._unselectableClass=\"ui-datepicker-unselectable\",this._currentClass=\"ui-datepicker-current-day\",this._dayOverClass=\"ui-datepicker-days-cell-over\",this.regional=[],this.regional[\"\"]={closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"mm/dd/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"},this._defaults={showOn:\"focus\",showAnim:\"fadeIn\",showOptions:{},defaultDate:null,appendText:\"\",buttonText:\"...\",buttonImage:\"\",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:\"c-10:c+10\",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:\"+10\",minDate:null,maxDate:null,duration:\"fast\",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:\"\",altFormat:\"\",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[\"\"]),this.regional.en=e.extend(!0,{},this.regional[\"\"]),this.regional[\"en-US\"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e(\"<div id='\"+this._mainDivId+\"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\"))}function a(t){var i=\"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";return t.delegate(i,\"mouseout\",function(){e(this).removeClass(\"ui-state-hover\"),-1!==this.className.indexOf(\"ui-datepicker-prev\")&&e(this).removeClass(\"ui-datepicker-prev-hover\"),-1!==this.className.indexOf(\"ui-datepicker-next\")&&e(this).removeClass(\"ui-datepicker-next-hover\")}).delegate(i,\"mouseover\",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(\".ui-datepicker-calendar\").find(\"a\").removeClass(\"ui-state-hover\"),e(this).addClass(\"ui-state-hover\"),-1!==this.className.indexOf(\"ui-datepicker-prev\")&&e(this).addClass(\"ui-datepicker-prev-hover\"),-1!==this.className.indexOf(\"ui-datepicker-next\")&&e(this).addClass(\"ui-datepicker-next-hover\"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger(\"change\")}}e.ui=e.ui||{},e.extend(e.ui,{version:\"1.11.4\",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css(\"position\"),s=\"absolute\"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&\"static\"===t.css(\"position\")?!1:n.test(t.css(\"overflow\")+t.css(\"overflow-y\")+t.css(\"overflow-x\"))}).eq(0);return\"fixed\"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id=\"ui-id-\"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\\d+$/.test(this.id)&&e(this).removeAttr(\"id\")})}}),e.extend(e.expr[\":\"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,\"tabindex\")))},tabbable:function(i){var s=e.attr(i,\"tabindex\"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e(\"<a>\").outerWidth(1).jquery||e.each([\"Width\",\"Height\"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,\"padding\"+this))||0,s&&(i-=parseFloat(e.css(t,\"border\"+this+\"Width\"))||0),a&&(i-=parseFloat(e.css(t,\"margin\"+this))||0)}),i}var n=\"Width\"===i?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn[\"inner\"+i]=function(t){return void 0===t?o[\"inner\"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+\"px\")})},e.fn[\"outer\"+i]=function(t,n){return\"number\"!=typeof t?o[\"outer\"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+\"px\")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e(\"<a>\").data(\"a-b\",\"a\").removeData(\"a-b\").data(\"a-b\")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return\"number\"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e=\"onselectstart\"in document.createElement(\"div\")?\"selectstart\":\"mousedown\";return function(){return this.bind(e+\".ui-disableSelection\",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(\".ui-disableSelection\")},zIndex:function(t){if(void 0!==t)return this.css(\"zIndex\",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css(\"position\"),(\"absolute\"===i||\"relative\"===i||\"fixed\"===i)&&(s=parseInt(n.css(\"zIndex\"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,\"events\"),s&&s.remove&&e(n).triggerHandler(\"remove\")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(\".\")[0];return t=t.split(\".\")[1],n=l+\"-\"+t,s||(s=i,i=e.Widget),e.expr[\":\"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+\".\"+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a=\"string\"==typeof n,o=u.call(arguments,1),r=this;return a?this.each(function(){var i,a=e.data(this,s);return\"instance\"===n?(r=a,!1):a?e.isFunction(a[n])&&\"_\"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error(\"no such method '\"+n+\"' for \"+t+\" widget instance\"):e.error(\"cannot call methods on \"+t+\" prior to initialization; \"+\"attempted to call method '\"+n+\"'\")}):(o.length&&(n=e.widget.extend.apply(null,[n].concat(o))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",defaultElement:\"<div>\",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace=\".\"+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger(\"create\",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr(\"aria-disabled\").removeClass(this.widgetFullName+\"-disabled \"+\"ui-state-disabled\"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass(\"ui-state-hover\"),this.focusable.removeClass(\"ui-state-focus\")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if(\"string\"==typeof t)if(o={},s=t.split(\".\"),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,\"disabled\"===e&&(this.widget().toggleClass(this.widgetFullName+\"-disabled\",!!t),t&&(this.hoverable.removeClass(\"ui-state-hover\"),this.focusable.removeClass(\"ui-state-focus\"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;\"boolean\"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass(\"ui-state-disabled\")?(\"string\"==typeof o?a[o]:o).apply(a,arguments):void 0}\"string\"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\\w:-]*)\\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||\"\").split(\" \").join(this.eventNamespace+\" \")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return(\"string\"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass(\"ui-state-hover\")},mouseleave:function(t){e(t.currentTarget).removeClass(\"ui-state-hover\")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass(\"ui-state-focus\")},focusout:function(t){e(t.currentTarget).removeClass(\"ui-state-focus\")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:\"fadeIn\",hide:\"fadeOut\"},function(t,i){e.Widget.prototype[\"_\"+t]=function(s,n,a){\"string\"==typeof n&&(n={effect:n});var o,r=n?n===!0||\"number\"==typeof n?i:n.effect||i:t;n=n||{},\"number\"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget(\"ui.mouse\",{version:\"1.11.4\",options:{cancel:\"input,textarea,button,select,option\",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind(\"mousedown.\"+this.widgetName,function(e){return t._mouseDown(e)}).bind(\"click.\"+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+\".preventClickEvent\")?(e.removeData(i.target,t.widgetName+\".preventClickEvent\"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName),this._mouseMoveDelegate&&this.document.unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n=\"string\"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+\".preventClickEvent\")&&e.removeData(t.target,this.widgetName+\".preventClickEvent\"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+\".preventClickEvent\",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\\+\\-]\\d+(\\.[\\d]+)?%?/,c=/^\\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e(\"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\"),a=s.children()[0];return e(\"body\").append(s),t=a.offsetWidth,s.css(\"overflow\",\"scroll\"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?\"\":t.element.css(\"overflow-x\"),s=t.isWindow||t.isDocument?\"\":t.element.css(\"overflow-y\"),n=\"scroll\"===i||\"auto\"===i&&t.width<t.element[0].scrollWidth,a=\"scroll\"===s||\"auto\"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||\"flip\").split(\" \"),T={};return b=s(_),_[0].preventDefault&&(n.at=\"left top\"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each([\"my\",\"at\"],function(){var e,t,i=(n[this]||\"\").split(\" \");1===i.length&&(i=l.test(i[0])?i.concat([\"center\"]):u.test(i[0])?[\"center\"].concat(i):[\"center\",\"center\"]),i[0]=l.test(i[0])?i[0]:\"center\",i[1]=u.test(i[1])?i[1]:\"center\",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),\"right\"===n.at[0]?y.left+=m:\"center\"===n.at[0]&&(y.left+=m/2),\"bottom\"===n.at[1]?y.top+=g:\"center\"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,\"marginLeft\"),b=i(this,\"marginTop\"),D=d+f+i(this,\"marginRight\")+w.width,S=c+b+i(this,\"marginBottom\")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());\"right\"===n.my[0]?M.left-=d:\"center\"===n.my[0]&&(M.left-=d/2),\"bottom\"===n.my[1]?M.top-=c:\"center\"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each([\"left\",\"top\"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?\"left\":t>0?\"right\":\"center\",vertical:0>a?\"top\":s>0?\"bottom\":\"middle\"};d>m&&m>r(t+i)&&(h.horizontal=\"center\"),c>g&&g>r(s+a)&&(h.vertical=\"middle\"),h.important=o(r(t),r(i))>o(r(s),r(a))?\"horizontal\":\"vertical\",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c=\"left\"===t.my[0]?-t.elemWidth:\"right\"===t.my[0]?t.elemWidth:0,p=\"left\"===t.at[0]?t.targetWidth:\"right\"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c=\"top\"===t.my[1],p=c?-t.elemHeight:\"bottom\"===t.my[1]?t.elemHeight:0,f=\"top\"===t.at[1]?t.targetHeight:\"bottom\"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName(\"body\")[0],h=document.createElement(\"div\");t=document.createElement(r?\"div\":\"body\"),s={visibility:\"hidden\",width:0,height:0,border:0,margin:0,background:\"none\"},r&&e.extend(s,{position:\"absolute\",left:\"-1000px\",top:\"-1000px\"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText=\"position: absolute; left: 10.7432222px;\",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML=\"\",i.removeChild(t)}()}(),e.ui.position,e.widget(\"ui.accordion\",{version:\"1.11.4\",options:{active:0,animate:{},collapsible:!1,event:\"click\",header:\"> li > :first-child,> :not(li):even\",heightStyle:\"auto\",icons:{activeHeader:\"ui-icon-triangle-1-s\",header:\"ui-icon-triangle-1-e\"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:\"hide\",borderBottomWidth:\"hide\",paddingTop:\"hide\",paddingBottom:\"hide\",height:\"hide\"},showProps:{borderTopWidth:\"show\",borderBottomWidth:\"show\",paddingTop:\"show\",paddingBottom:\"show\",height:\"show\"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass(\"ui-accordion ui-widget ui-helper-reset\").attr(\"role\",\"tablist\"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e(\"<span>\").addClass(\"ui-accordion-header-icon ui-icon \"+t.header).prependTo(this.headers),this.active.children(\".ui-accordion-header-icon\").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass(\"ui-accordion-icons\"))},_destroyIcons:function(){this.headers.removeClass(\"ui-accordion-icons\").children(\".ui-accordion-header-icon\").remove()},_destroy:function(){var e;this.element.removeClass(\"ui-accordion ui-widget ui-helper-reset\").removeAttr(\"role\"),this.headers.removeClass(\"ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top\").removeAttr(\"role\").removeAttr(\"aria-expanded\").removeAttr(\"aria-selected\").removeAttr(\"aria-controls\").removeAttr(\"tabIndex\").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass(\"ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled\").css(\"display\",\"\").removeAttr(\"role\").removeAttr(\"aria-hidden\").removeAttr(\"aria-labelledby\").removeUniqueId(),\"content\"!==this.options.heightStyle&&e.css(\"height\",\"\")},_setOption:function(e,t){return\"active\"===e?(this._activate(t),void 0):(\"event\"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),\"collapsible\"!==e||t||this.options.active!==!1||this._activate(0),\"icons\"===e&&(this._destroyIcons(),t&&this._createIcons()),\"disabled\"===e&&(this.element.toggleClass(\"ui-state-disabled\",!!t).attr(\"aria-disabled\",t),this.headers.add(this.headers.next()).toggleClass(\"ui-state-disabled\",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr(\"tabIndex\",-1),e(a).attr(\"tabIndex\",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(\".ui-state-disabled\").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass(\"ui-accordion-header ui-state-default ui-corner-all\"),this.panels=this.headers.next().addClass(\"ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom\").filter(\":not(.ui-accordion-content-active)\").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass(\"ui-accordion-header-active ui-state-active ui-corner-top\").removeClass(\"ui-corner-all\"),this.active.next().addClass(\"ui-accordion-content-active\").show(),this.headers.attr(\"role\",\"tab\").each(function(){var t=e(this),i=t.uniqueId().attr(\"id\"),s=t.next(),n=s.uniqueId().attr(\"id\");t.attr(\"aria-controls\",n),s.attr(\"aria-labelledby\",i)}).next().attr(\"role\",\"tabpanel\"),this.headers.not(this.active).attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\",tabIndex:-1}).next().attr({\"aria-hidden\":\"true\"}).hide(),this.active.length?this.active.attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0}).next().attr({\"aria-hidden\":\"false\"}):this.headers.eq(0).attr(\"tabIndex\",0),this._createIcons(),this._setupEvents(i.event),\"fill\"===s?(t=n.height(),this.element.siblings(\":visible\").each(function(){var i=e(this),s=i.css(\"position\");\"absolute\"!==s&&\"fixed\"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css(\"overflow\",\"auto\")):\"auto\"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css(\"height\",\"\").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return\"number\"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:\"_keydown\"};t&&e.each(t.split(\" \"),function(e,t){i[t]=\"_eventHandler\"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:\"_panelKeyDown\"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger(\"beforeActivate\",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass(\"ui-accordion-header-active ui-state-active\"),i.icons&&s.children(\".ui-accordion-header-icon\").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass(\"ui-corner-all\").addClass(\"ui-accordion-header-active ui-state-active ui-corner-top\"),i.icons&&n.children(\".ui-accordion-header-icon\").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass(\"ui-accordion-content-active\")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({\"aria-hidden\":\"true\"}),s.prev().attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\"}),i.length&&s.length?s.prev().attr({tabIndex:-1,\"aria-expanded\":\"false\"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr(\"tabIndex\"),10)}).attr(\"tabIndex\",-1),i.attr(\"aria-hidden\",\"false\").prev().attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css(\"box-sizing\"),l=e.length&&(!t.length||e.index()<t.index()),u=this.options.animate||{},d=l&&u.down||u,c=function(){o._toggleComplete(i)};return\"number\"==typeof d&&(a=d),\"string\"==typeof d&&(n=d),n=n||d.easing||u.easing,a=a||d.duration||u.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:c,step:function(e,i){i.now=Math.round(e),\"height\"!==i.prop?\"content-box\"===h&&(r+=i.now):\"content\"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,c):e.animate(this.showProps,a,n,c)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass(\"ui-accordion-content-active\").prev().removeClass(\"ui-corner-top\").addClass(\"ui-corner-all\"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger(\"activate\",null,e)}}),e.widget(\"ui.menu\",{version:\"1.11.4\",defaultElement:\"<ul>\",delay:300,options:{icons:{submenu:\"ui-icon-carat-1-e\"},items:\"> *\",menus:\"ul\",position:{my:\"left-1 top\",at:\"right top\"},role:\"menu\",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass(\"ui-menu ui-widget ui-widget-content\").toggleClass(\"ui-menu-icons\",!!this.element.find(\".ui-icon\").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass(\"ui-state-disabled\").attr(\"aria-disabled\",\"true\"),this._on({\"mousedown .ui-menu-item\":function(e){e.preventDefault()},\"click .ui-menu-item\":function(t){var i=e(t.target);!this.mouseHandled&&i.not(\".ui-state-disabled\").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(\".ui-menu\").length?this.expand(t):!this.element.is(\":focus\")&&e(this.document[0].activeElement).closest(\".ui-menu\").length&&(this.element.trigger(\"focus\",[!0]),this.active&&1===this.active.parents(\".ui-menu\").length&&clearTimeout(this.timer)))},\"mouseenter .ui-menu-item\":function(t){if(!this.previousFilter){var i=e(t.currentTarget);\ni.siblings(\".ui-state-active\").removeClass(\"ui-state-active\"),this.focus(t,i)}},mouseleave:\"collapseAll\",\"mouseleave .ui-menu\":\"collapseAll\",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:\"_keydown\"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr(\"aria-activedescendant\").find(\".ui-menu\").addBack().removeClass(\"ui-menu ui-widget ui-widget-content ui-menu-icons ui-front\").removeAttr(\"role\").removeAttr(\"tabIndex\").removeAttr(\"aria-labelledby\").removeAttr(\"aria-expanded\").removeAttr(\"aria-hidden\").removeAttr(\"aria-disabled\").removeUniqueId().show(),this.element.find(\".ui-menu-item\").removeClass(\"ui-menu-item\").removeAttr(\"role\").removeAttr(\"aria-disabled\").removeUniqueId().removeClass(\"ui-state-hover\").removeAttr(\"tabIndex\").removeAttr(\"role\").removeAttr(\"aria-haspopup\").children().each(function(){var t=e(this);t.data(\"ui-menu-submenu-carat\")&&t.remove()}),this.element.find(\".ui-menu-divider\").removeClass(\"ui-menu-divider ui-widget-content\")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move(\"first\",\"first\",t);break;case e.ui.keyCode.END:this._move(\"last\",\"last\",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(\".ui-state-disabled\")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||\"\",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(\".ui-menu-item\"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(\".ui-state-disabled\")||(this.active.is(\"[aria-haspopup='true']\")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass(\"ui-menu-icons\",!!this.element.find(\".ui-icon\").length),a.filter(\":not(.ui-menu)\").addClass(\"ui-menu ui-widget ui-widget-content ui-front\").hide().attr({role:this.options.role,\"aria-hidden\":\"true\",\"aria-expanded\":\"false\"}).each(function(){var t=e(this),i=t.parent(),s=e(\"<span>\").addClass(\"ui-menu-icon ui-icon \"+n).data(\"ui-menu-submenu-carat\",!0);i.attr(\"aria-haspopup\",\"true\").prepend(s),t.attr(\"aria-labelledby\",i.attr(\"id\"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(\".ui-menu-item\").each(function(){var t=e(this);s._isDivider(t)&&t.addClass(\"ui-widget-content ui-menu-divider\")}),i.not(\".ui-menu-item, .ui-menu-divider\").addClass(\"ui-menu-item\").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(\".ui-state-disabled\").attr(\"aria-disabled\",\"true\"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:\"menuitem\",listbox:\"option\"}[this.options.role]},_setOption:function(e,t){\"icons\"===e&&this.element.find(\".ui-menu-icon\").removeClass(this.options.icons.submenu).addClass(t.submenu),\"disabled\"===e&&this.element.toggleClass(\"ui-state-disabled\",!!t).attr(\"aria-disabled\",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&\"focus\"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass(\"ui-state-focus\").removeClass(\"ui-state-active\"),this.options.role&&this.element.attr(\"aria-activedescendant\",s.attr(\"id\")),this.active.parent().closest(\".ui-menu-item\").addClass(\"ui-state-active\"),e&&\"keydown\"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(\".ui-menu\"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger(\"focus\",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],\"borderTopWidth\"))||0,s=parseFloat(e.css(this.activeMenu[0],\"paddingTop\"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass(\"ui-state-focus\"),this.active=null,this._trigger(\"blur\",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),\"true\"===e.attr(\"aria-hidden\")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(\".ui-menu\").not(t.parents(\".ui-menu\")).hide().attr(\"aria-hidden\",\"true\"),t.show().removeAttr(\"aria-hidden\").attr(\"aria-expanded\",\"true\").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(\".ui-menu\"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(\".ui-menu\").hide().attr(\"aria-hidden\",\"true\").attr(\"aria-expanded\",\"false\").end().find(\".ui-state-active\").not(\".ui-state-focus\").removeClass(\"ui-state-active\")},_closeOnDocumentClick:function(t){return!e(t.target).closest(\".ui-menu\").length},_isDivider:function(e){return!/[^\\-\\u2014\\u2013\\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(\".ui-menu-item\",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(\".ui-menu \").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move(\"next\",\"first\",e)},previous:function(e){this._move(\"prev\",\"last\",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(\".ui-menu-item\").length},isLastItem:function(){return this.active&&!this.active.nextAll(\".ui-menu-item\").length},_move:function(e,t,i){var s;this.active&&(s=\"first\"===e||\"last\"===e?this.active[\"first\"===e?\"prevAll\":\"nextAll\"](\".ui-menu-item\").eq(-1):this.active[e+\"All\"](\".ui-menu-item\").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(\".ui-menu-item\").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?\"last\":\"first\"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(\".ui-menu-item\").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop(\"scrollHeight\")},select:function(t){this.active=this.active||e(t.target).closest(\".ui-menu-item\");var i={item:this.active};this.active.has(\".ui-menu\").length||this.collapseAll(t,!0),this._trigger(\"select\",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\"),s=RegExp(\"^\"+i,\"i\");return this.activeMenu.find(this.options.items).filter(\".ui-menu-item\").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget(\"ui.autocomplete\",{version:\"1.11.4\",defaultElement:\"<input>\",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:\"left top\",at:\"left bottom\",collision:\"none\"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a=\"textarea\"===n,o=\"input\"===n;this.isMultiLine=a?!0:o?!1:this.element.prop(\"isContentEditable\"),this.valueMethod=this.element[a||o?\"val\":\"text\"],this.isNewMenu=!0,this.element.addClass(\"ui-autocomplete-input\").attr(\"autocomplete\",\"off\"),this._on(this.element,{keydown:function(n){if(this.element.prop(\"readOnly\"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move(\"previousPage\",n);break;case a.PAGE_DOWN:t=!0,this._move(\"nextPage\",n);break;case a.UP:t=!0,this._keyEvent(\"previous\",n);break;case a.DOWN:t=!0,this._keyEvent(\"next\",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(\":visible\")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(\":visible\"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move(\"previousPage\",s);break;case n.PAGE_DOWN:this._move(\"nextPage\",s);break;case n.UP:this._keyEvent(\"previous\",s);break;case n.DOWN:this._keyEvent(\"next\",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e(\"<ul>\").addClass(\"ui-autocomplete ui-front\").appendTo(this._appendTo()).menu({role:null}).hide().menu(\"instance\"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(\".ui-menu-item\").length||this._delay(function(){var t=this;this.document.one(\"mousedown\",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one(\"mousemove\",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data(\"ui-autocomplete-item\"),!1!==this._trigger(\"focus\",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr(\"aria-label\")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e(\"<div>\").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data(\"ui-autocomplete-item\"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger(\"select\",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e(\"<span>\",{role:\"status\",\"aria-live\":\"assertive\",\"aria-relevant\":\"additions\"}).addClass(\"ui-helper-hidden-accessible\").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr(\"autocomplete\")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass(\"ui-autocomplete-input\").removeAttr(\"autocomplete\"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),\"source\"===e&&this._initSource(),\"appendTo\"===e&&this.menu.element.appendTo(this._appendTo()),\"disabled\"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(\".ui-front\")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):\"string\"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:\"json\",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(\":visible\"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger(\"search\",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass(\"ui-autocomplete-loading\"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass(\"ui-autocomplete-loading\")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger(\"response\",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger(\"open\")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(\":visible\")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger(\"close\",e))},_change:function(e){this.previous!==this._value()&&this._trigger(\"change\",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return\"string\"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width(\"\").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data(\"ui-autocomplete-item\",t)},_renderItem:function(t,i){return e(\"<li>\").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(\":visible\")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(\":visible\"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),\"i\");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget(\"ui.autocomplete\",e.ui.autocomplete,{options:{messages:{noResults:\"No search results.\",results:function(e){return e+(e>1?\" results are\":\" result is\")+\" available, use up and down arrow keys to navigate.\"}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e(\"<div>\").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p=\"ui-button ui-widget ui-state-default ui-corner-all\",f=\"ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only\",m=function(){var t=e(this);setTimeout(function(){t.find(\":ui-button\").button(\"refresh\")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,\"\\\\'\"),n=s?e(s).find(\"[name='\"+i+\"'][type=radio]\"):e(\"[name='\"+i+\"'][type=radio]\",t.ownerDocument).filter(function(){return!this.form})),n};e.widget(\"ui.button\",{version:\"1.11.4\",defaultElement:\"<button>\",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest(\"form\").unbind(\"reset\"+this.eventNamespace).bind(\"reset\"+this.eventNamespace,m),\"boolean\"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop(\"disabled\"):this.element.prop(\"disabled\",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr(\"title\");var t=this,i=this.options,s=\"checkbox\"===this.type||\"radio\"===this.type,n=s?\"\":\"ui-state-active\";null===i.label&&(i.label=\"input\"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr(\"role\",\"button\").bind(\"mouseenter\"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass(\"ui-state-active\")}).bind(\"mouseleave\"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind(\"click\"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass(\"ui-state-focus\")},blur:function(){this.buttonElement.removeClass(\"ui-state-focus\")}}),s&&this.element.bind(\"change\"+this.eventNamespace,function(){t.refresh()}),\"checkbox\"===this.type?this.buttonElement.bind(\"click\"+this.eventNamespace,function(){return i.disabled?!1:void 0}):\"radio\"===this.type?this.buttonElement.bind(\"click\"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass(\"ui-state-active\"),t.buttonElement.attr(\"aria-pressed\",\"true\");var s=t.element[0];g(s).not(s).map(function(){return e(this).button(\"widget\")[0]}).removeClass(\"ui-state-active\").attr(\"aria-pressed\",\"false\")}):(this.buttonElement.bind(\"mousedown\"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass(\"ui-state-active\"),c=this,t.document.one(\"mouseup\",function(){c=null}),void 0)}).bind(\"mouseup\"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass(\"ui-state-active\"),void 0)}).bind(\"keydown\"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass(\"ui-state-active\"),void 0)}).bind(\"keyup\"+this.eventNamespace+\" blur\"+this.eventNamespace,function(){e(this).removeClass(\"ui-state-active\")}),this.buttonElement.is(\"a\")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption(\"disabled\",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is(\"[type=checkbox]\")?\"checkbox\":this.element.is(\"[type=radio]\")?\"radio\":this.element.is(\"input\")?\"input\":\"button\",\"checkbox\"===this.type||\"radio\"===this.type?(e=this.element.parents().last(),t=\"label[for='\"+this.element.attr(\"id\")+\"']\",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass(\"ui-helper-hidden-accessible\"),i=this.element.is(\":checked\"),i&&this.buttonElement.addClass(\"ui-state-active\"),this.buttonElement.prop(\"aria-pressed\",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass(\"ui-helper-hidden-accessible\"),this.buttonElement.removeClass(p+\" ui-state-active \"+f).removeAttr(\"role\").removeAttr(\"aria-pressed\").html(this.buttonElement.find(\".ui-button-text\").html()),this.hasTitle||this.buttonElement.removeAttr(\"title\")},_setOption:function(e,t){return this._super(e,t),\"disabled\"===e?(this.widget().toggleClass(\"ui-state-disabled\",!!t),this.element.prop(\"disabled\",!!t),t&&(\"checkbox\"===this.type||\"radio\"===this.type?this.buttonElement.removeClass(\"ui-state-focus\"):this.buttonElement.removeClass(\"ui-state-focus ui-state-active\")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is(\"input, button\")?this.element.is(\":disabled\"):this.element.hasClass(\"ui-button-disabled\");t!==this.options.disabled&&this._setOption(\"disabled\",t),\"radio\"===this.type?g(this.element[0]).each(function(){e(this).is(\":checked\")?e(this).button(\"widget\").addClass(\"ui-state-active\").attr(\"aria-pressed\",\"true\"):e(this).button(\"widget\").removeClass(\"ui-state-active\").attr(\"aria-pressed\",\"false\")}):\"checkbox\"===this.type&&(this.element.is(\":checked\")?this.buttonElement.addClass(\"ui-state-active\").attr(\"aria-pressed\",\"true\"):this.buttonElement.removeClass(\"ui-state-active\").attr(\"aria-pressed\",\"false\"))},_resetButton:function(){if(\"input\"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e(\"<span></span>\",this.document[0]).addClass(\"ui-button-text\").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push(\"ui-button-text-icon\"+(n?\"s\":s.primary?\"-primary\":\"-secondary\")),s.primary&&t.prepend(\"<span class='ui-button-icon-primary ui-icon \"+s.primary+\"'></span>\"),s.secondary&&t.append(\"<span class='ui-button-icon-secondary ui-icon \"+s.secondary+\"'></span>\"),this.options.text||(a.push(n?\"ui-button-icons-only\":\"ui-button-icon-only\"),this.hasTitle||t.attr(\"title\",e.trim(i)))):a.push(\"ui-button-text-only\"),t.addClass(a.join(\" \"))}}),e.widget(\"ui.buttonset\",{version:\"1.11.4\",options:{items:\"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)\"},_create:function(){this.element.addClass(\"ui-buttonset\")},_init:function(){this.refresh()},_setOption:function(e,t){\"disabled\"===e&&this.buttons.button(\"option\",e,t),this._super(e,t)},refresh:function(){var t=\"rtl\"===this.element.css(\"direction\"),i=this.element.find(this.options.items),s=i.filter(\":ui-button\");i.not(\":ui-button\").button(),s.button(\"refresh\"),this.buttons=i.map(function(){return e(this).button(\"widget\")[0]}).removeClass(\"ui-corner-all ui-corner-left ui-corner-right\").filter(\":first\").addClass(t?\"ui-corner-right\":\"ui-corner-left\").end().filter(\":last\").addClass(t?\"ui-corner-left\":\"ui-corner-right\").end().end()},_destroy:function(){this.element.removeClass(\"ui-buttonset\"),this.buttons.map(function(){return e(this).button(\"widget\")[0]}).removeClass(\"ui-corner-left ui-corner-right\").end().button(\"destroy\")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:\"1.11.4\"}});var v;e.extend(n.prototype,{markerClassName:\"hasDatepicker\",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n=\"div\"===s||\"span\"===s,t.id||(this.uuid+=1,t.id=\"dp\"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),\"input\"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\\-])/g,\"\\\\\\\\$1\");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e(\"<div class='\"+this._inlineClass+\" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,\"datepicker\",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,\"appendText\"),r=this._get(i,\"isRTL\");i.append&&i.append.remove(),o&&(i.append=e(\"<span class='\"+this._appendClass+\"'>\"+o+\"</span>\"),t[r?\"before\":\"after\"](i.append)),t.unbind(\"focus\",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,\"showOn\"),(\"focus\"===s||\"both\"===s)&&t.focus(this._showDatepicker),(\"button\"===s||\"both\"===s)&&(n=this._get(i,\"buttonText\"),a=this._get(i,\"buttonImage\"),i.trigger=e(this._get(i,\"buttonImageOnly\")?e(\"<img/>\").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e(\"<button type='button'></button>\").addClass(this._triggerClass).html(a?e(\"<img/>\").attr({src:a,alt:n,title:n}):n)),t[r?\"before\":\"after\"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,\"autoSize\")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,\"dateFormat\");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?\"monthNames\":\"monthNamesShort\"))),a.setDate(t(this._get(e,o.match(/DD/)?\"dayNames\":\"dayNamesShort\"))+20-a.getDay())),e.input.attr(\"size\",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,\"datepicker\",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css(\"display\",\"block\"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o=\"dp\"+this.uuid,this._dialogInput=e(\"<input type='text' id='\"+o+\"' style='position: absolute; top: -100px; width: 0px;'/>\"),this._dialogInput.keydown(this._doKeyDown),e(\"body\").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],\"datepicker\",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css(\"left\",this._pos[0]+20+\"px\").css(\"top\",this._pos[1]+\"px\"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],\"datepicker\",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,\"datepicker\");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,\"datepicker\"),\"input\"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind(\"focus\",this._showDatepicker).unbind(\"keydown\",this._doKeyDown).unbind(\"keypress\",this._doKeyPress).unbind(\"keyup\",this._doKeyUp)):(\"div\"===i||\"span\"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,\"datepicker\");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),\"input\"===i?(t.disabled=!1,a.trigger.filter(\"button\").each(function(){this.disabled=!1}).end().filter(\"img\").css({opacity:\"1.0\",cursor:\"\"})):(\"div\"===i||\"span\"===i)&&(s=n.children(\".\"+this._inlineClass),s.children().removeClass(\"ui-state-disabled\"),s.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").prop(\"disabled\",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,\"datepicker\");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),\"input\"===i?(t.disabled=!0,a.trigger.filter(\"button\").each(function(){this.disabled=!0}).end().filter(\"img\").css({opacity:\"0.5\",cursor:\"default\"})):(\"div\"===i||\"span\"===i)&&(s=n.children(\".\"+this._inlineClass),s.children().addClass(\"ui-state-disabled\"),s.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").prop(\"disabled\",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,\"datepicker\")}catch(i){throw\"Missing instance data for this datepicker\"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&\"string\"==typeof i?\"defaults\"===i?e.extend({},e.datepicker._defaults):l?\"all\"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},\"string\"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,\"min\"),h=this._getMinMaxDate(l,\"max\"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),\"disabled\"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(\".ui-datepicker-rtl\");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e(\"td.\"+e.datepicker._dayOverClass+\":not(.\"+e.datepicker._currentClass+\")\",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,\"onSelect\"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,\"stepBigMonths\"):-e.datepicker._get(a,\"stepMonths\"),\"M\");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,\"stepBigMonths\"):+e.datepicker._get(a,\"stepMonths\"),\"M\");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,\"D\"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,\"stepBigMonths\"):-e.datepicker._get(a,\"stepMonths\"),\"M\");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,\"D\"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,\"D\"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,\"stepBigMonths\"):+e.datepicker._get(a,\"stepMonths\"),\"M\");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,\"D\"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);\nreturn e.datepicker._get(n,\"constrainInput\")?(i=e.datepicker._possibleChars(e.datepicker._get(n,\"dateFormat\")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||\" \">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,\"dateFormat\"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,\"input\"!==t.nodeName.toLowerCase()&&(t=e(\"input\",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,\"beforeShow\"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=\"\"),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|=\"fixed\"===e(this).css(\"position\"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:\"absolute\",display:\"block\",top:\"-1000px\"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?\"static\":o?\"fixed\":\"absolute\",display:\"none\",left:h.left+\"px\",top:h.top+\"px\"}),i.inline||(l=e.datepicker._get(i,\"showAnim\"),u=e.datepicker._get(i,\"duration\"),i.dpDiv.css(\"z-index\",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,\"showOptions\"),u):i.dpDiv[l||\"show\"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find(\".\"+this._dayOverClass+\" a\");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass(\"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\").width(\"\"),n>1&&t.dpDiv.addClass(\"ui-datepicker-multi-\"+n).css(\"width\",a*n+\"em\"),t.dpDiv[(1!==s[0]||1!==s[1]?\"add\":\"remove\")+\"Class\"](\"ui-datepicker-multi\"),t.dpDiv[(this._get(t,\"isRTL\")?\"add\":\"remove\")+\"Class\"](\"ui-datepicker-rtl\"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find(\"select.ui-datepicker-year:first\").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(\":visible\")&&!e.input.is(\":disabled\")&&!e.input.is(\":focus\")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,\"isRTL\")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,\"isRTL\");t&&(\"hidden\"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?\"previousSibling\":\"nextSibling\"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,\"datepicker\")||this._datepickerShowing&&(i=this._get(o,\"showAnim\"),s=this._get(o,\"duration\"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,\"showOptions\"),s,n):o.dpDiv[\"slideDown\"===i?\"slideUp\":\"fadeIn\"===i?\"fadeOut\":\"hide\"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,\"onClose\"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():\"\",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:\"absolute\",left:\"0\",top:\"-100px\"}),e.blockUI&&(e.unblockUI(),e(\"body\").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(\".ui-datepicker-calendar\")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents(\"#\"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest(\".\"+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+(\"M\"===s?this._get(a,\"showCurrentAtPos\"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,\"gotoCurrent\")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a[\"selected\"+(\"M\"===s?\"Month\":\"Year\")]=a[\"draw\"+(\"M\"===s?\"Month\":\"Year\")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e(\"a\",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,\"\")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,\"onSelect\"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger(\"change\"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],\"object\"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,\"altField\");a&&(i=this._get(t,\"altFormat\")||this._get(t,\"dateFormat\"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,\"\"]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw\"Invalid arguments\";if(i=\"object\"==typeof i?\"\"+i:i+\"\",\"\"===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u=\"string\"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s=\"@\"===e?14:\"!\"===e?20:\"y\"===e&&t?4:\"o\"===e?3:2,n=\"y\"===e?s:1,a=RegExp(\"^\\\\d{\"+n+\",\"+s+\"}\"),o=i.substring(h).match(a);if(!o)throw\"Missing number at position \"+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw\"Unknown name at position \"+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw\"Unexpected literal at position \"+h;h++};for(n=0;t.length>n;n++)if(b)\"'\"!==t.charAt(n)||_(\"'\")?k():b=!1;else switch(t.charAt(n)){case\"d\":v=x(\"d\");break;case\"D\":w(\"D\",d,c);break;case\"o\":y=x(\"o\");break;case\"m\":g=x(\"m\");break;case\"M\":g=w(\"M\",p,f);break;case\"y\":m=x(\"y\");break;case\"@\":r=new Date(x(\"@\")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case\"!\":r=new Date((x(\"!\")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case\"'\":_(\"'\")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\\s+/.test(o)))throw\"Extra/unparsed characters found in date: \"+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw\"Invalid date\";return r},ATOM:\"yy-mm-dd\",COOKIE:\"D, dd M yy\",ISO_8601:\"yy-mm-dd\",RFC_822:\"D, d M y\",RFC_850:\"DD, dd-M-y\",RFC_1036:\"D, d M y\",RFC_1123:\"D, d M yy\",RFC_2822:\"D, d M yy\",RSS:\"D, d M y\",TICKS:\"!\",TIMESTAMP:\"@\",W3C:\"yy-mm-dd\",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return\"\";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=\"\"+t;if(h(e))for(;i>s.length;)s=\"0\"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d=\"\",c=!1;if(t)for(s=0;e.length>s;s++)if(c)\"'\"!==e.charAt(s)||h(\"'\")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case\"d\":d+=l(\"d\",t.getDate(),2);break;case\"D\":d+=u(\"D\",t.getDay(),n,a);break;case\"o\":d+=l(\"o\",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case\"m\":d+=l(\"m\",t.getMonth()+1,2);break;case\"M\":d+=u(\"M\",t.getMonth(),o,r);break;case\"y\":d+=h(\"y\")?t.getFullYear():(10>t.getYear()%100?\"0\":\"\")+t.getYear()%100;break;case\"@\":d+=t.getTime();break;case\"!\":d+=1e4*t.getTime()+this._ticksTo1970;break;case\"'\":h(\"'\")?d+=\"'\":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i=\"\",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)\"'\"!==e.charAt(t)||n(\"'\")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case\"d\":case\"m\":case\"y\":case\"@\":i+=\"0123456789\";break;case\"D\":case\"M\":return null;case\"'\":n(\"'\")?i+=\"'\":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,\"dateFormat\"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?\"\":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,\"defaultDate\"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,\"dateFormat\"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||\"d\"){case\"d\":case\"D\":r+=parseInt(l[1],10);break;case\"w\":case\"W\":r+=7*parseInt(l[1],10);break;case\"m\":case\"M\":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case\"y\":case\"Y\":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||\"\"===i?s:\"string\"==typeof i?a(i):\"number\"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&\"Invalid Date\"==\"\"+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?\"\":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&\"\"===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,\"stepMonths\"),s=\"#\"+t.id.replace(/\\\\\\\\/g,\"\\\\\");t.dpDiv.find(\"[data-handler]\").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,\"M\")},next:function(){e.datepicker._adjustDate(s,+i,\"M\")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute(\"data-month\"),+this.getAttribute(\"data-year\"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,\"M\"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,\"Y\"),!1}};e(this).bind(this.getAttribute(\"data-event\"),t[this.getAttribute(\"data-handler\")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,\"isRTL\"),B=this._get(e,\"showButtonPanel\"),J=this._get(e,\"hideIfNoPrevNext\"),q=this._get(e,\"navigationAsDateFormat\"),K=this._getNumberOfMonths(e),V=this._get(e,\"showCurrentAtPos\"),U=this._get(e,\"stepMonths\"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,\"min\"),$=this._getMinMaxDate(e,\"max\"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,\"prevText\"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='\"+i+\"'><span class='ui-icon ui-icon-circle-triangle-\"+(Y?\"e\":\"w\")+\"'>\"+i+\"</span></a>\":J?\"\":\"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\"+i+\"'><span class='ui-icon ui-icon-circle-triangle-\"+(Y?\"e\":\"w\")+\"'>\"+i+\"</span></a>\",n=this._get(e,\"nextText\"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='\"+n+\"'><span class='ui-icon ui-icon-circle-triangle-\"+(Y?\"w\":\"e\")+\"'>\"+n+\"</span></a>\":J?\"\":\"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\"+n+\"'><span class='ui-icon ui-icon-circle-triangle-\"+(Y?\"w\":\"e\")+\"'>\"+n+\"</span></a>\",o=this._get(e,\"currentText\"),r=this._get(e,\"gotoCurrent\")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?\"\":\"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\"+this._get(e,\"closeText\")+\"</button>\",l=B?\"<div class='ui-datepicker-buttonpane ui-widget-content'>\"+(Y?h:\"\")+(this._isInRange(e,r)?\"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>\"+o+\"</button>\":\"\")+(Y?\"\":h)+\"</div>\":\"\",u=parseInt(this._get(e,\"firstDay\"),10),u=isNaN(u)?0:u,d=this._get(e,\"showWeek\"),c=this._get(e,\"dayNames\"),p=this._get(e,\"dayNamesMin\"),f=this._get(e,\"monthNames\"),m=this._get(e,\"monthNamesShort\"),g=this._get(e,\"beforeShowDay\"),v=this._get(e,\"showOtherMonths\"),y=this._get(e,\"selectOtherMonths\"),b=this._getDefaultDate(e),_=\"\",w=0;K[0]>w;w++){for(k=\"\",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=\" ui-corner-all\",M=\"\",Q){if(M+=\"<div class='ui-datepicker-group\",K[1]>1)switch(T){case 0:M+=\" ui-datepicker-group-first\",S=\" ui-corner-\"+(Y?\"right\":\"left\");break;case K[1]-1:M+=\" ui-datepicker-group-last\",S=\" ui-corner-\"+(Y?\"left\":\"right\");break;default:M+=\" ui-datepicker-group-middle\",S=\"\"}M+=\"'>\"}for(M+=\"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\"+S+\"'>\"+(/all|left/.test(S)&&0===w?Y?a:s:\"\")+(/all|right/.test(S)&&0===w?Y?s:a:\"\")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+\"</div><table class='ui-datepicker-calendar'><thead>\"+\"<tr>\",C=d?\"<th class='ui-datepicker-week-col'>\"+this._get(e,\"weekHeader\")+\"</th>\":\"\",x=0;7>x;x++)N=(x+u)%7,C+=\"<th scope='col'\"+((x+u+6)%7>=5?\" class='ui-datepicker-week-end'\":\"\")+\">\"+\"<span title='\"+c[N]+\"'>\"+p[N]+\"</span></th>\";for(M+=C+\"</tr></thead><tbody>\",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+=\"<tr>\",E=d?\"<td class='ui-datepicker-week-col'>\"+this._get(e,\"calculateWeek\")(z)+\"</td>\":\"\",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,\"\"],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+=\"<td class='\"+((x+u+6)%7>=5?\" ui-datepicker-week-end\":\"\")+(j?\" ui-datepicker-other-month\":\"\")+(z.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?\" \"+this._dayOverClass:\"\")+(W?\" \"+this._unselectableClass+\" ui-state-disabled\":\"\")+(j&&!v?\"\":\" \"+O[1]+(z.getTime()===G.getTime()?\" \"+this._currentClass:\"\")+(z.getTime()===R.getTime()?\" ui-datepicker-today\":\"\"))+\"'\"+(j&&!v||!O[2]?\"\":\" title='\"+O[2].replace(/'/g,\"&#39;\")+\"'\")+(W?\"\":\" data-handler='selectDay' data-event='click' data-month='\"+z.getMonth()+\"' data-year='\"+z.getFullYear()+\"'\")+\">\"+(j&&!v?\"&#xa0;\":W?\"<span class='ui-state-default'>\"+z.getDate()+\"</span>\":\"<a class='ui-state-default\"+(z.getTime()===R.getTime()?\" ui-state-highlight\":\"\")+(z.getTime()===G.getTime()?\" ui-state-active\":\"\")+(j?\" ui-priority-secondary\":\"\")+\"' href='#'>\"+z.getDate()+\"</a>\")+\"</td>\",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+\"</tr>\"}Z++,Z>11&&(Z=0,et++),M+=\"</tbody></table>\"+(Q?\"</div>\"+(K[0]>0&&T===K[1]-1?\"<div class='ui-datepicker-row-break'></div>\":\"\"):\"\"),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,\"changeMonth\"),v=this._get(e,\"changeYear\"),y=this._get(e,\"showMonthAfterYear\"),b=\"<div class='ui-datepicker-title'>\",_=\"\";if(a||!g)_+=\"<span class='ui-datepicker-month'>\"+o[t]+\"</span>\";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+=\"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+=\"<option value='\"+u+\"'\"+(u===t?\" selected='selected'\":\"\")+\">\"+r[u]+\"</option>\");_+=\"</select>\"}if(y||(b+=_+(!a&&g&&v?\"\":\"&#xa0;\")),!e.yearshtml)if(e.yearshtml=\"\",a||!v)b+=\"<span class='ui-datepicker-year'>\"+i+\"</span>\";else{for(d=this._get(e,\"yearRange\").split(\":\"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||\"\")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+=\"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";m>=f;f++)e.yearshtml+=\"<option value='\"+f+\"'\"+(f===i?\" selected='selected'\":\"\")+\">\"+f+\"</option>\";e.yearshtml+=\"</select>\",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,\"yearSuffix\"),y&&(b+=(!a&&g&&v?\"\":\"&#xa0;\")+_),b+=\"</div>\"},_adjustInstDate:function(e,t,i){var s=e.drawYear+(\"Y\"===i?t:0),n=e.drawMonth+(\"M\"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+(\"D\"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),(\"M\"===i||\"Y\"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,\"min\"),s=this._getMinMaxDate(e,\"max\"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,\"onChangeMonthYear\");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,\"numberOfMonths\");return null==t?[1,1]:\"number\"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+\"Date\"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,\"min\"),a=this._getMinMaxDate(e,\"max\"),o=null,r=null,h=this._get(e,\"yearRange\");return h&&(i=h.split(\":\"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\\-].*/)&&(o+=s),i[1].match(/[+\\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,\"shortYearCutoff\");return t=\"string\"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,\"dayNamesShort\"),dayNames:this._get(e,\"dayNames\"),monthNamesShort:this._get(e,\"monthNamesShort\"),monthNames:this._get(e,\"monthNames\")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?\"object\"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,\"dateFormat\"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e(\"#\"+e.datepicker._mainDivId).length&&e(\"body\").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return\"string\"!=typeof t||\"isDisabled\"!==t&&\"getDate\"!==t&&\"widget\"!==t?\"option\"===t&&2===arguments.length&&\"string\"==typeof arguments[1]?e.datepicker[\"_\"+t+\"Datepicker\"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){\"string\"==typeof t?e.datepicker[\"_\"+t+\"Datepicker\"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker[\"_\"+t+\"Datepicker\"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version=\"1.11.4\",e.datepicker,e.widget(\"ui.draggable\",e.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"drag\",options:{addClasses:!0,appendTo:\"parent\",axis:!1,connectToSortable:!1,containment:!1,cursor:\"auto\",cursorAt:!1,grid:!1,handle:!1,helper:\"original\",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:\"default\",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:\"both\",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){\"original\"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass(\"ui-draggable\"),this.options.disabled&&this.element.addClass(\"ui-draggable-disabled\"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),\"handle\"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(\".ui-draggable-dragging\")?(this.destroyOnClear=!0,void 0):(this.element.removeClass(\"ui-draggable ui-draggable-dragging ui-draggable-disabled\"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(\".ui-resizable-handle\").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?\"iframe\":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e(\"<div>\").css(\"position\",\"absolute\").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&\"body\"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass(\"ui-draggable-dragging\"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css(\"position\"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return\"fixed\"===e(this).css(\"position\")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger(\"start\",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo(\"absolute\"),!i){var s=this._uiHash();if(this._trigger(\"drag\",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+\"px\",this.helper[0].style.top=this.position.top+\"px\",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),\"invalid\"===this.options.revert&&!s||\"valid\"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger(\"stop\",t)!==!1&&i._clear()}):this._trigger(\"stop\",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(\".ui-draggable-dragging\")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass(\"ui-draggable-handle\")},_removeHandleClassName:function(){this.handleElement.removeClass(\"ui-draggable-handle\")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):\"clone\"===i.helper?this.element.clone().removeAttr(\"id\"):this.element;return n.parents(\"body\").length||n.appendTo(\"parent\"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css(\"position\"))||n.css(\"position\",\"absolute\"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css(\"position\"))||(this.element[0].style.position=\"relative\")},_adjustOffsetFromHelper:function(t){\"string\"==typeof t&&(t=t.split(\" \")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),\"left\"in t&&(this.offset.click.left=t.left+this.margins.left),\"right\"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),\"top\"in t&&(this.offset.click.top=t.top+this.margins.top),\"bottom\"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:t.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css(\"top\"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css(\"left\"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css(\"marginLeft\"),10)||0,top:parseInt(this.element.css(\"marginTop\"),10)||0,right:parseInt(this.element.css(\"marginRight\"),10)||0,bottom:parseInt(this.element.css(\"marginBottom\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?\"window\"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):\"document\"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):(\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css(\"overflow\")),this.containment=[(parseInt(i.css(\"borderLeftWidth\"),10)||0)+(parseInt(i.css(\"paddingLeft\"),10)||0),(parseInt(i.css(\"borderTopWidth\"),10)||0)+(parseInt(i.css(\"paddingTop\"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css(\"borderRightWidth\"),10)||0)-(parseInt(i.css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css(\"borderBottomWidth\"),10)||0)-(parseInt(i.css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)\n},_convertPositionTo:function(e,t){t||(t=this.position);var i=\"absolute\"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-(\"fixed\"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),\"y\"===o.axis&&(h=this.originalPageX),\"x\"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass(\"ui-draggable-dragging\"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){\"y\"!==this.options.axis&&\"auto\"!==this.helper.css(\"right\")&&(this.helper.width(this.helper.width()),this.helper.css(\"right\",\"auto\")),\"x\"!==this.options.axis&&\"auto\"!==this.helper.css(\"bottom\")&&(this.helper.height(this.helper.height()),this.helper.css(\"bottom\",\"auto\"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo(\"absolute\"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add(\"draggable\",\"connectToSortable\",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable(\"instance\");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger(\"activate\",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css(\"position\"),top:e.placeholder.css(\"top\"),left:e.placeholder.css(\"left\")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger(\"deactivate\",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data(\"ui-sortable-item\",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger(\"toSortable\",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger(\"out\",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger(\"fromSortable\",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add(\"draggable\",\"cursor\",{start:function(t,i,s){var n=e(\"body\"),a=s.options;n.css(\"cursor\")&&(a._cursor=n.css(\"cursor\")),n.css(\"cursor\",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e(\"body\").css(\"cursor\",n._cursor)}}),e.ui.plugin.add(\"draggable\",\"opacity\",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css(\"opacity\")&&(a._opacity=n.css(\"opacity\")),n.css(\"opacity\",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css(\"opacity\",n._opacity)}}),e.ui.plugin.add(\"draggable\",\"scroll\",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&\"HTML\"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&\"HTML\"!==o.tagName?(n.axis&&\"x\"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&\"y\"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&\"x\"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&\"y\"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add(\"draggable\",\"snap\",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||\":data(ui-draggable)\":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):(\"inner\"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo(\"relative\",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo(\"relative\",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:l}).left)),p=n||a||o||r,\"outer\"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo(\"relative\",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo(\"relative\",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo(\"relative\",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add(\"draggable\",\"stack\",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css(\"zIndex\"),10)||0)-(parseInt(e(i).css(\"zIndex\"),10)||0)});o.length&&(n=parseInt(e(o[0]).css(\"zIndex\"),10)||0,e(o).each(function(t){e(this).css(\"zIndex\",n+t)}),this.css(\"zIndex\",n+o.length))}}),e.ui.plugin.add(\"draggable\",\"zIndex\",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css(\"zIndex\")&&(a._zIndex=n.css(\"zIndex\")),n.css(\"zIndex\",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css(\"zIndex\",n._zIndex)}}),e.ui.draggable,e.widget(\"ui.resizable\",e.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"resize\",options:{alsoResize:!1,animate:!1,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:\"e,s,se\",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if(\"hidden\"===e(t).css(\"overflow\"))return!1;var s=i&&\"left\"===i?\"scrollLeft\":\"scrollTop\",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass(\"ui-resizable\"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||\"ui-resizable-helper\":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e(\"<div class='ui-wrapper' style='overflow: hidden;'></div>\").css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")})),this.element=this.element.parent().data(\"ui-resizable\",this.element.resizable(\"instance\")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css(\"resize\"),this.originalElement.css(\"resize\",\"none\"),this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"})),this.originalElement.css({margin:this.originalElement.css(\"margin\")}),this._proportionallyResize()),this.handles=r.handles||(e(\".ui-resizable-handle\",this.element).length?{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"}:\"e,s,se\"),this._handles=e(),this.handles.constructor===String)for(\"all\"===this.handles&&(this.handles=\"n,e,s,w,se,sw,ne,nw\"),t=this.handles.split(\",\"),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a=\"ui-resizable-\"+s,n=e(\"<div class='ui-resizable-handle \"+a+\"'></div>\"),n.css({zIndex:r.zIndex}),\"se\"===s&&n.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\"),this.handles[s]=\".ui-resizable-\"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=[\"padding\",/ne|nw|n/.test(i)?\"Top\":/se|sw|s/.test(i)?\"Bottom\":/^e$/.test(i)?\"Right\":\"Left\"].join(\"\"),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(\".ui-resizable-handle\")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:\"se\")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass(\"ui-resizable-autohide\").mouseenter(function(){r.disabled||(e(this).removeClass(\"ui-resizable-autohide\"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass(\"ui-resizable-autohide\"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").removeData(\"ui-resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css(\"position\"),width:t.outerWidth(),height:t.outerHeight(),top:t.css(\"top\"),left:t.css(\"left\")}).insertAfter(t),t.remove()),this.originalElement.css(\"resize\",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css(\"left\")),s=this._num(this.helper.css(\"top\")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=\"number\"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(\".ui-resizable-\"+this.axis).css(\"cursor\"),e(\"body\").css(\"cursor\",\"auto\"===n?this.axis+\"-resize\":n),o.addClass(\"ui-resizable-resizing\"),this._propagate(\"start\",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate(\"resize\",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger(\"resize\",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],\"left\")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css(\"left\"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css(\"top\"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e(\"body\").css(\"cursor\",\"auto\"),this.element.removeClass(\"ui-resizable-resizing\"),this._propagate(\"stop\",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+\"px\"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+\"px\"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+\"px\"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+\"px\"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),\"sw\"===s&&(e.left=t.left+(i.width-e.width),e.top=null),\"nw\"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css(\"borderTopWidth\"),e.css(\"borderRightWidth\"),e.css(\"borderBottomWidth\"),e.css(\"borderLeftWidth\")],n=[e.css(\"paddingTop\"),e.css(\"paddingRight\"),e.css(\"paddingBottom\"),e.css(\"paddingLeft\")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e(\"<div style='overflow:hidden;'></div>\"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:\"absolute\",left:this.elementOffset.left+\"px\",top:this.elementOffset.top+\"px\",zIndex:++i.zIndex}),this.helper.appendTo(\"body\").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),\"resize\"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add(\"resizable\",\"animate\",{stop:function(t){var i=e(this).resizable(\"instance\"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],\"left\")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css(\"left\"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css(\"top\"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css(\"width\"),10),height:parseInt(i.element.css(\"height\"),10),top:parseInt(i.element.css(\"top\"),10),left:parseInt(i.element.css(\"left\"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate(\"resize\",t)}})}}),e.ui.plugin.add(\"resizable\",\"containment\",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable(\"instance\"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(e,s){i[e]=h._num(t.css(\"padding\"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,\"left\")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable(\"instance\"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css(\"position\"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css(\"position\")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable(\"instance\"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css(\"position\"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css(\"position\"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(){var t=e(this).resizable(\"instance\"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data(\"ui-resizable-alsoresize\",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css(\"left\"),10),top:parseInt(t.css(\"top\"),10)})})},resize:function(t,i){var s=e(this).resizable(\"instance\"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data(\"ui-resizable-alsoresize\"),n={},a=t.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];e.each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData(\"resizable-alsoresize\")}}),e.ui.plugin.add(\"resizable\",\"ghost\",{start:function(){var t=e(this).resizable(\"instance\"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:\"block\",position:\"relative\",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(\"string\"==typeof i.ghost?i.ghost:\"\"),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable(\"instance\");t.ghost&&t.ghost.css({position:\"relative\",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable(\"instance\");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add(\"resizable\",\"grid\",{resize:function(){var t,i=e(this).resizable(\"instance\"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h=\"number\"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget(\"ui.dialog\",{version:\"1.11.4\",options:{appendTo:\"body\",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:\"Close\",dialogClass:\"\",draggable:!0,hide:null,height:\"auto\",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:\"center\",at:\"center\",of:window,collision:\"fit\",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css(\"top\",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr(\"title\"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr(\"title\").addClass(\"ui-dialog-content ui-widget-content\").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||\"body\").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass(\"ui-dialog-content ui-widget-content\").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr(\"title\",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger(\"beforeClose\",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(\":focusable\").focus().length)try{i=this.document[0].activeElement,i&&\"body\"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger(\"close\",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(\".ui-front:visible\").map(function(){return+e(this).css(\"z-index\")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css(\"z-index\")&&(this.uiDialog.css(\"z-index\",a+1),s=!0),s&&!i&&this._trigger(\"focus\",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css(\"z-index\",this.uiDialog.css(\"z-index\")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger(\"focus\")}),this._makeFocusTarget(),this._trigger(\"open\"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find(\"[autofocus]\")),e.length||(e=this.element.find(\":tabbable\")),e.length||(e=this.uiDialogButtonPane.find(\":tabbable\")),e.length||(e=this.uiDialogTitlebarClose.filter(\":tabbable\")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e(\"<div>\").addClass(\"ui-dialog ui-widget ui-widget-content ui-corner-all ui-front \"+this.options.dialogClass).hide().attr({tabIndex:-1,role:\"dialog\"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;\nif(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(\":tabbable\"),s=i.filter(\":first\"),n=i.filter(\":last\");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find(\"[aria-describedby]\").length||this.uiDialog.attr({\"aria-describedby\":this.element.uniqueId().attr(\"id\")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e(\"<div>\").addClass(\"ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix\").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(\".ui-dialog-titlebar-close\")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e(\"<button type='button'></button>\").button({label:this.options.closeText,icons:{primary:\"ui-icon-closethick\"},text:!1}).addClass(\"ui-dialog-titlebar-close\").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e(\"<span>\").uniqueId().addClass(\"ui-dialog-title\").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({\"aria-labelledby\":t.attr(\"id\")})},_title:function(e){this.options.title||e.html(\"&#160;\"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e(\"<div>\").addClass(\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\"),this.uiButtonSet=e(\"<div>\").addClass(\"ui-dialog-buttonset\").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass(\"ui-dialog-buttons\"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:\"button\"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e(\"<button></button>\",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass(\"ui-dialog-buttons\"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:\".ui-dialog-content, .ui-dialog-titlebar-close\",handle:\".ui-dialog-titlebar\",containment:\"document\",start:function(s,n){e(this).addClass(\"ui-dialog-dragging\"),i._blockFrames(),i._trigger(\"dragStart\",s,t(n))},drag:function(e,s){i._trigger(\"drag\",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:\"left top\",at:\"left\"+(o>=0?\"+\":\"\")+o+\" \"+\"top\"+(r>=0?\"+\":\"\")+r,of:i.window},e(this).removeClass(\"ui-dialog-dragging\"),i._unblockFrames(),i._trigger(\"dragStop\",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css(\"position\"),o=\"string\"==typeof n?n:\"n,e,s,w,se,sw,ne,nw\";this.uiDialog.resizable({cancel:\".ui-dialog-content\",containment:\"document\",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass(\"ui-dialog-resizing\"),i._blockFrames(),i._trigger(\"resizeStart\",s,t(n))},resize:function(e,s){i._trigger(\"resize\",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:\"left top\",at:\"left\"+(r>=0?\"+\":\"\")+r+\" \"+\"top\"+(h>=0?\"+\":\"\")+h,of:i.window},e(this).removeClass(\"ui-dialog-resizing\"),i._unblockFrames(),i._trigger(\"resizeStop\",n,t(a))}}).css(\"position\",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data(\"ui-dialog-instances\");return e||(e=[],this.document.data(\"ui-dialog-instances\",e)),e},_minHeight:function(){var e=this.options;return\"auto\"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(\":visible\");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(\":data(ui-resizable)\")&&this.uiDialog.resizable(\"option\",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;\"dialogClass\"===e&&n.removeClass(this.options.dialogClass).addClass(t),\"disabled\"!==e&&(this._super(e,t),\"appendTo\"===e&&this.uiDialog.appendTo(this._appendTo()),\"buttons\"===e&&this._createButtons(),\"closeText\"===e&&this.uiDialogTitlebarClose.button({label:\"\"+t}),\"draggable\"===e&&(i=n.is(\":data(ui-draggable)\"),i&&!t&&n.draggable(\"destroy\"),!i&&t&&this._makeDraggable()),\"position\"===e&&this._position(),\"resizable\"===e&&(s=n.is(\":data(ui-resizable)\"),s&&!t&&n.resizable(\"destroy\"),s&&\"string\"==typeof t&&n.resizable(\"option\",\"handles\",t),s||t===!1||this._makeResizable()),\"title\"===e&&this._title(this.uiDialogTitlebar.find(\".ui-dialog-title\")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:\"auto\",minHeight:0,maxHeight:\"none\",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:\"auto\",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i=\"number\"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):\"none\",\"auto\"===s.height?this.element.css({minHeight:t,maxHeight:i,height:\"auto\"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(\":data(ui-resizable)\")&&this.uiDialog.resizable(\"option\",\"minHeight\",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find(\"iframe\").map(function(){var t=e(this);return e(\"<div>\").css({position:\"absolute\",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(\".ui-dialog\").length?!0:!!e(t.target).closest(\".ui-datepicker\").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data(\"ui-dialog-overlays\")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e(\"<div>\").addClass(\"ui-widget-overlay ui-front\").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:\"_keepFocus\"}),this.document.data(\"ui-dialog-overlays\",(this.document.data(\"ui-dialog-overlays\")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data(\"ui-dialog-overlays\")-1;e?this.document.data(\"ui-dialog-overlays\",e):this.document.unbind(\"focusin\").removeData(\"ui-dialog-overlays\"),this.overlay.remove(),this.overlay=null}}}),e.widget(\"ui.droppable\",{version:\"1.11.4\",widgetEventPrefix:\"drop\",options:{accept:\"*\",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:\"default\",tolerance:\"intersect\",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass(\"ui-droppable\")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass(\"ui-droppable ui-droppable-disabled\")},_setOption:function(t,i){if(\"accept\"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if(\"scope\"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger(\"activate\",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger(\"deactivate\",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger(\"over\",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger(\"out\",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(\":data(ui-droppable)\").not(\".ui-draggable-dragging\").each(function(){var i=e(this).droppable(\"instance\");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger(\"drop\",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case\"fit\":return a>=l&&d>=r&&o>=u&&c>=h;case\"intersect\":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case\"pointer\":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case\"touch\":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{\"default\":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(\":data(ui-droppable)\").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible=\"none\"!==a[s].element.css(\"display\"),a[s].visible&&(\"mousedown\"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil(\"body\").bind(\"scroll.droppable\",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?\"isout\":o&&!this.isover?\"isover\":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(\":data(ui-droppable)\").filter(function(){return e(this).droppable(\"instance\").options.scope===n}),a.length&&(s=e(a[0]).droppable(\"instance\"),s.greedyChild=\"isover\"===r)),s&&\"isover\"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this[\"isout\"===r?\"isover\":\"isout\"]=!1,this[\"isover\"===r?\"_over\":\"_out\"].call(this,i),s&&\"isout\"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil(\"body\").unbind(\"scroll.droppable\"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y=\"ui-effects-\",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||\"rgba\";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?(\"0,0,0,0\"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o=\"backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",r=/^([\\-+])=\\s*(\\d+\\.?\\d*)/,h=[{re:/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,space:\"hsla\",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:\"byte\"},green:{idx:1,type:\"byte\"},blue:{idx:2,type:\"byte\"}}},hsla:{props:{hue:{idx:0,type:\"degrees\"},saturation:{idx:1,type:\"percent\"},lightness:{idx:2,type:\"percent\"}}}},d={\"byte\":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e(\"<p>\")[0],f=e.each;p.style.cssText=\"background-color:rgba(1,1,1,.5)\",c.rgba=p.style.backgroundColor.indexOf(\"rgba\")>-1,f(u,function(e,t){t.cache=\"_\"+e,t.props.alpha={idx:3,type:\"percent\",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c=\"array\"),\"string\"===c?this.parse(s(n)||a._default):\"array\"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):\"object\"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if(\"alpha\"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l(\"transparent\"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t=\"rgba(\",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t=\"rgb(\"),t+i.join()+\")\"},toHslaString:function(){var t=\"hsla(\",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+\"%\"),e});return 1===i[3]&&(i.pop(),t=\"hsl(\"),t+i.join()+\")\"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),\"#\"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?\"0\"+e:e}).join(\"\")},toString:function(){return 0===this._rgba[3]?\"transparent\":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d=\"array\"===r||\"object\"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d[\"object\"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h=\"alpha\"===t?this._hsla?\"hsla\":\"rgba\":s,l=this[h](),u=l[i.idx];return\"undefined\"===o?u:(\"function\"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:(\"string\"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*(\"+\"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(\" \");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r=\"\";if(\"transparent\"!==n&&(\"string\"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o=\"backgroundColor\"===i?t.parentNode:t;(\"\"===r||\"transparent\"===r)&&o&&o.style;)try{r=e.css(o,\"backgroundColor\"),o=o.parentNode}catch(h){}n=n.blend(r&&\"transparent\"!==r?r:\"_default\")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f([\"Top\",\"Right\",\"Bottom\",\"Left\"],function(i,s){t[\"border\"+s+\"Color\"]=e}),t}},a=e.Color.names={aqua:\"#00ffff\",black:\"#000000\",blue:\"#0000ff\",fuchsia:\"#ff00ff\",gray:\"#808080\",green:\"#008000\",lime:\"#00ff00\",maroon:\"#800000\",navy:\"#000080\",olive:\"#808000\",purple:\"#800080\",red:\"#ff0000\",silver:\"#c0c0c0\",teal:\"#008080\",white:\"#ffffff\",yellow:\"#ffff00\",transparent:[null,null,null,0],_default:\"#ffffff\"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],\"string\"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)\"string\"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=[\"add\",\"remove\",\"toggle\"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each([\"borderLeftStyle\",\"borderRightStyle\",\"borderBottomStyle\",\"borderTopStyle\"],function(t,i){e.fx.step[i]=function(e){(\"none\"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr(\"class\")||\"\",l=h.children?o.find(\"*\").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+\"Class\"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr(\"class\",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,\"\")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return\"boolean\"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),(\"number\"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:\"number\"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||\"number\"==typeof t||e.fx.speeds[t]?!0:\"string\"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:\"object\"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:\"1.11.4\",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=\"\"),e.css(t[s],i))},setMode:function(e,t){return\"toggle\"===t&&(t=e.is(\":hidden\")?\"show\":\"hide\"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case\"top\":i=0;break;case\"middle\":i=.5;break;case\"bottom\":i=1;break;default:i=e[0]/t.height}switch(e[1]){case\"left\":s=0;break;case\"center\":s=.5;break;case\"right\":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(\".ui-effects-wrapper\"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),\"float\":t.css(\"float\")},s=e(\"<div></div>\").addClass(\"ui-effects-wrapper\").css({fontSize:\"100%\",background:\"transparent\",border:\"none\",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),\"static\"===t.css(\"position\")?(s.css({position:\"relative\"}),t.css({position:\"relative\"})):(e.extend(i,{position:t.css(\"position\"),zIndex:t.css(\"z-index\")}),e.each([\"top\",\"left\",\"bottom\",\"right\"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]=\"auto\")}),t.css({position:\"relative\",top:0,left:0,right:\"auto\",bottom:\"auto\"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(\".ui-effects-wrapper\")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(\":hidden\")?\"hide\"===r:\"show\"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||\"fx\",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode=\"show\",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode=\"hide\",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||\"boolean\"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode=\"toggle\",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each([\"em\",\"px\",\"%\",\"pt\"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each([\"Quad\",\"Cubic\",\"Quart\",\"Quint\",\"Expo\"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing[\"easeIn\"+t]=i,e.easing[\"easeOut\"+t]=function(e){return 1-i(1-e)},e.easing[\"easeInOut\"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],u=e.effects.setMode(o,t.mode||\"hide\"),d=t.direction||\"up\",c=r.test(d),p=c?\"height\":\"width\",f=c?\"top\":\"left\",m=h.test(d),g={},v=\"show\"===u;o.parent().is(\".ui-effects-wrapper\")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:\"hidden\"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?\"bottom\":\"right\",0).css(c?\"top\":\"left\",\"auto\").css({position:\"absolute\"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){\"hide\"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],h=e.effects.setMode(o,t.mode||\"effect\"),l=\"hide\"===h,u=\"show\"===h,d=t.direction||\"up\",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v=\"up\"===d||\"down\"===d?\"top\":\"left\",y=\"up\"===d||\"left\"===d,b=o.queue(),_=b.length;for((u||l)&&r.push(\"opacity\"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o[\"top\"===v?\"outerHeight\":\"outerWidth\"]()/3),u&&(a={opacity:1},a[v]=0,o.css(\"opacity\",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?\"-=\":\"+=\")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?\"-=\":\"+=\")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],h=e.effects.setMode(o,t.mode||\"hide\"),l=\"show\"===h,u=t.direction||\"vertical\",d=\"vertical\"===u,c=d?\"height\":\"width\",p=d?\"top\":\"left\",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:\"hidden\"}),n=\"IMG\"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"opacity\",\"height\",\"width\"],o=e.effects.setMode(n,t.mode||\"hide\"),r=\"show\"===o,h=t.direction||\"left\",l=\"up\"===h||\"down\"===h?\"top\":\"left\",u=\"up\"===h||\"left\"===h?\"pos\":\"neg\",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n[\"top\"===l?\"outerHeight\":\"outerWidth\"](!0)/2,r&&n.css(\"opacity\",0).css(l,\"pos\"===u?-s:s),d[l]=(r?\"pos\"===u?\"+=\":\"-=\":\"pos\"===u?\"-=\":\"+=\")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){\"hide\"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:\"visible\"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||\"hide\"),m=\"show\"===f,g=p.show().css(\"visibility\",\"hidden\").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo(\"body\").wrap(\"<div></div>\").css({position:\"absolute\",visibility:\"visible\",left:-o*v,top:-a*y}).parent().addClass(\"ui-effects-explode\").css({position:\"absolute\",overflow:\"hidden\",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||\"toggle\");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],r=e.effects.setMode(a,t.mode||\"hide\"),h=\"show\"===r,l=\"hide\"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?[\"width\",\"height\"]:[\"height\",\"width\"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:\"hidden\"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=[\"backgroundImage\",\"backgroundColor\",\"opacity\"],a=e.effects.setMode(s,t.mode||\"show\"),o={backgroundColor:s.css(\"backgroundColor\")};\"hide\"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:\"none\",backgroundColor:t.color||\"#ffff99\"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){\"hide\"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"width\",\"height\",\"overflow\",\"opacity\"],h=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"overflow\",\"opacity\"],l=[\"width\",\"height\",\"overflow\"],u=[\"fontSize\"],d=[\"borderTopWidth\",\"borderBottomWidth\",\"paddingTop\",\"paddingBottom\"],c=[\"borderLeftWidth\",\"borderRightWidth\",\"paddingLeft\",\"paddingRight\"],p=e.effects.setMode(o,t.mode||\"effect\"),f=t.restore||\"effect\"!==p,m=t.scale||\"both\",g=t.origin||[\"middle\",\"center\"],v=o.css(\"position\"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};\"show\"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},\"toggle\"===t.mode&&\"show\"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||(\"show\"===p?b:s),o.to=t.to||(\"hide\"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},(\"box\"===m||\"both\"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),(\"content\"===m||\"both\"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css(\"overflow\",\"hidden\").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),(\"content\"===m||\"both\"===m)&&(d=d.concat([\"marginTop\",\"marginBottom\"]).concat(u),c=c.concat([\"marginLeft\",\"marginRight\"]),l=r.concat(d).concat(c),o.find(\"*[width]\").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};\nf&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css(\"opacity\",o.from.opacity),\"hide\"===p&&o.hide(),e.effects.restore(o,y),f||(\"static\"===v?o.css({position:\"relative\",top:o.to.top,left:o.to.left}):e.each([\"top\",\"left\"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return\"auto\"===i?n+\"px\":s+n+\"px\"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||\"effect\"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:\"hide\"===a?0:100),r=t.direction||\"both\",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:\"horizontal\"!==r?o/100:1,x:\"vertical\"!==r?o/100:1};n.effect=\"size\",n.queue=!1,n.complete=i,\"effect\"!==a&&(n.origin=h||[\"middle\",\"center\"],n.restore=!0),n.from=t.from||(\"show\"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&(\"show\"===a&&(n.from.opacity=0,n.to.opacity=1),\"hide\"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||\"hide\"),a=\"hide\"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:\"scale\",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||\"show\"),o=\"show\"===a,r=\"hide\"===a,h=o||\"hide\"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(\":visible\"))&&(n.css(\"opacity\",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"height\",\"width\"],o=e.effects.setMode(n,t.mode||\"effect\"),r=t.direction||\"left\",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c=\"up\"===r||\"down\"===r?\"top\":\"left\",p=\"up\"===r||\"left\"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?\"-=\":\"+=\")+h,m[c]=(p?\"+=\":\"-=\")+2*h,g[c]=(p?\"-=\":\"+=\")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){\"hide\"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=[\"position\",\"top\",\"bottom\",\"left\",\"right\",\"width\",\"height\"],o=e.effects.setMode(n,t.mode||\"show\"),r=\"show\"===o,h=t.direction||\"left\",l=\"up\"===h||\"down\"===h?\"top\":\"left\",u=\"up\"===h||\"left\"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n[\"top\"===l?\"outerHeight\":\"outerWidth\"](!0),e.effects.createWrapper(n).css({overflow:\"hidden\"}),r&&n.css(l,u?isNaN(s)?\"-\"+s:-s:s),d[l]=(r?u?\"+=\":\"-=\":u?\"-=\":\"+=\")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){\"hide\"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a=\"fixed\"===n.css(\"position\"),o=e(\"body\"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e(\"<div class='ui-effects-transfer'></div>\").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?\"fixed\":\"absolute\"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget(\"ui.progressbar\",{version:\"1.11.4\",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass(\"ui-progressbar ui-widget ui-widget-content ui-corner-all\").attr({role:\"progressbar\",\"aria-valuemin\":this.min}),this.valueDiv=e(\"<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>\").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass(\"ui-progressbar ui-widget ui-widget-content ui-corner-all\").removeAttr(\"role\").removeAttr(\"aria-valuemin\").removeAttr(\"aria-valuemax\").removeAttr(\"aria-valuenow\"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,\"number\"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){\"max\"===e&&(t=Math.max(this.min,t)),\"disabled\"===e&&this.element.toggleClass(\"ui-state-disabled\",!!t).attr(\"aria-disabled\",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass(\"ui-corner-right\",t===this.options.max).width(i.toFixed(0)+\"%\"),this.element.toggleClass(\"ui-progressbar-indeterminate\",this.indeterminate),this.indeterminate?(this.element.removeAttr(\"aria-valuenow\"),this.overlayDiv||(this.overlayDiv=e(\"<div class='ui-progressbar-overlay'></div>\").appendTo(this.valueDiv))):(this.element.attr({\"aria-valuemax\":this.options.max,\"aria-valuenow\":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger(\"change\")),t===this.options.max&&this._trigger(\"complete\")}}),e.widget(\"ui.selectable\",e.ui.mouse,{version:\"1.11.4\",options:{appendTo:\"body\",autoRefresh:!0,distance:0,filter:\"*\",tolerance:\"touch\",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass(\"ui-selectable\"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass(\"ui-selectee\"),t.each(function(){var t=e(this),i=t.offset();e.data(this,\"selectable-item\",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass(\"ui-selected\"),selecting:t.hasClass(\"ui-selecting\"),unselecting:t.hasClass(\"ui-unselecting\")})})},this.refresh(),this.selectees=t.addClass(\"ui-selectee\"),this._mouseInit(),this.helper=e(\"<div class='ui-selectable-helper'></div>\")},_destroy:function(){this.selectees.removeClass(\"ui-selectee\").removeData(\"selectable-item\"),this.element.removeClass(\"ui-selectable ui-selectable-disabled\"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger(\"start\",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(\".ui-selected\").each(function(){var s=e.data(this,\"selectable-item\");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass(\"ui-selected\"),s.selected=!1,s.$element.addClass(\"ui-unselecting\"),s.unselecting=!0,i._trigger(\"unselecting\",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,\"selectable-item\");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass(\"ui-selected\"),n.$element.removeClass(s?\"ui-unselecting\":\"ui-selected\").addClass(s?\"ui-selecting\":\"ui-unselecting\"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger(\"selecting\",t,{selecting:n.element}):i._trigger(\"unselecting\",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,\"selectable-item\"),l=!1;i&&i.element!==s.element[0]&&(\"touch\"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):\"fit\"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass(\"ui-selected\"),i.selected=!1),i.unselecting&&(i.$element.removeClass(\"ui-unselecting\"),i.unselecting=!1),i.selecting||(i.$element.addClass(\"ui-selecting\"),i.selecting=!0,s._trigger(\"selecting\",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass(\"ui-selecting\"),i.selecting=!1,i.$element.addClass(\"ui-selected\"),i.selected=!0):(i.$element.removeClass(\"ui-selecting\"),i.selecting=!1,i.startselected&&(i.$element.addClass(\"ui-unselecting\"),i.unselecting=!0),s._trigger(\"unselecting\",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass(\"ui-selected\"),i.selected=!1,i.$element.addClass(\"ui-unselecting\"),i.unselecting=!0,s._trigger(\"unselecting\",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(\".ui-unselecting\",this.element[0]).each(function(){var s=e.data(this,\"selectable-item\");s.$element.removeClass(\"ui-unselecting\"),s.unselecting=!1,s.startselected=!1,i._trigger(\"unselected\",t,{unselected:s.element})}),e(\".ui-selecting\",this.element[0]).each(function(){var s=e.data(this,\"selectable-item\");s.$element.removeClass(\"ui-selecting\").addClass(\"ui-selected\"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger(\"selected\",t,{selected:s.element})}),this._trigger(\"stop\",t),this.helper.remove(),!1}}),e.widget(\"ui.selectmenu\",{version:\"1.11.4\",defaultElement:\"<select>\",options:{appendTo:null,disabled:null,icons:{button:\"ui-icon-triangle-1-s\"},position:{my:\"left top\",at:\"left bottom\",collision:\"none\"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr(\"id\");this.ids={element:e,button:e+\"-button\",menu:e+\"-menu\"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this;this.label=e(\"label[for='\"+this.ids.element+\"']\").attr(\"for\",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e(\"<span>\",{\"class\":\"ui-selectmenu-button ui-widget ui-state-default ui-corner-all\",tabindex:this.options.disabled?-1:0,id:this.ids.button,role:\"combobox\",\"aria-expanded\":\"false\",\"aria-autocomplete\":\"list\",\"aria-owns\":this.ids.menu,\"aria-haspopup\":\"true\"}).insertAfter(this.element),e(\"<span>\",{\"class\":\"ui-icon \"+this.options.icons.button}).prependTo(this.button),this.buttonText=e(\"<span>\",{\"class\":\"ui-selectmenu-text\"}).appendTo(this.button),this._setText(this.buttonText,this.element.find(\"option:selected\").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one(\"focusin\",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e(\"<ul>\",{\"aria-hidden\":\"true\",\"aria-labelledby\":this.ids.button,id:this.ids.menu}),this.menuWrap=e(\"<div>\",{\"class\":\"ui-selectmenu-menu ui-front\"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:\"listbox\",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data(\"ui-selectmenu-item\"),e)},focus:function(e,i){var s=i.item.data(\"ui-selectmenu-item\");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger(\"focus\",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr(\"aria-activedescendant\",t.menuItems.eq(s.index).attr(\"id\"))}}).menu(\"instance\"),this.menu.addClass(\"ui-corner-bottom\").removeClass(\"ui-corner-all\"),this.menuInstance._off(this.menu,\"mouseleave\"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find(\"option\");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find(\"li\").not(\".ui-selectmenu-optgroup\"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data(\"ui-selectmenu-item\")),this._setOption(\"disabled\",this.element.prop(\"disabled\")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(\".ui-state-focus\").removeClass(\"ui-state-focus\"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger(\"open\",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger(\"close\",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n=\"\";e.each(i,function(i,a){a.optgroup!==n&&(e(\"<li>\",{\"class\":\"ui-selectmenu-optgroup ui-menu-divider\"+(a.element.parent(\"optgroup\").prop(\"disabled\")?\" ui-state-disabled\":\"\"),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data(\"ui-selectmenu-item\",t)},_renderItem:function(t,i){var s=e(\"<li>\");return i.disabled&&s.addClass(\"ui-state-disabled\"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(\"&#160;\")},_move:function(e,t){var i,s,n=\".ui-menu-item\";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=\":not(.ui-state-disabled)\"),s=\"first\"===e||\"last\"===e?i[\"first\"===e?\"prevAll\":\"nextAll\"](n).eq(-1):i[e+\"All\"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?\"close\":\"open\"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(\".ui-selectmenu-menu, #\"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move(\"prev\",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move(\"next\",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move(\"prev\",t);break;case e.ui.keyCode.RIGHT:this._move(\"next\",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move(\"first\",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move(\"last\",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass(\"ui-state-disabled\")||this._select(t.data(\"ui-selectmenu-item\"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger(\"select\",t,{item:e}),e.index!==i&&this._trigger(\"change\",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr(\"id\");this.button.attr({\"aria-labelledby\":t,\"aria-activedescendant\":t}),this.menu.attr(\"aria-activedescendant\",t)},_setOption:function(e,t){\"icons\"===e&&this.button.find(\"span.ui-icon\").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),\"appendTo\"===e&&this.menuWrap.appendTo(this._appendTo()),\"disabled\"===e&&(this.menuInstance.option(\"disabled\",t),this.button.toggleClass(\"ui-state-disabled\",t).attr(\"aria-disabled\",t),this.element.prop(\"disabled\",t),t?(this.button.attr(\"tabindex\",-1),this.close()):this.button.attr(\"tabindex\",0)),\"width\"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(\".ui-front\")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass(\"ui-corner-top\",this.isOpen).toggleClass(\"ui-corner-all\",!this.isOpen).attr(\"aria-expanded\",this.isOpen),this.menuWrap.toggleClass(\"ui-selectmenu-open\",this.isOpen),this.menu.attr(\"aria-hidden\",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width(\"\").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop(\"disabled\")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent(\"optgroup\");i.push({element:n,index:t,value:n.val(),label:n.text(),optgroup:a.attr(\"label\")||\"\",disabled:a.prop(\"disabled\")||n.prop(\"disabled\")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr(\"for\",this.ids.element)}}),e.widget(\"ui.slider\",e.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"slide\",options:{animate:!1,distance:0,max:100,min:0,orientation:\"horizontal\",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass(\"ui-slider ui-slider-\"+this.orientation+\" ui-widget\"+\" ui-widget-content\"+\" ui-corner-all\"),this._refresh(),this._setOption(\"disabled\",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(\".ui-slider-handle\").addClass(\"ui-state-default ui-corner-all\"),a=\"<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>\",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join(\"\")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data(\"ui-slider-handle-index\",t)})},_createRange:function(){var t=this.options,i=\"\";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass(\"ui-slider-range-min ui-slider-range-max\").css({left:\"\",bottom:\"\"}):(this.range=e(\"<div></div>\").appendTo(this.element),i=\"ui-slider-range ui-widget-header ui-corner-all\"),this.range.addClass(i+(\"min\"===t.range||\"max\"===t.range?\" ui-slider-range-\"+t.range:\"\"))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass(\"ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all\"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass(\"ui-state-active\").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(\".ui-slider-handle\"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css(\"borderTopWidth\"),10)||0)-(parseInt(a.css(\"borderBottomWidth\"),10)||0)+(parseInt(a.css(\"marginTop\"),10)||0)},this.handles.hasClass(\"ui-state-hover\")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass(\"ui-state-active\"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=\"vertical\"===this.options.orientation?\"vertical\":\"horizontal\"},_normValueFromMouse:function(e){var t,i,s,n,a;return\"horizontal\"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),\"vertical\"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger(\"start\",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger(\"slide\",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger(\"slide\",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger(\"stop\",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger(\"change\",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch(\"range\"===t&&this.options.range===!0&&(\"min\"===i?(this.options.value=this._values(0),this.options.values=null):\"max\"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),\"disabled\"===t&&this.element.toggleClass(\"ui-state-disabled\",!!i),this._super(t,i),t){case\"orientation\":this._detectOrientation(),this.element.removeClass(\"ui-slider-horizontal ui-slider-vertical\").addClass(\"ui-slider-\"+this.orientation),this._refreshValue(),this.handles.css(\"horizontal\"===i?\"bottom\":\"left\",\"\");break;case\"value\":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case\"values\":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case\"step\":case\"min\":case\"max\":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case\"range\":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=this.options.max,t=this._valueMin(),i=this.options.step,s=Math.floor(+(e-t).toFixed(this._precision())/i)*i;e=s+t,this.max=parseFloat(e.toFixed(this._precision()))},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=\"\"+e,i=t.indexOf(\".\");return-1===i?0:t.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u[\"horizontal\"===h.orientation?\"left\":\"bottom\"]=i+\"%\",e(this).stop(1,1)[l?\"animate\":\"css\"](u,r.animate),h.options.range===!0&&(\"horizontal\"===h.orientation?(0===s&&h.range.stop(1,1)[l?\"animate\":\"css\"]({left:i+\"%\"},r.animate),1===s&&h.range[l?\"animate\":\"css\"]({width:i-t+\"%\"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?\"animate\":\"css\"]({bottom:i+\"%\"},r.animate),1===s&&h.range[l?\"animate\":\"css\"]({height:i-t+\"%\"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u[\"horizontal\"===this.orientation?\"left\":\"bottom\"]=i+\"%\",this.handle.stop(1,1)[l?\"animate\":\"css\"](u,r.animate),\"min\"===o&&\"horizontal\"===this.orientation&&this.range.stop(1,1)[l?\"animate\":\"css\"]({width:i+\"%\"},r.animate),\"max\"===o&&\"horizontal\"===this.orientation&&this.range[l?\"animate\":\"css\"]({width:100-i+\"%\"},{queue:!1,duration:r.animate}),\"min\"===o&&\"vertical\"===this.orientation&&this.range.stop(1,1)[l?\"animate\":\"css\"]({height:i+\"%\"},r.animate),\"max\"===o&&\"vertical\"===this.orientation&&this.range[l?\"animate\":\"css\"]({height:100-i+\"%\"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data(\"ui-slider-handle-index\");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass(\"ui-state-active\"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data(\"ui-slider-handle-index\");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass(\"ui-state-active\"))}}}),e.widget(\"ui.sortable\",e.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"sort\",ready:!1,options:{appendTo:\"parent\",axis:!1,connectWith:!1,containment:!1,cursor:\"auto\",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:\"original\",items:\"> *\",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:\"default\",tolerance:\"intersect\",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css(\"float\"))||/inline|table-cell/.test(e.css(\"display\"))},_create:function(){this.containerCache={},this.element.addClass(\"ui-sortable\"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),\"handle\"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(\".ui-sortable-handle\").removeClass(\"ui-sortable-handle\"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass(\"ui-sortable-handle\")})},_destroy:function(){this.element.removeClass(\"ui-sortable ui-sortable-disabled\").find(\".ui-sortable-handle\").removeClass(\"ui-sortable-handle\"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+\"-item\");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||\"static\"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+\"-item\")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+\"-item\")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find(\"*\").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css(\"position\",\"absolute\"),this.cssPosition=this.helper.css(\"position\"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&\"auto\"!==o.cursor&&(a=this.document.find(\"body\"),this.storedCursor=a.css(\"cursor\"),a.css(\"cursor\",o.cursor),this.storedStylesheet=e(\"<style>*{ cursor: \"+o.cursor+\" !important; }</style>\").appendTo(a)),o.opacity&&(this.helper.css(\"opacity\")&&(this._storedOpacity=this.helper.css(\"opacity\")),this.helper.css(\"opacity\",o.opacity)),o.zIndex&&(this.helper.css(\"zIndex\")&&(this._storedZIndex=this.helper.css(\"zIndex\")),this.helper.css(\"zIndex\",o.zIndex)),this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger(\"start\",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger(\"activate\",t,this._uiHash(this));\nreturn e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass(\"ui-sortable-helper\"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo(\"absolute\"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()<o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<o.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()<o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<o.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo(\"absolute\"),this.options.axis&&\"y\"===this.options.axis||(this.helper[0].style.left=this.position.left+\"px\"),this.options.axis&&\"x\"===this.options.axis||(this.helper[0].style.top=this.position.top+\"px\"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?\"next\":\"prev\"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&(\"semi-dynamic\"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?\"down\":\"up\",\"pointer\"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger(\"change\",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger(\"sort\",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&\"x\"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&\"y\"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),\"original\"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger(\"deactivate\",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger(\"out\",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),\"original\"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||\"id\")||\"\").match(t.expression||/(.+)[\\-=_](.+)/);i&&s.push((t.key||i[1]+\"[]\")+\"=\"+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+\"=\"),s.join(\"&\")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||\"id\")||\"\")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d=\"x\"===this.options.axis||s+l>r&&h>s+l,c=\"y\"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return\"pointer\"===this.options.tolerance||this.options.forcePointerForContainers||\"pointer\"!==this.options.tolerance&&this.helperProportions[this.floating?\"width\":\"height\"]>e[this.floating?\"width\":\"height\"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t=\"x\"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i=\"y\"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&\"right\"===a||\"down\"===n?2:1:n&&(\"down\"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?\"right\"===n&&i||\"left\"===n&&!i:s&&(\"down\"===s&&t||\"up\"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?\"down\":\"up\")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?\"right\":\"left\")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(\":data(\"+this.widgetName+\"-item)\");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+\"-item\",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?\"x\"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e(\"<\"+s+\">\",t.document[0]).addClass(i||t.currentItem[0].className+\" ui-sortable-placeholder\").removeClass(\"ui-sortable-helper\");return\"tbody\"===s?t._createTrPlaceholder(t.currentItem.find(\"tr\").eq(0),e(\"<tr>\",t.document[0]).appendTo(n)):\"tr\"===s?t._createTrPlaceholder(t.currentItem,n):\"img\"===s&&n.attr(\"src\",t.currentItem.attr(\"src\")),i||n.css(\"visibility\",\"hidden\"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css(\"paddingTop\")||0,10)-parseInt(t.currentItem.css(\"paddingBottom\")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css(\"paddingLeft\")||0,10)-parseInt(t.currentItem.css(\"paddingRight\")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e(\"<td>&#160;</td>\",s.document[0]).attr(\"colspan\",e(this).attr(\"colspan\")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger(\"out\",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger(\"over\",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?\"left\":\"top\",r=u?\"width\":\"height\",d=u?\"clientX\":\"clientY\",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?\"up\":\"down\"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger(\"over\",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger(\"change\",t,this._uiHash()),this.containers[p]._trigger(\"change\",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger(\"over\",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):\"clone\"===i.helper?this.currentItem.clone():this.currentItem;return s.parents(\"body\").length||e(\"parent\"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css(\"position\"),top:this.currentItem.css(\"top\"),left:this.currentItem.css(\"left\")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){\"string\"==typeof t&&(t=t.split(\" \")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),\"left\"in t&&(this.offset.click.left=t.left+this.margins.left),\"right\"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),\"top\"in t&&(this.offset.click.top=t.top+this.margins.top),\"bottom\"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&\"html\"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:t.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css(\"top\"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css(\"left\"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css(\"marginLeft\"),10)||0,top:parseInt(this.currentItem.css(\"marginTop\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),(\"document\"===n.containment||\"window\"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,\"document\"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,(\"document\"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s=\"hidden\"!==e(t).css(\"overflow\"),this.containment=[i.left+(parseInt(e(t).css(\"borderLeftWidth\"),10)||0)+(parseInt(e(t).css(\"paddingLeft\"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css(\"borderTopWidth\"),10)||0)+(parseInt(e(t).css(\"paddingTop\"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css(\"borderLeftWidth\"),10)||0)-(parseInt(e(t).css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css(\"borderTopWidth\"),10)||0)-(parseInt(e(t).css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s=\"absolute\"===t?1:-1,n=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return\"relative\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],\"down\"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)(\"auto\"===this._storedCSS[s]||\"static\"===this._storedCSS[s])&&(this._storedCSS[s]=\"\");this.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger(\"receive\",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(\".ui-sortable-helper\")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger(\"update\",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger(\"remove\",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger(\"receive\",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger(\"update\",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i(\"deactivate\",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i(\"out\",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find(\"body\").css(\"cursor\",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css(\"opacity\",this._storedOpacity),this._storedZIndex&&this.helper.css(\"zIndex\",\"auto\"===this._storedZIndex?\"\":this._storedZIndex),this.dragging=!1,t||this._trigger(\"beforeStop\",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger(\"stop\",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget(\"ui.spinner\",{version:\"1.11.4\",defaultElement:\"<input>\",widgetEventPrefix:\"spin\",options:{culture:null,icons:{down:\"ui-icon-triangle-1-s\",up:\"ui-icon-triangle-1-n\"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption(\"max\",this.options.max),this._setOption(\"min\",this.options.min),this._setOption(\"step\",this.options.step),\"\"!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr(\"autocomplete\")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each([\"min\",\"max\",\"step\"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:\"_stop\",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger(\"change\",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},\"mousedown .ui-spinner-button\":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass(\"ui-spinner-up\")?1:-1,t)},\"mouseup .ui-spinner-button\":\"_stop\",\"mouseenter .ui-spinner-button\":function(t){return e(t.currentTarget).hasClass(\"ui-state-active\")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass(\"ui-spinner-up\")?1:-1,t),void 0):void 0},\"mouseleave .ui-spinner-button\":\"_stop\"},_draw:function(){var e=this.uiSpinner=this.element.addClass(\"ui-spinner-input\").attr(\"autocomplete\",\"off\").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr(\"role\",\"spinbutton\"),this.buttons=e.find(\".ui-spinner-button\").attr(\"tabIndex\",-1).button().removeClass(\"ui-corner-all\"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return\"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>\"},_buttonHtml:function(){return\"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon \"+this.options.icons.up+\"'>&#9650;</span>\"+\"</a>\"+\"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>\"+\"<span class='ui-icon \"+this.options.icons.down+\"'>&#9660;</span>\"+\"</a>\"},_start:function(e){return this.spinning||this._trigger(\"start\",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger(\"spin\",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=\"\"+e,i=t.indexOf(\".\");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger(\"stop\",e))},_setOption:function(e,t){if(\"culture\"===e||\"numberFormat\"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}(\"max\"===e||\"min\"===e||\"step\"===e)&&\"string\"==typeof t&&(t=this._parse(t)),\"icons\"===e&&(this.buttons.first().find(\".ui-icon\").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(\".ui-icon\").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),\"disabled\"===e&&(this.widget().toggleClass(\"ui-state-disabled\",!!t),this.element.prop(\"disabled\",!!t),this.buttons.button(t?\"disable\":\"enable\"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return\"string\"==typeof e&&\"\"!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),\"\"===e||isNaN(e)?null:e},_format:function(e){return\"\"===e?\"\":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({\"aria-valuemin\":this.options.min,\"aria-valuemax\":this.options.max,\"aria-valuenow\":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;\"\"!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass(\"ui-spinner-input\").prop(\"disabled\",!1).removeAttr(\"autocomplete\").removeAttr(\"role\").removeAttr(\"aria-valuemin\").removeAttr(\"aria-valuemax\").removeAttr(\"aria-valuenow\"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget(\"ui.tabs\",{version:\"1.11.4\",delay:300,options:{active:null,collapsible:!1,event:\"click\",heightStyle:\"content\",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,\"\"),s=location.href.replace(e,\"\");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass(\"ui-tabs ui-widget ui-widget-content ui-corner-all\").toggleClass(\"ui-tabs-collapsible\",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(\".ui-state-disabled\"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr(\"aria-controls\")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(\".ui-tabs-active\"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest(\"li\"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr(\"aria-selected\",\"false\"),this.tabs.eq(s).attr(\"aria-selected\",\"true\"),this.activating=this._delay(function(){this.option(\"active\",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return\"active\"===e?(this._activate(t),void 0):\"disabled\"===e?(this._setupDisabled(t),void 0):(this._super(e,t),\"collapsible\"===e&&(this.element.toggleClass(\"ui-tabs-collapsible\",t),t||this.options.active!==!1||this._activate(0)),\"event\"===e&&this._setupEvents(t),\"heightStyle\"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g,\"\\\\$&\"):\"\"},refresh:function(){var t=this.options,i=this.tablist.children(\":has(a[href])\");t.disabled=e.map(i.filter(\".ui-state-disabled\"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({\"aria-hidden\":\"true\"}),this.active.length?(this.active.addClass(\"ui-tabs-active ui-state-active\").attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0}),this._getPanelForTab(this.active).show().attr({\"aria-hidden\":\"false\"})):this.tabs.eq(0).attr(\"tabIndex\",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;\nthis.tablist=this._getList().addClass(\"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\").attr(\"role\",\"tablist\").delegate(\"> li\",\"mousedown\"+this.eventNamespace,function(t){e(this).is(\".ui-state-disabled\")&&t.preventDefault()}).delegate(\".ui-tabs-anchor\",\"focus\"+this.eventNamespace,function(){e(this).closest(\"li\").is(\".ui-state-disabled\")&&this.blur()}),this.tabs=this.tablist.find(\"> li:has(a[href])\").addClass(\"ui-state-default ui-corner-top\").attr({role:\"tab\",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e(\"a\",this)[0]}).addClass(\"ui-tabs-anchor\").attr({role:\"presentation\",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr(\"id\"),h=e(s).closest(\"li\"),l=h.attr(\"aria-controls\");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr(\"aria-controls\")||e({}).uniqueId()[0].id,n=\"#\"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr(\"aria-live\",\"polite\")),a.length&&(t.panels=t.panels.add(a)),l&&h.data(\"ui-tabs-aria-controls\",l),h.attr({\"aria-controls\":o,\"aria-labelledby\":r}),a.attr(\"aria-labelledby\",r)}),this.panels.addClass(\"ui-tabs-panel ui-widget-content ui-corner-bottom\").attr(\"role\",\"tabpanel\"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find(\"ol,ul\").eq(0)},_createPanel:function(t){return e(\"<div>\").attr(\"id\",t).addClass(\"ui-tabs-panel ui-widget-content ui-corner-bottom\").data(\"ui-tabs-destroy\",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass(\"ui-state-disabled\").attr(\"aria-disabled\",\"true\"):e(i).removeClass(\"ui-state-disabled\").removeAttr(\"aria-disabled\");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(\" \"),function(e,t){i[t]=\"_eventHandler\"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:\"_tabKeydown\"}),this._on(this.panels,{keydown:\"_panelKeydown\"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();\"fill\"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(\":visible\").each(function(){var t=e(this),s=t.css(\"position\");\"absolute\"!==s&&\"fixed\"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css(\"overflow\",\"auto\")):\"auto\"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height(\"\").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest(\"li\"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass(\"ui-state-disabled\")||a.hasClass(\"ui-tabs-loading\")||this.running||o&&!i.collapsible||this._trigger(\"beforeActivate\",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error(\"jQuery UI Tabs: Mismatching fragment identifier.\"),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger(\"activate\",t,i)}function n(){i.newTab.closest(\"li\").addClass(\"ui-tabs-active ui-state-active\"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest(\"li\").removeClass(\"ui-tabs-active ui-state-active\"),n()}):(i.oldTab.closest(\"li\").removeClass(\"ui-tabs-active ui-state-active\"),r.hide(),n()),r.attr(\"aria-hidden\",\"true\"),i.oldTab.attr({\"aria-selected\":\"false\",\"aria-expanded\":\"false\"}),o.length&&r.length?i.oldTab.attr(\"tabIndex\",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr(\"tabIndex\")}).attr(\"tabIndex\",-1),o.attr(\"aria-hidden\",\"false\"),i.newTab.attr({\"aria-selected\":\"true\",\"aria-expanded\":\"true\",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(\".ui-tabs-anchor\")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return\"string\"==typeof e&&(e=this.anchors.index(this.anchors.filter(\"[href$='\"+e+\"']\"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass(\"ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible\"),this.tablist.removeClass(\"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\").removeAttr(\"role\"),this.anchors.removeClass(\"ui-tabs-anchor\").removeAttr(\"role\").removeAttr(\"tabIndex\").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,\"ui-tabs-destroy\")?e(this).remove():e(this).removeClass(\"ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel\").removeAttr(\"tabIndex\").removeAttr(\"aria-live\").removeAttr(\"aria-busy\").removeAttr(\"aria-selected\").removeAttr(\"aria-labelledby\").removeAttr(\"aria-hidden\").removeAttr(\"aria-expanded\").removeAttr(\"role\")}),this.tabs.each(function(){var t=e(this),i=t.data(\"ui-tabs-aria-controls\");i?t.attr(\"aria-controls\",i).removeData(\"ui-tabs-aria-controls\"):t.removeAttr(\"aria-controls\")}),this.panels.show(),\"content\"!==this.options.heightStyle&&this.panels.css(\"height\",\"\")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(\".ui-tabs-anchor\"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){\"abort\"===t&&s.panels.stop(!1,!0),n.removeClass(\"ui-tabs-loading\"),o.removeAttr(\"aria-busy\"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&\"canceled\"!==this.xhr.statusText&&(n.addClass(\"ui-tabs-loading\"),o.attr(\"aria-busy\",\"true\"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger(\"load\",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr(\"href\"),beforeSend:function(t,a){return n._trigger(\"beforeLoad\",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr(\"aria-controls\");return this.element.find(this._sanitizeSelector(\"#\"+i))}}),e.widget(\"ui.tooltip\",{version:\"1.11.4\",options:{content:function(){var t=e(this).attr(\"title\")||\"\";return e(\"<a>\").text(t).html()},hide:!0,items:\"[title]:not([disabled])\",position:{my:\"left top+15\",at:\"left bottom\",collision:\"flipfit flip\"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr(\"aria-describedby\")||\"\").split(/\\s+/);s.push(i),t.data(\"ui-tooltip-id\",i).attr(\"aria-describedby\",e.trim(s.join(\" \")))},_removeDescribedBy:function(t){var i=t.data(\"ui-tooltip-id\"),s=(t.attr(\"aria-describedby\")||\"\").split(/\\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData(\"ui-tooltip-id\"),s=e.trim(s.join(\" \")),s?t.attr(\"aria-describedby\",s):t.removeAttr(\"aria-describedby\")},_create:function(){this._on({mouseover:\"open\",focusin:\"open\"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e(\"<div>\").attr({role:\"log\",\"aria-live\":\"assertive\",\"aria-relevant\":\"additions\"}).addClass(\"ui-helper-hidden-accessible\").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return\"disabled\"===t?(this[i?\"_disable\":\"_enable\"](),this.options[t]=i,void 0):(this._super(t,i),\"content\"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event(\"blur\");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is(\"[title]\")&&t.data(\"ui-tooltip-title\",t.attr(\"title\")).removeAttr(\"title\")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data(\"ui-tooltip-title\")&&t.attr(\"title\",t.data(\"ui-tooltip-title\"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data(\"ui-tooltip-id\")&&(s.attr(\"title\")&&s.data(\"ui-tooltip-title\",s.attr(\"title\")),s.data(\"ui-tooltip-open\",!0),t&&\"mouseover\"===t.type&&s.parents().each(function(){var t,s=e(this);s.data(\"ui-tooltip-open\")&&(t=e.Event(\"blur\"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr(\"title\")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr(\"title\")},s.attr(\"title\",\"\"))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return\"string\"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data(\"ui-tooltip-open\")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(\":hidden\")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(\".ui-tooltip-content\").html(s),void 0;i.is(\"[title]\")&&(t&&\"mouseover\"===t.type?i.attr(\"title\",\"\"):i.removeAttr(\"title\")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr(\"id\")),o.find(\".ui-tooltip-content\").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr(\"id\").find(\"[id]\").removeAttr(\"id\")):h=s,e(\"<div>\").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(\":visible\")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger(\"open\",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&\"mouseover\"!==t.type||(s.mouseleave=\"close\"),t&&\"focusin\"!==t.type||(s.focusout=\"close\"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data(\"ui-tooltip-title\")&&!n.attr(\"title\")&&n.attr(\"title\",n.data(\"ui-tooltip-title\")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData(\"ui-tooltip-open\"),this._off(n,\"mouseleave focusout keyup\"),n[0]!==this.element[0]&&this._off(n,\"remove\"),this._off(this.document,\"mousemove\"),t&&\"mouseleave\"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr(\"title\",i.title),delete s.parents[t]}),a.closing=!0,this._trigger(\"close\",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData(\"ui-tooltip-open\"),void 0)},_tooltip:function(t){var i=e(\"<div>\").attr(\"role\",\"tooltip\").addClass(\"ui-tooltip ui-widget ui-corner-all ui-widget-content \"+(this.options.tooltipClass||\"\")),s=i.uniqueId().attr(\"id\");return e(\"<div>\").addClass(\"ui-tooltip-content\").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data(\"ui-tooltip-id\");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr(\"id\")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event(\"blur\"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e(\"#\"+i).remove(),a.data(\"ui-tooltip-title\")&&(a.attr(\"title\")||a.attr(\"title\",a.data(\"ui-tooltip-title\")),a.removeData(\"ui-tooltip-title\"))}),this.liveRegion.remove()}})});"], "encodings.iso8859_9": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-9',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u011e'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0130'\n'\\u015e'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u011f'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0131'\n'\\u015f'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.mac_arabic": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-arabic',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c4,\n0x0081:0x00a0,\n0x0082:0x00c7,\n0x0083:0x00c9,\n0x0084:0x00d1,\n0x0085:0x00d6,\n0x0086:0x00dc,\n0x0087:0x00e1,\n0x0088:0x00e0,\n0x0089:0x00e2,\n0x008a:0x00e4,\n0x008b:0x06ba,\n0x008c:0x00ab,\n0x008d:0x00e7,\n0x008e:0x00e9,\n0x008f:0x00e8,\n0x0090:0x00ea,\n0x0091:0x00eb,\n0x0092:0x00ed,\n0x0093:0x2026,\n0x0094:0x00ee,\n0x0095:0x00ef,\n0x0096:0x00f1,\n0x0097:0x00f3,\n0x0098:0x00bb,\n0x0099:0x00f4,\n0x009a:0x00f6,\n0x009b:0x00f7,\n0x009c:0x00fa,\n0x009d:0x00f9,\n0x009e:0x00fb,\n0x009f:0x00fc,\n0x00a0:0x0020,\n0x00a1:0x0021,\n0x00a2:0x0022,\n0x00a3:0x0023,\n0x00a4:0x0024,\n0x00a5:0x066a,\n0x00a6:0x0026,\n0x00a7:0x0027,\n0x00a8:0x0028,\n0x00a9:0x0029,\n0x00aa:0x002a,\n0x00ab:0x002b,\n0x00ac:0x060c,\n0x00ad:0x002d,\n0x00ae:0x002e,\n0x00af:0x002f,\n0x00b0:0x0660,\n0x00b1:0x0661,\n0x00b2:0x0662,\n0x00b3:0x0663,\n0x00b4:0x0664,\n0x00b5:0x0665,\n0x00b6:0x0666,\n0x00b7:0x0667,\n0x00b8:0x0668,\n0x00b9:0x0669,\n0x00ba:0x003a,\n0x00bb:0x061b,\n0x00bc:0x003c,\n0x00bd:0x003d,\n0x00be:0x003e,\n0x00bf:0x061f,\n0x00c0:0x274a,\n0x00c1:0x0621,\n0x00c2:0x0622,\n0x00c3:0x0623,\n0x00c4:0x0624,\n0x00c5:0x0625,\n0x00c6:0x0626,\n0x00c7:0x0627,\n0x00c8:0x0628,\n0x00c9:0x0629,\n0x00ca:0x062a,\n0x00cb:0x062b,\n0x00cc:0x062c,\n0x00cd:0x062d,\n0x00ce:0x062e,\n0x00cf:0x062f,\n0x00d0:0x0630,\n0x00d1:0x0631,\n0x00d2:0x0632,\n0x00d3:0x0633,\n0x00d4:0x0634,\n0x00d5:0x0635,\n0x00d6:0x0636,\n0x00d7:0x0637,\n0x00d8:0x0638,\n0x00d9:0x0639,\n0x00da:0x063a,\n0x00db:0x005b,\n0x00dc:0x005c,\n0x00dd:0x005d,\n0x00de:0x005e,\n0x00df:0x005f,\n0x00e0:0x0640,\n0x00e1:0x0641,\n0x00e2:0x0642,\n0x00e3:0x0643,\n0x00e4:0x0644,\n0x00e5:0x0645,\n0x00e6:0x0646,\n0x00e7:0x0647,\n0x00e8:0x0648,\n0x00e9:0x0649,\n0x00ea:0x064a,\n0x00eb:0x064b,\n0x00ec:0x064c,\n0x00ed:0x064d,\n0x00ee:0x064e,\n0x00ef:0x064f,\n0x00f0:0x0650,\n0x00f1:0x0651,\n0x00f2:0x0652,\n0x00f3:0x067e,\n0x00f4:0x0679,\n0x00f5:0x0686,\n0x00f6:0x06d5,\n0x00f7:0x06a4,\n0x00f8:0x06af,\n0x00f9:0x0688,\n0x00fa:0x0691,\n0x00fb:0x007b,\n0x00fc:0x007c,\n0x00fd:0x007d,\n0x00fe:0x0698,\n0x00ff:0x06d2,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xa0'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\u06ba'\n'\\xab'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\u2026'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xbb'\n'\\xf4'\n'\\xf6'\n'\\xf7'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n' '\n'!'\n'\"'\n'#'\n'$'\n'\\u066a'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n'\\u060c'\n'-'\n'.'\n'/'\n'\\u0660'\n'\\u0661'\n'\\u0662'\n'\\u0663'\n'\\u0664'\n'\\u0665'\n'\\u0666'\n'\\u0667'\n'\\u0668'\n'\\u0669'\n':'\n'\\u061b'\n'<'\n'='\n'>'\n'\\u061f'\n'\\u274a'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\u0636'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'\\u0640'\n'\\u0641'\n'\\u0642'\n'\\u0643'\n'\\u0644'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\u0649'\n'\\u064a'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\u064f'\n'\\u0650'\n'\\u0651'\n'\\u0652'\n'\\u067e'\n'\\u0679'\n'\\u0686'\n'\\u06d5'\n'\\u06a4'\n'\\u06af'\n'\\u0688'\n'\\u0691'\n'{'\n'|'\n'}'\n'\\u0698'\n'\\u06d2'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0020:0x00a0,\n0x0021:0x0021,\n0x0021:0x00a1,\n0x0022:0x0022,\n0x0022:0x00a2,\n0x0023:0x0023,\n0x0023:0x00a3,\n0x0024:0x0024,\n0x0024:0x00a4,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0026:0x00a6,\n0x0027:0x0027,\n0x0027:0x00a7,\n0x0028:0x0028,\n0x0028:0x00a8,\n0x0029:0x0029,\n0x0029:0x00a9,\n0x002a:0x002a,\n0x002a:0x00aa,\n0x002b:0x002b,\n0x002b:0x00ab,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002d:0x00ad,\n0x002e:0x002e,\n0x002e:0x00ae,\n0x002f:0x002f,\n0x002f:0x00af,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003a:0x00ba,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003c:0x00bc,\n0x003d:0x003d,\n0x003d:0x00bd,\n0x003e:0x003e,\n0x003e:0x00be,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005b:0x00db,\n0x005c:0x005c,\n0x005c:0x00dc,\n0x005d:0x005d,\n0x005d:0x00dd,\n0x005e:0x005e,\n0x005e:0x00de,\n0x005f:0x005f,\n0x005f:0x00df,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007b:0x00fb,\n0x007c:0x007c,\n0x007c:0x00fc,\n0x007d:0x007d,\n0x007d:0x00fd,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x0081,\n0x00ab:0x008c,\n0x00bb:0x0098,\n0x00c4:0x0080,\n0x00c7:0x0082,\n0x00c9:0x0083,\n0x00d1:0x0084,\n0x00d6:0x0085,\n0x00dc:0x0086,\n0x00e0:0x0088,\n0x00e1:0x0087,\n0x00e2:0x0089,\n0x00e4:0x008a,\n0x00e7:0x008d,\n0x00e8:0x008f,\n0x00e9:0x008e,\n0x00ea:0x0090,\n0x00eb:0x0091,\n0x00ed:0x0092,\n0x00ee:0x0094,\n0x00ef:0x0095,\n0x00f1:0x0096,\n0x00f3:0x0097,\n0x00f4:0x0099,\n0x00f6:0x009a,\n0x00f7:0x009b,\n0x00f9:0x009d,\n0x00fa:0x009c,\n0x00fb:0x009e,\n0x00fc:0x009f,\n0x060c:0x00ac,\n0x061b:0x00bb,\n0x061f:0x00bf,\n0x0621:0x00c1,\n0x0622:0x00c2,\n0x0623:0x00c3,\n0x0624:0x00c4,\n0x0625:0x00c5,\n0x0626:0x00c6,\n0x0627:0x00c7,\n0x0628:0x00c8,\n0x0629:0x00c9,\n0x062a:0x00ca,\n0x062b:0x00cb,\n0x062c:0x00cc,\n0x062d:0x00cd,\n0x062e:0x00ce,\n0x062f:0x00cf,\n0x0630:0x00d0,\n0x0631:0x00d1,\n0x0632:0x00d2,\n0x0633:0x00d3,\n0x0634:0x00d4,\n0x0635:0x00d5,\n0x0636:0x00d6,\n0x0637:0x00d7,\n0x0638:0x00d8,\n0x0639:0x00d9,\n0x063a:0x00da,\n0x0640:0x00e0,\n0x0641:0x00e1,\n0x0642:0x00e2,\n0x0643:0x00e3,\n0x0644:0x00e4,\n0x0645:0x00e5,\n0x0646:0x00e6,\n0x0647:0x00e7,\n0x0648:0x00e8,\n0x0649:0x00e9,\n0x064a:0x00ea,\n0x064b:0x00eb,\n0x064c:0x00ec,\n0x064d:0x00ed,\n0x064e:0x00ee,\n0x064f:0x00ef,\n0x0650:0x00f0,\n0x0651:0x00f1,\n0x0652:0x00f2,\n0x0660:0x00b0,\n0x0661:0x00b1,\n0x0662:0x00b2,\n0x0663:0x00b3,\n0x0664:0x00b4,\n0x0665:0x00b5,\n0x0666:0x00b6,\n0x0667:0x00b7,\n0x0668:0x00b8,\n0x0669:0x00b9,\n0x066a:0x00a5,\n0x0679:0x00f4,\n0x067e:0x00f3,\n0x0686:0x00f5,\n0x0688:0x00f9,\n0x0691:0x00fa,\n0x0698:0x00fe,\n0x06a4:0x00f7,\n0x06af:0x00f8,\n0x06ba:0x008b,\n0x06d2:0x00ff,\n0x06d5:0x00f6,\n0x2026:0x0093,\n0x274a:0x00c0,\n}\n"], "code": [".py", "''\n\n\n\n\n\n\nimport sys\nimport traceback\nfrom codeop import CommandCompiler,compile_command\n\n__all__=[\"InteractiveInterpreter\",\"InteractiveConsole\",\"interact\",\n\"compile_command\"]\n\nclass InteractiveInterpreter:\n ''\n\n\n\n\n\n \n \n def __init__(self,locals=None ):\n  ''\n\n\n\n\n\n\n  \n  if locals is None :\n   locals={\"__name__\":\"__console__\",\"__doc__\":None }\n  self.locals=locals\n  self.compile=CommandCompiler()\n  \n def runsource(self,source,filename=\"<input>\",symbol=\"single\"):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  try :\n   code=self.compile(source,filename,symbol)\n  except (OverflowError,SyntaxError,ValueError):\n  \n   self.showsyntaxerror(filename)\n   return False\n   \n  if code is None :\n  \n   return True\n   \n   \n  self.runcode(code)\n  return False\n  \n def runcode(self,code):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  try :\n   exec(code,self.locals)\n  except SystemExit:\n   raise\n  except :\n   self.showtraceback()\n   \n def showsyntaxerror(self,filename=None ):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  type,value,tb=sys.exc_info()\n  sys.last_type=type\n  sys.last_value=value\n  sys.last_traceback=tb\n  if filename and type is SyntaxError:\n  \n   try :\n    msg,(dummy_filename,lineno,offset,line)=value.args\n   except ValueError:\n   \n    pass\n   else :\n   \n    value=SyntaxError(msg,(filename,lineno,offset,line))\n    sys.last_value=value\n  if sys.excepthook is sys.__excepthook__:\n   lines=traceback.format_exception_only(type,value)\n   self.write(''.join(lines))\n  else :\n  \n  \n   sys.excepthook(type,value,tb)\n   \n def showtraceback(self):\n  ''\n\n\n\n\n\n  \n  try :\n   type,value,tb=sys.exc_info()\n   sys.last_type=type\n   sys.last_value=value\n   sys.last_traceback=tb\n   tblist=traceback.extract_tb(tb)\n   del tblist[:1]\n   lines=traceback.format_list(tblist)\n   if lines:\n    lines.insert(0,\"Traceback (most recent call last):\\n\")\n   lines.extend(traceback.format_exception_only(type,value))\n  finally :\n   tblist=tb=None\n  if sys.excepthook is sys.__excepthook__:\n   self.write(''.join(lines))\n  else :\n  \n  \n   sys.excepthook(type,value,tb)\n   \n def write(self,data):\n  ''\n\n\n\n\n  \n  sys.stderr.write(data)\n  \n  \nclass InteractiveConsole(InteractiveInterpreter):\n ''\n\n\n\n\n \n \n def __init__(self,locals=None ,filename=\"<console>\"):\n  ''\n\n\n\n\n\n\n\n  \n  InteractiveInterpreter.__init__(self,locals)\n  self.filename=filename\n  self.resetbuffer()\n  \n def resetbuffer(self):\n  ''\n  self.buffer=[]\n  \n def interact(self,banner=None ):\n  ''\n\n\n\n\n\n\n\n\n  \n  try :\n   sys.ps1\n  except AttributeError:\n   sys.ps1=\">>> \"\n  try :\n   sys.ps2\n  except AttributeError:\n   sys.ps2=\"... \"\n  cprt='Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.'\n  if banner is None :\n   self.write(\"Python %s on %s\\n%s\\n(%s)\\n\"%\n   (sys.version,sys.platform,cprt,\n   self.__class__.__name__))\n  elif banner:\n   self.write(\"%s\\n\"%str(banner))\n  more=0\n  while 1:\n   try :\n    if more:\n     prompt=sys.ps2\n    else :\n     prompt=sys.ps1\n    try :\n     line=self.raw_input(prompt)\n    except EOFError:\n     self.write(\"\\n\")\n     break\n    else :\n     more=self.push(line)\n   except KeyboardInterrupt:\n    self.write(\"\\nKeyboardInterrupt\\n\")\n    self.resetbuffer()\n    more=0\n    \n def push(self,line):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  self.buffer.append(line)\n  source=\"\\n\".join(self.buffer)\n  more=self.runsource(source,self.filename)\n  if not more:\n   self.resetbuffer()\n  return more\n  \n def raw_input(self,prompt=\"\"):\n  ''\n\n\n\n\n\n\n\n\n  \n  return input(prompt)\n  \n  \n  \ndef interact(banner=None ,readfunc=None ,local=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n console=InteractiveConsole(local)\n if readfunc is not None :\n  console.raw_input=readfunc\n else :\n  try :\n   import readline\n  except ImportError:\n   pass\n console.interact(banner)\n \n \nif __name__ ==\"__main__\":\n interact()\n"], "encodings.cp869": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp869',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:None ,\n0x0081:None ,\n0x0082:None ,\n0x0083:None ,\n0x0084:None ,\n0x0085:None ,\n0x0086:0x0386,\n0x0087:None ,\n0x0088:0x00b7,\n0x0089:0x00ac,\n0x008a:0x00a6,\n0x008b:0x2018,\n0x008c:0x2019,\n0x008d:0x0388,\n0x008e:0x2015,\n0x008f:0x0389,\n0x0090:0x038a,\n0x0091:0x03aa,\n0x0092:0x038c,\n0x0093:None ,\n0x0094:None ,\n0x0095:0x038e,\n0x0096:0x03ab,\n0x0097:0x00a9,\n0x0098:0x038f,\n0x0099:0x00b2,\n0x009a:0x00b3,\n0x009b:0x03ac,\n0x009c:0x00a3,\n0x009d:0x03ad,\n0x009e:0x03ae,\n0x009f:0x03af,\n0x00a0:0x03ca,\n0x00a1:0x0390,\n0x00a2:0x03cc,\n0x00a3:0x03cd,\n0x00a4:0x0391,\n0x00a5:0x0392,\n0x00a6:0x0393,\n0x00a7:0x0394,\n0x00a8:0x0395,\n0x00a9:0x0396,\n0x00aa:0x0397,\n0x00ab:0x00bd,\n0x00ac:0x0398,\n0x00ad:0x0399,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x039a,\n0x00b6:0x039b,\n0x00b7:0x039c,\n0x00b8:0x039d,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x039e,\n0x00be:0x039f,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x03a0,\n0x00c7:0x03a1,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x03a3,\n0x00d0:0x03a4,\n0x00d1:0x03a5,\n0x00d2:0x03a6,\n0x00d3:0x03a7,\n0x00d4:0x03a8,\n0x00d5:0x03a9,\n0x00d6:0x03b1,\n0x00d7:0x03b2,\n0x00d8:0x03b3,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x03b4,\n0x00de:0x03b5,\n0x00df:0x2580,\n0x00e0:0x03b6,\n0x00e1:0x03b7,\n0x00e2:0x03b8,\n0x00e3:0x03b9,\n0x00e4:0x03ba,\n0x00e5:0x03bb,\n0x00e6:0x03bc,\n0x00e7:0x03bd,\n0x00e8:0x03be,\n0x00e9:0x03bf,\n0x00ea:0x03c0,\n0x00eb:0x03c1,\n0x00ec:0x03c3,\n0x00ed:0x03c2,\n0x00ee:0x03c4,\n0x00ef:0x0384,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x03c5,\n0x00f3:0x03c6,\n0x00f4:0x03c7,\n0x00f5:0x00a7,\n0x00f6:0x03c8,\n0x00f7:0x0385,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x03c9,\n0x00fb:0x03cb,\n0x00fc:0x03b0,\n0x00fd:0x03ce,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0386'\n'\\ufffe'\n'\\xb7'\n'\\xac'\n'\\xa6'\n'\\u2018'\n'\\u2019'\n'\\u0388'\n'\\u2015'\n'\\u0389'\n'\\u038a'\n'\\u03aa'\n'\\u038c'\n'\\ufffe'\n'\\ufffe'\n'\\u038e'\n'\\u03ab'\n'\\xa9'\n'\\u038f'\n'\\xb2'\n'\\xb3'\n'\\u03ac'\n'\\xa3'\n'\\u03ad'\n'\\u03ae'\n'\\u03af'\n'\\u03ca'\n'\\u0390'\n'\\u03cc'\n'\\u03cd'\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\xbd'\n'\\u0398'\n'\\u0399'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u039e'\n'\\u039f'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u03a0'\n'\\u03a1'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u03a3'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u03b4'\n'\\u03b5'\n'\\u2580'\n'\\u03b6'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c3'\n'\\u03c2'\n'\\u03c4'\n'\\u0384'\n'\\xad'\n'\\xb1'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\xa7'\n'\\u03c8'\n'\\u0385'\n'\\xb0'\n'\\xa8'\n'\\u03c9'\n'\\u03cb'\n'\\u03b0'\n'\\u03ce'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a3:0x009c,\n0x00a6:0x008a,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x0097,\n0x00ab:0x00ae,\n0x00ac:0x0089,\n0x00ad:0x00f0,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x0099,\n0x00b3:0x009a,\n0x00b7:0x0088,\n0x00bb:0x00af,\n0x00bd:0x00ab,\n0x0384:0x00ef,\n0x0385:0x00f7,\n0x0386:0x0086,\n0x0388:0x008d,\n0x0389:0x008f,\n0x038a:0x0090,\n0x038c:0x0092,\n0x038e:0x0095,\n0x038f:0x0098,\n0x0390:0x00a1,\n0x0391:0x00a4,\n0x0392:0x00a5,\n0x0393:0x00a6,\n0x0394:0x00a7,\n0x0395:0x00a8,\n0x0396:0x00a9,\n0x0397:0x00aa,\n0x0398:0x00ac,\n0x0399:0x00ad,\n0x039a:0x00b5,\n0x039b:0x00b6,\n0x039c:0x00b7,\n0x039d:0x00b8,\n0x039e:0x00bd,\n0x039f:0x00be,\n0x03a0:0x00c6,\n0x03a1:0x00c7,\n0x03a3:0x00cf,\n0x03a4:0x00d0,\n0x03a5:0x00d1,\n0x03a6:0x00d2,\n0x03a7:0x00d3,\n0x03a8:0x00d4,\n0x03a9:0x00d5,\n0x03aa:0x0091,\n0x03ab:0x0096,\n0x03ac:0x009b,\n0x03ad:0x009d,\n0x03ae:0x009e,\n0x03af:0x009f,\n0x03b0:0x00fc,\n0x03b1:0x00d6,\n0x03b2:0x00d7,\n0x03b3:0x00d8,\n0x03b4:0x00dd,\n0x03b5:0x00de,\n0x03b6:0x00e0,\n0x03b7:0x00e1,\n0x03b8:0x00e2,\n0x03b9:0x00e3,\n0x03ba:0x00e4,\n0x03bb:0x00e5,\n0x03bc:0x00e6,\n0x03bd:0x00e7,\n0x03be:0x00e8,\n0x03bf:0x00e9,\n0x03c0:0x00ea,\n0x03c1:0x00eb,\n0x03c2:0x00ed,\n0x03c3:0x00ec,\n0x03c4:0x00ee,\n0x03c5:0x00f2,\n0x03c6:0x00f3,\n0x03c7:0x00f4,\n0x03c8:0x00f6,\n0x03c9:0x00fa,\n0x03ca:0x00a0,\n0x03cb:0x00fb,\n0x03cc:0x00a2,\n0x03cd:0x00a3,\n0x03ce:0x00fd,\n0x2015:0x008e,\n0x2018:0x008b,\n0x2019:0x008c,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "xml.etree.ElementInclude": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport copy\nfrom .import ElementTree\n\nXINCLUDE=\"{http://www.w3.org/2001/XInclude}\"\n\nXINCLUDE_INCLUDE=XINCLUDE+\"include\"\nXINCLUDE_FALLBACK=XINCLUDE+\"fallback\"\n\n\n\n\nclass FatalIncludeError(SyntaxError):\n pass\n \n \n \n \n \n \n \n \n \n \n \n \n \ndef default_loader(href,parse,encoding=None ):\n if parse ==\"xml\":\n  file=open(href,'rb')\n  data=ElementTree.parse(file).getroot()\n else :\n  if not encoding:\n   encoding='UTF-8'\n  file=open(href,'r',encoding=encoding)\n  data=file.read()\n file.close()\n return data\n \n \n \n \n \n \n \n \n \n \n \n \ndef include(elem,loader=None ):\n if loader is None :\n  loader=default_loader\n  \n i=0\n while i <len(elem):\n  e=elem[i]\n  if e.tag ==XINCLUDE_INCLUDE:\n  \n   href=e.get(\"href\")\n   parse=e.get(\"parse\",\"xml\")\n   if parse ==\"xml\":\n    node=loader(href,parse)\n    if node is None :\n     raise FatalIncludeError(\n     \"cannot load %r as %r\"%(href,parse)\n     )\n    node=copy.copy(node)\n    if e.tail:\n     node.tail=(node.tail or\"\")+e.tail\n    elem[i]=node\n   elif parse ==\"text\":\n    text=loader(href,parse,e.get(\"encoding\"))\n    if text is None :\n     raise FatalIncludeError(\n     \"cannot load %r as %r\"%(href,parse)\n     )\n    if i:\n     node=elem[i -1]\n     node.tail=(node.tail or\"\")+text+(e.tail or\"\")\n    else :\n     elem.text=(elem.text or\"\")+text+(e.tail or\"\")\n    del elem[i]\n    continue\n   else :\n    raise FatalIncludeError(\n    \"unknown parse type in xi:include tag (%r)\"%parse\n    )\n  elif e.tag ==XINCLUDE_FALLBACK:\n   raise FatalIncludeError(\n   \"xi:fallback tag must be child of xi:include (%r)\"%e.tag\n   )\n  else :\n   include(e,loader)\n  i=i+1\n"], "encodings.palmos": [".py", "''\n\n\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='palmos',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\x81'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u0152'\n'\\u2666'\n'\\u2663'\n'\\u2665'\n'\\u2660'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\u0161'\n'\\x9b'\n'\\u0153'\n'\\x9d'\n'\\x9e'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "VFS_import": [".py", "import os\nfrom browser import doc\n\n\n\n\n\n\nVFS=dict(JSObject(__BRYTHON__.py_VFS))\nclass VFSModuleFinder:\n def __init__(self,path_entry):\n  print(\"in VFSModuleFinder\")\n  if path_entry.startswith('/libs')or path_entry.startswith('/Lib'):\n   self.path_entry=path_entry\n  else :\n   raise ImportError()\n   \n def __str__(self):\n  return'<%s for \"%s\">'%(self.__class__.__name__,self.path_entry)\n  \n def find_module(self,fullname,path=None ):\n  path=path or self.path_entry\n  \n  for _ext in ['js','pyj','py']:\n   _filepath=os.path.join(self.path_entry,'%s.%s'%(fullname,_ext))\n   if _filepath in VFS:\n    print(\"module found at %s:%s\"%(_filepath,fullname))\n    return VFSModuleLoader(_filepath,fullname)\n    \n  print('module %s not found'%fullname)\n  raise ImportError()\n  return None\n  \nclass VFSModuleLoader:\n ''\n \n def __init__(self,filepath,name):\n  self._filepath=filepath\n  self._name=name\n  \n def get_source(self):\n  if self._filepath in VFS:\n   return JSObject(readFromVFS(self._filepath))\n   \n  raise ImportError('could not find source for %s'%fullname)\n  \n def is_package(self):\n  return'.'in self._name\n  \n def load_module(self):\n  if self._name in sys.modules:\n  \n   mod=sys.modules[self._name]\n   return mod\n   \n  _src=self.get_source()\n  if self._filepath.endswith('.js'):\n   mod=JSObject(import_js_module(_src,self._filepath,self._name))\n  elif self._filepath.endswith('.py'):\n   mod=JSObject(import_py_module(_src,self._filepath,self._name))\n  elif self._filepath.endswith('.pyj'):\n   mod=JSObject(import_pyj_module(_src,self._filepath,self._name))\n  else :\n   raise ImportError('Invalid Module: %s'%self._filepath)\n   \n   \n  mod.__file__=self._filepath\n  mod.__name__=self._name\n  mod.__path__=os.path.abspath(self._filepath)\n  mod.__loader__=self\n  mod.__package__='.'.join(self._name.split('.')[:-1])\n  \n  if self.is_package():\n   print('adding path for package')\n   \n   \n   mod.__path__=[self.path_entry]\n  else :\n   print('imported as regular module')\n   \n  print('creating a new module object for \"%s\"'%self._name)\n  sys.modules.setdefault(self._name,mod)\n  JSObject(__BRYTHON__.imported)[self._name]=mod\n  \n  return mod\n  \nJSObject(__BRYTHON__.path_hooks.insert(0,VFSModuleFinder))\n"], "string": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport _string\n\n\nwhitespace=' \\t\\n\\r\\v\\f'\nascii_lowercase='abcdefghijklmnopqrstuvwxyz'\nascii_uppercase='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nascii_letters=ascii_lowercase+ascii_uppercase\ndigits='0123456789'\nhexdigits=digits+'abcdef'+'ABCDEF'\noctdigits='01234567'\npunctuation=\"\"\"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\"\"\"\nprintable=digits+ascii_letters+punctuation+whitespace\n\n\n\n\ndef capwords(s,sep=None ):\n ''\n\n\n\n\n\n\n\n\n \n return (sep or' ').join(x.capitalize()for x in s.split(sep))\n \n \n \nimport re as _re\nfrom collections import ChainMap\n\nclass _TemplateMetaclass(type):\n pattern=r\"\"\"\n    %(delim)s(?:\n      (?P<escaped>%(delim)s) |   # Escape sequence of two delimiters\n      (?P<named>%(id)s)      |   # delimiter and a Python identifier\n      {(?P<braced>%(id)s)}   |   # delimiter and a braced identifier\n      (?P<invalid>)              # Other ill-formed delimiter exprs\n    )\n    \"\"\"\n \n def __init__(cls,name,bases,dct):\n  super(_TemplateMetaclass,cls).__init__(name,bases,dct)\n  if'pattern'in dct:\n   pattern=cls.pattern\n  else :\n   pattern=_TemplateMetaclass.pattern %{\n   'delim':_re.escape(cls.delimiter),\n   'id':cls.idpattern,\n   }\n  cls.pattern=_re.compile(pattern,cls.flags |_re.VERBOSE)\n  \n  \nclass Template(metaclass=_TemplateMetaclass):\n ''\n \n delimiter='$'\n idpattern=r'[_a-z][_a-z0-9]*'\n flags=_re.IGNORECASE\n \n def __init__(self,template):\n  self.template=template\n  \n  \n  \n def _invalid(self,mo):\n  i=mo.start('invalid')\n  lines=self.template[:i].splitlines(keepends=True )\n  if not lines:\n   colno=1\n   lineno=1\n  else :\n   colno=i -len(''.join(lines[:-1]))\n   lineno=len(lines)\n  raise ValueError('Invalid placeholder in string: line %d, col %d'%\n  (lineno,colno))\n  \n def substitute(self,*args,**kws):\n  if len(args)>1:\n   raise TypeError('Too many positional arguments')\n  if not args:\n   mapping=kws\n  elif kws:\n   mapping=ChainMap(kws,args[0])\n  else :\n   mapping=args[0]\n   \n  def convert(mo):\n  \n   named=mo.group('named')or mo.group('braced')\n   if named is not None :\n    val=mapping[named]\n    \n    \n    return'%s'%(val,)\n   if mo.group('escaped')is not None :\n    return self.delimiter\n   if mo.group('invalid')is not None :\n    self._invalid(mo)\n   raise ValueError('Unrecognized named group in pattern',\n   self.pattern)\n  return self.pattern.sub(convert,self.template)\n  \n def safe_substitute(self,*args,**kws):\n  if len(args)>1:\n   raise TypeError('Too many positional arguments')\n  if not args:\n   mapping=kws\n  elif kws:\n   mapping=ChainMap(kws,args[0])\n  else :\n   mapping=args[0]\n   \n  def convert(mo):\n   named=mo.group('named')or mo.group('braced')\n   if named is not None :\n    try :\n    \n    \n     return'%s'%(mapping[named],)\n    except KeyError:\n     return mo.group()\n   if mo.group('escaped')is not None :\n    return self.delimiter\n   if mo.group('invalid')is not None :\n    return mo.group()\n   raise ValueError('Unrecognized named group in pattern',\n   self.pattern)\n  return self.pattern.sub(convert,self.template)\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \nclass Formatter:\n def format(self,format_string,*args,**kwargs):\n  return format_string.format(*args,**kwargs)\n"], "_threading_local": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfrom weakref import ref\nfrom contextlib import contextmanager\n\n__all__=[\"local\"]\n\n\n\n\n\n\n\n\n\n\n\nclass _localimpl:\n ''\n __slots__='key','dicts','localargs','locallock','__weakref__'\n \n def __init__(self):\n \n \n \n  self.key='_threading_local._localimpl.'+str(id(self))\n  \n  self.dicts={}\n  \n def get_dict(self):\n  ''\n  \n  thread=current_thread()\n  return self.dicts[id(thread)][1]\n  \n def create_dict(self):\n  ''\n  localdict={}\n  key=self.key\n  thread=current_thread()\n  idt=id(thread)\n  def local_deleted(_,key=key):\n  \n   thread=wrthread()\n   if thread is not None :\n    del thread.__dict__[key]\n  def thread_deleted(_,idt=idt):\n  \n  \n  \n  \n   local=wrlocal()\n   if local is not None :\n    dct=local.dicts.pop(idt)\n  wrlocal=ref(self,local_deleted)\n  wrthread=ref(thread,thread_deleted)\n  thread.__dict__[key]=wrlocal\n  self.dicts[idt]=wrthread,localdict\n  return localdict\n  \n  \n@contextmanager\ndef _patch(self):\n impl=object.__getattribute__(self,'_local__impl')\n try :\n  dct=impl.get_dict()\n except KeyError:\n  dct=impl.create_dict()\n  args,kw=impl.localargs\n  self.__init__(*args,**kw)\n with impl.locallock:\n  object.__setattr__(self,'__dict__',dct)\n  yield\n  \n  \nclass local:\n __slots__='_local__impl','__dict__'\n \n def __new__(cls,*args,**kw):\n  if (args or kw)and (cls.__init__ is object.__init__):\n   raise TypeError(\"Initialization arguments are not supported\")\n  self=object.__new__(cls)\n  impl=_localimpl()\n  impl.localargs=(args,kw)\n  impl.locallock=RLock()\n  object.__setattr__(self,'_local__impl',impl)\n  \n  \n  \n  impl.create_dict()\n  return self\n  \n def __getattribute__(self,name):\n  with _patch(self):\n   return object.__getattribute__(self,name)\n   \n def __setattr__(self,name,value):\n  if name =='__dict__':\n   raise AttributeError(\n   \"%r object attribute '__dict__' is read-only\"\n   %self.__class__.__name__)\n  with _patch(self):\n   return object.__setattr__(self,name,value)\n   \n def __delattr__(self,name):\n  if name =='__dict__':\n   raise AttributeError(\n   \"%r object attribute '__dict__' is read-only\"\n   %self.__class__.__name__)\n  with _patch(self):\n   return object.__delattr__(self,name)\n   \n   \nfrom threading import current_thread,RLock\n"], "json": [".js", "var $module = (function($B){\n\nreturn  {\n    loads : function(json_obj){return $B.jsobject2pyobject(JSON.parse(json_obj))},\n    dumps : function(obj){return JSON.stringify($B.pyobject2jsobject(obj))},\n}\n\n})(__BRYTHON__)\n"], "encodings.iso8859_14": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-14',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u1e02'\n'\\u1e03'\n'\\xa3'\n'\\u010a'\n'\\u010b'\n'\\u1e0a'\n'\\xa7'\n'\\u1e80'\n'\\xa9'\n'\\u1e82'\n'\\u1e0b'\n'\\u1ef2'\n'\\xad'\n'\\xae'\n'\\u0178'\n'\\u1e1e'\n'\\u1e1f'\n'\\u0120'\n'\\u0121'\n'\\u1e40'\n'\\u1e41'\n'\\xb6'\n'\\u1e56'\n'\\u1e81'\n'\\u1e57'\n'\\u1e83'\n'\\u1e60'\n'\\u1ef3'\n'\\u1e84'\n'\\u1e85'\n'\\u1e61'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u0174'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\u1e6a'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\u0176'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\u0175'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\u1e6b'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\u0177'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "shutil": [".py", "''\n\n\n\n\n\nimport os\nimport sys\nimport stat\nfrom os.path import abspath\nimport fnmatch\nimport collections\nimport errno\nimport tarfile\n\n\"\"\"try:\n    import bz2\n    del bz2\n    _BZ2_SUPPORTED = True\nexcept ImportError:\n    _BZ2_SUPPORTED = False\"\"\"\n\n_BZ2_SUPPORTED=False\n\ntry :\n from pwd import getpwnam\nexcept ImportError:\n getpwnam=None\n \n\"\"\"try:\n    from grp import getgrnam\nexcept ImportError:\n    getgrnam = None\"\"\"\n\ngetgrnam=None\n\n__all__=[\"copyfileobj\",\"copyfile\",\"copymode\",\"copystat\",\"copy\",\"copy2\",\n\"copytree\",\"move\",\"rmtree\",\"Error\",\"SpecialFileError\",\n\"ExecError\",\"make_archive\",\"get_archive_formats\",\n\"register_archive_format\",\"unregister_archive_format\",\n\"get_unpack_formats\",\"register_unpack_format\",\n\"unregister_unpack_format\",\"unpack_archive\",\n\"ignore_patterns\",\"chown\",\"which\"]\n\n\nclass Error(EnvironmentError):\n pass\n \nclass SpecialFileError(EnvironmentError):\n ''\n \n \nclass ExecError(EnvironmentError):\n ''\n \nclass ReadError(EnvironmentError):\n ''\n \nclass RegistryError(Exception):\n ''\n \n \n \ntry :\n WindowsError\nexcept NameError:\n WindowsError=None\n \ndef copyfileobj(fsrc,fdst,length=16 *1024):\n ''\n while 1:\n  buf=fsrc.read(length)\n  if not buf:\n   break\n  fdst.write(buf)\n  \ndef _samefile(src,dst):\n\n if hasattr(os.path,'samefile'):\n  try :\n   return os.path.samefile(src,dst)\n  except OSError:\n   return False\n   \n   \n return (os.path.normcase(os.path.abspath(src))==\n os.path.normcase(os.path.abspath(dst)))\n \ndef copyfile(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n \n if _samefile(src,dst):\n  raise Error(\"`%s` and `%s` are the same file\"%(src,dst))\n  \n for fn in [src,dst]:\n  try :\n   st=os.stat(fn)\n  except OSError:\n  \n   pass\n  else :\n  \n   if stat.S_ISFIFO(st.st_mode):\n    raise SpecialFileError(\"`%s` is a named pipe\"%fn)\n    \n if not follow_symlinks and os.path.islink(src):\n  os.symlink(os.readlink(src),dst)\n else :\n  with open(src,'rb')as fsrc:\n   with open(dst,'wb')as fdst:\n    copyfileobj(fsrc,fdst)\n return dst\n \ndef copymode(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n\n \n if not follow_symlinks and os.path.islink(src)and os.path.islink(dst):\n  if hasattr(os,'lchmod'):\n   stat_func,chmod_func=os.lstat,os.lchmod\n  else :\n   return\n elif hasattr(os,'chmod'):\n  stat_func,chmod_func=os.stat,os.chmod\n else :\n  return\n  \n st=stat_func(src)\n chmod_func(dst,stat.S_IMODE(st.st_mode))\n \nif hasattr(os,'listxattr'):\n def _copyxattr(src,dst,*,follow_symlinks=True ):\n  ''\n\n\n\n\n\n  \n  \n  try :\n   names=os.listxattr(src,follow_symlinks=follow_symlinks)\n  except OSError as e:\n   if e.errno not in (errno.ENOTSUP,errno.ENODATA):\n    raise\n   return\n  for name in names:\n   try :\n    value=os.getxattr(src,name,follow_symlinks=follow_symlinks)\n    os.setxattr(dst,name,value,follow_symlinks=follow_symlinks)\n   except OSError as e:\n    if e.errno not in (errno.EPERM,errno.ENOTSUP,errno.ENODATA):\n     raise\nelse :\n def _copyxattr(*args,**kwargs):\n  pass\n  \ndef copystat(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n \n def _nop(*args,ns=None ,follow_symlinks=None ):\n  pass\n  \n  \n follow=follow_symlinks or not (os.path.islink(src)and os.path.islink(dst))\n if follow:\n \n  def lookup(name):\n   return getattr(os,name,_nop)\n else :\n \n \n  def lookup(name):\n   fn=getattr(os,name,_nop)\n   if fn in os.supports_follow_symlinks:\n    return fn\n   return _nop\n   \n st=lookup(\"stat\")(src,follow_symlinks=follow)\n mode=stat.S_IMODE(st.st_mode)\n lookup(\"utime\")(dst,ns=(st.st_atime_ns,st.st_mtime_ns),\n follow_symlinks=follow)\n try :\n  lookup(\"chmod\")(dst,mode,follow_symlinks=follow)\n except NotImplementedError:\n \n \n \n \n \n \n \n \n \n \n  pass\n if hasattr(st,'st_flags'):\n  try :\n   lookup(\"chflags\")(dst,st.st_flags,follow_symlinks=follow)\n  except OSError as why:\n   for err in'EOPNOTSUPP','ENOTSUP':\n    if hasattr(errno,err)and why.errno ==getattr(errno,err):\n     break\n   else :\n    raise\n _copyxattr(src,dst,follow_symlinks=follow)\n \ndef copy(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n\n\n \n if os.path.isdir(dst):\n  dst=os.path.join(dst,os.path.basename(src))\n copyfile(src,dst,follow_symlinks=follow_symlinks)\n copymode(src,dst,follow_symlinks=follow_symlinks)\n return dst\n \ndef copy2(src,dst,*,follow_symlinks=True ):\n ''\n\n\n\n\n\n\n\n \n if os.path.isdir(dst):\n  dst=os.path.join(dst,os.path.basename(src))\n copyfile(src,dst,follow_symlinks=follow_symlinks)\n copystat(src,dst,follow_symlinks=follow_symlinks)\n return dst\n \ndef ignore_patterns(*patterns):\n ''\n\n\n \n def _ignore_patterns(path,names):\n  ignored_names=[]\n  for pattern in patterns:\n   ignored_names.extend(fnmatch.filter(names,pattern))\n  return set(ignored_names)\n return _ignore_patterns\n \ndef copytree(src,dst,symlinks=False ,ignore=None ,copy_function=copy2,\nignore_dangling_symlinks=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n names=os.listdir(src)\n if ignore is not None :\n  ignored_names=ignore(src,names)\n else :\n  ignored_names=set()\n  \n os.makedirs(dst)\n errors=[]\n for name in names:\n  if name in ignored_names:\n   continue\n  srcname=os.path.join(src,name)\n  dstname=os.path.join(dst,name)\n  try :\n   if os.path.islink(srcname):\n    linkto=os.readlink(srcname)\n    if symlinks:\n    \n    \n    \n     os.symlink(linkto,dstname)\n     copystat(srcname,dstname,follow_symlinks=not symlinks)\n    else :\n    \n     if not os.path.exists(linkto)and ignore_dangling_symlinks:\n      continue\n      \n     copy_function(srcname,dstname)\n   elif os.path.isdir(srcname):\n    copytree(srcname,dstname,symlinks,ignore,copy_function)\n   else :\n   \n    copy_function(srcname,dstname)\n    \n    \n  except Error as err:\n   errors.extend(err.args[0])\n  except EnvironmentError as why:\n   errors.append((srcname,dstname,str(why)))\n try :\n  copystat(src,dst)\n except OSError as why:\n  if WindowsError is not None and isinstance(why,WindowsError):\n  \n   pass\n  else :\n   errors.append((src,dst,str(why)))\n if errors:\n  raise Error(errors)\n return dst\n \n \ndef _rmtree_unsafe(path,onerror):\n try :\n  if os.path.islink(path):\n  \n   raise OSError(\"Cannot call rmtree on a symbolic link\")\n except OSError:\n  onerror(os.path.islink,path,sys.exc_info())\n  \n  return\n names=[]\n try :\n  names=os.listdir(path)\n except os.error:\n  onerror(os.listdir,path,sys.exc_info())\n for name in names:\n  fullname=os.path.join(path,name)\n  try :\n   mode=os.lstat(fullname).st_mode\n  except os.error:\n   mode=0\n  if stat.S_ISDIR(mode):\n   _rmtree_unsafe(fullname,onerror)\n  else :\n   try :\n    os.unlink(fullname)\n   except os.error:\n    onerror(os.unlink,fullname,sys.exc_info())\n try :\n  os.rmdir(path)\n except os.error:\n  onerror(os.rmdir,path,sys.exc_info())\n  \n  \ndef _rmtree_safe_fd(topfd,path,onerror):\n names=[]\n try :\n  names=os.listdir(topfd)\n except OSError as err:\n  err.filename=path\n  onerror(os.listdir,path,sys.exc_info())\n for name in names:\n  fullname=os.path.join(path,name)\n  try :\n   orig_st=os.stat(name,dir_fd=topfd,follow_symlinks=False )\n   mode=orig_st.st_mode\n  except OSError:\n   mode=0\n  if stat.S_ISDIR(mode):\n   try :\n    dirfd=os.open(name,os.O_RDONLY,dir_fd=topfd)\n   except OSError:\n    onerror(os.open,fullname,sys.exc_info())\n   else :\n    try :\n     if os.path.samestat(orig_st,os.fstat(dirfd)):\n      _rmtree_safe_fd(dirfd,fullname,onerror)\n      try :\n       os.rmdir(name,dir_fd=topfd)\n      except OSError:\n       onerror(os.rmdir,fullname,sys.exc_info())\n     else :\n      try :\n      \n      \n      \n       raise OSError(\"Cannot call rmtree on a symbolic \"\n       \"link\")\n      except OSError:\n       onerror(os.path.islink,fullname,sys.exc_info())\n    finally :\n     os.close(dirfd)\n  else :\n   try :\n    os.unlink(name,dir_fd=topfd)\n   except OSError:\n    onerror(os.unlink,fullname,sys.exc_info())\n    \n_use_fd_functions=({os.open,os.stat,os.unlink,os.rmdir}<=\nos.supports_dir_fd and\nos.listdir in os.supports_fd and\nos.stat in os.supports_follow_symlinks)\n\ndef rmtree(path,ignore_errors=False ,onerror=None ):\n ''\n\n\n\n\n\n\n\n\n \n if ignore_errors:\n  def onerror(*args):\n   pass\n elif onerror is None :\n  def onerror(*args):\n   raise\n if _use_fd_functions:\n \n  if isinstance(path,bytes):\n   path=os.fsdecode(path)\n   \n   \n  try :\n   orig_st=os.lstat(path)\n  except Exception:\n   onerror(os.lstat,path,sys.exc_info())\n   return\n  try :\n   fd=os.open(path,os.O_RDONLY)\n  except Exception:\n   onerror(os.lstat,path,sys.exc_info())\n   return\n  try :\n   if os.path.samestat(orig_st,os.fstat(fd)):\n    _rmtree_safe_fd(fd,path,onerror)\n    try :\n     os.rmdir(path)\n    except os.error:\n     onerror(os.rmdir,path,sys.exc_info())\n   else :\n    try :\n    \n     raise OSError(\"Cannot call rmtree on a symbolic link\")\n    except OSError:\n     onerror(os.path.islink,path,sys.exc_info())\n  finally :\n   os.close(fd)\n else :\n  return _rmtree_unsafe(path,onerror)\n  \n  \n  \nrmtree.avoids_symlink_attacks=_use_fd_functions\n\ndef _basename(path):\n\n\n return os.path.basename(path.rstrip(os.path.sep))\n \ndef move(src,dst):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n real_dst=dst\n if os.path.isdir(dst):\n  if _samefile(src,dst):\n  \n  \n   os.rename(src,dst)\n   return\n   \n  real_dst=os.path.join(dst,_basename(src))\n  if os.path.exists(real_dst):\n   raise Error(\"Destination path '%s' already exists\"%real_dst)\n try :\n  os.rename(src,real_dst)\n except OSError:\n  if os.path.islink(src):\n   linkto=os.readlink(src)\n   os.symlink(linkto,real_dst)\n   os.unlink(src)\n  elif os.path.isdir(src):\n   if _destinsrc(src,dst):\n    raise Error(\"Cannot move a directory '%s' into itself '%s'.\"%(src,dst))\n   copytree(src,real_dst,symlinks=True )\n   rmtree(src)\n  else :\n   copy2(src,real_dst)\n   os.unlink(src)\n return real_dst\n \ndef _destinsrc(src,dst):\n src=abspath(src)\n dst=abspath(dst)\n if not src.endswith(os.path.sep):\n  src +=os.path.sep\n if not dst.endswith(os.path.sep):\n  dst +=os.path.sep\n return dst.startswith(src)\n \ndef _get_gid(name):\n ''\n if getgrnam is None or name is None :\n  return None\n try :\n  result=getgrnam(name)\n except KeyError:\n  result=None\n if result is not None :\n  return result[2]\n return None\n \ndef _get_uid(name):\n ''\n if getpwnam is None or name is None :\n  return None\n try :\n  result=getpwnam(name)\n except KeyError:\n  result=None\n if result is not None :\n  return result[2]\n return None\n \ndef _make_tarball(base_name,base_dir,compress=\"gzip\",verbose=0,dry_run=0,\nowner=None ,group=None ,logger=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n tar_compression={'gzip':'gz',None :''}\n compress_ext={'gzip':'.gz'}\n \n if _BZ2_SUPPORTED:\n  tar_compression['bzip2']='bz2'\n  compress_ext['bzip2']='.bz2'\n  \n  \n if compress is not None and compress not in compress_ext:\n  raise ValueError(\"bad value for 'compress', or compression format not \"\n  \"supported : {0}\".format(compress))\n  \n archive_name=base_name+'.tar'+compress_ext.get(compress,'')\n archive_dir=os.path.dirname(archive_name)\n \n if not os.path.exists(archive_dir):\n  if logger is not None :\n   logger.info(\"creating %s\",archive_dir)\n  if not dry_run:\n   os.makedirs(archive_dir)\n   \n   \n if logger is not None :\n  logger.info('Creating tar archive')\n  \n uid=_get_uid(owner)\n gid=_get_gid(group)\n \n def _set_uid_gid(tarinfo):\n  if gid is not None :\n   tarinfo.gid=gid\n   tarinfo.gname=group\n  if uid is not None :\n   tarinfo.uid=uid\n   tarinfo.uname=owner\n  return tarinfo\n  \n if not dry_run:\n  tar=tarfile.open(archive_name,'w|%s'%tar_compression[compress])\n  try :\n   tar.add(base_dir,filter=_set_uid_gid)\n  finally :\n   tar.close()\n   \n return archive_name\n \ndef _call_external_zip(base_dir,zip_filename,verbose=False ,dry_run=False ):\n\n if verbose:\n  zipoptions=\"-r\"\n else :\n  zipoptions=\"-rq\"\n from distutils.errors import DistutilsExecError\n from distutils.spawn import spawn\n try :\n  spawn([\"zip\",zipoptions,zip_filename,base_dir],dry_run=dry_run)\n except DistutilsExecError:\n \n \n  raise ExecError(\"unable to create zip file '%s': \"\n  \"could neither import the 'zipfile' module nor \"\n  \"find a standalone zip utility\")%zip_filename\n  \ndef _make_zipfile(base_name,base_dir,verbose=0,dry_run=0,logger=None ):\n ''\n\n\n\n\n\n\n \n zip_filename=base_name+\".zip\"\n archive_dir=os.path.dirname(base_name)\n \n if not os.path.exists(archive_dir):\n  if logger is not None :\n   logger.info(\"creating %s\",archive_dir)\n  if not dry_run:\n   os.makedirs(archive_dir)\n   \n   \n   \n try :\n  import zipfile\n except ImportError:\n  zipfile=None\n  \n if zipfile is None :\n  _call_external_zip(base_dir,zip_filename,verbose,dry_run)\n else :\n  if logger is not None :\n   logger.info(\"creating '%s' and adding '%s' to it\",\n   zip_filename,base_dir)\n   \n  if not dry_run:\n   zip=zipfile.ZipFile(zip_filename,\"w\",\n   compression=zipfile.ZIP_DEFLATED)\n   \n   for dirpath,dirnames,filenames in os.walk(base_dir):\n    for name in filenames:\n     path=os.path.normpath(os.path.join(dirpath,name))\n     if os.path.isfile(path):\n      zip.write(path,path)\n      if logger is not None :\n       logger.info(\"adding '%s'\",path)\n   zip.close()\n   \n return zip_filename\n \n_ARCHIVE_FORMATS={\n'gztar':(_make_tarball,[('compress','gzip')],\"gzip'ed tar-file\"),\n'tar':(_make_tarball,[('compress',None )],\"uncompressed tar file\"),\n'zip':(_make_zipfile,[],\"ZIP file\")\n}\n\nif _BZ2_SUPPORTED:\n _ARCHIVE_FORMATS['bztar']=(_make_tarball,[('compress','bzip2')],\n \"bzip2'ed tar-file\")\n \ndef get_archive_formats():\n ''\n\n\n \n formats=[(name,registry[2])for name,registry in\n _ARCHIVE_FORMATS.items()]\n formats.sort()\n return formats\n \ndef register_archive_format(name,function,extra_args=None ,description=''):\n ''\n\n\n\n\n\n\n \n if extra_args is None :\n  extra_args=[]\n if not callable(function):\n  raise TypeError('The %s object is not callable'%function)\n if not isinstance(extra_args,(tuple,list)):\n  raise TypeError('extra_args needs to be a sequence')\n for element in extra_args:\n  if not isinstance(element,(tuple,list))or len(element)!=2:\n   raise TypeError('extra_args elements are : (arg_name, value)')\n   \n _ARCHIVE_FORMATS[name]=(function,extra_args,description)\n \ndef unregister_archive_format(name):\n del _ARCHIVE_FORMATS[name]\n \ndef make_archive(base_name,format,root_dir=None ,base_dir=None ,verbose=0,\ndry_run=0,owner=None ,group=None ,logger=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n save_cwd=os.getcwd()\n if root_dir is not None :\n  if logger is not None :\n   logger.debug(\"changing into '%s'\",root_dir)\n  base_name=os.path.abspath(base_name)\n  if not dry_run:\n   os.chdir(root_dir)\n   \n if base_dir is None :\n  base_dir=os.curdir\n  \n kwargs={'dry_run':dry_run,'logger':logger}\n \n try :\n  format_info=_ARCHIVE_FORMATS[format]\n except KeyError:\n  raise ValueError(\"unknown archive format '%s'\"%format)\n  \n func=format_info[0]\n for arg,val in format_info[1]:\n  kwargs[arg]=val\n  \n if format !='zip':\n  kwargs['owner']=owner\n  kwargs['group']=group\n  \n try :\n  filename=func(base_name,base_dir,**kwargs)\n finally :\n  if root_dir is not None :\n   if logger is not None :\n    logger.debug(\"changing back to '%s'\",save_cwd)\n   os.chdir(save_cwd)\n   \n return filename\n \n \ndef get_unpack_formats():\n ''\n\n\n\n \n formats=[(name,info[0],info[3])for name,info in\n _UNPACK_FORMATS.items()]\n formats.sort()\n return formats\n \ndef _check_unpack_options(extensions,function,extra_args):\n ''\n \n existing_extensions={}\n for name,info in _UNPACK_FORMATS.items():\n  for ext in info[0]:\n   existing_extensions[ext]=name\n   \n for extension in extensions:\n  if extension in existing_extensions:\n   msg='%s is already registered for \"%s\"'\n   raise RegistryError(msg %(extension,\n   existing_extensions[extension]))\n   \n if not callable(function):\n  raise TypeError('The registered function must be a callable')\n  \n  \ndef register_unpack_format(name,extensions,function,extra_args=None ,\ndescription=''):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if extra_args is None :\n  extra_args=[]\n _check_unpack_options(extensions,function,extra_args)\n _UNPACK_FORMATS[name]=extensions,function,extra_args,description\n \ndef unregister_unpack_format(name):\n ''\n del _UNPACK_FORMATS[name]\n \ndef _ensure_directory(path):\n ''\n dirname=os.path.dirname(path)\n if not os.path.isdir(dirname):\n  os.makedirs(dirname)\n  \ndef _unpack_zipfile(filename,extract_dir):\n ''\n \n try :\n  import zipfile\n except ImportError:\n  raise ReadError('zlib not supported, cannot unpack this archive.')\n  \n if not zipfile.is_zipfile(filename):\n  raise ReadError(\"%s is not a zip file\"%filename)\n  \n zip=zipfile.ZipFile(filename)\n try :\n  for info in zip.infolist():\n   name=info.filename\n   \n   \n   if name.startswith('/')or'..'in name:\n    continue\n    \n   target=os.path.join(extract_dir,*name.split('/'))\n   if not target:\n    continue\n    \n   _ensure_directory(target)\n   if not name.endswith('/'):\n   \n    data=zip.read(info.filename)\n    f=open(target,'wb')\n    try :\n     f.write(data)\n    finally :\n     f.close()\n     del data\n finally :\n  zip.close()\n  \ndef _unpack_tarfile(filename,extract_dir):\n ''\n \n try :\n  tarobj=tarfile.open(filename)\n except tarfile.TarError:\n  raise ReadError(\n  \"%s is not a compressed or uncompressed tar file\"%filename)\n try :\n  tarobj.extractall(extract_dir)\n finally :\n  tarobj.close()\n  \n_UNPACK_FORMATS={\n'gztar':(['.tar.gz','.tgz'],_unpack_tarfile,[],\"gzip'ed tar-file\"),\n'tar':(['.tar'],_unpack_tarfile,[],\"uncompressed tar file\"),\n'zip':(['.zip'],_unpack_zipfile,[],\"ZIP file\")\n}\n\nif _BZ2_SUPPORTED:\n _UNPACK_FORMATS['bztar']=(['.bz2'],_unpack_tarfile,[],\n \"bzip2'ed tar-file\")\n \ndef _find_unpack_format(filename):\n for name,info in _UNPACK_FORMATS.items():\n  for extension in info[0]:\n   if filename.endswith(extension):\n    return name\n return None\n \ndef unpack_archive(filename,extract_dir=None ,format=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n if extract_dir is None :\n  extract_dir=os.getcwd()\n  \n if format is not None :\n  try :\n   format_info=_UNPACK_FORMATS[format]\n  except KeyError:\n   raise ValueError(\"Unknown unpack format '{0}'\".format(format))\n   \n  func=format_info[1]\n  func(filename,extract_dir,**dict(format_info[2]))\n else :\n \n  format=_find_unpack_format(filename)\n  if format is None :\n   raise ReadError(\"Unknown archive format '{0}'\".format(filename))\n   \n  func=_UNPACK_FORMATS[format][1]\n  kwargs=dict(_UNPACK_FORMATS[format][2])\n  func(filename,extract_dir,**kwargs)\n  \n  \nif hasattr(os,'statvfs'):\n\n __all__.append('disk_usage')\n _ntuple_diskusage=collections.namedtuple('usage','total used free')\n \n def disk_usage(path):\n  ''\n\n\n\n  \n  st=os.statvfs(path)\n  free=st.f_bavail *st.f_frsize\n  total=st.f_blocks *st.f_frsize\n  used=(st.f_blocks -st.f_bfree)*st.f_frsize\n  return _ntuple_diskusage(total,used,free)\n  \nelif os.name =='nt':\n\n import nt\n __all__.append('disk_usage')\n _ntuple_diskusage=collections.namedtuple('usage','total used free')\n \n def disk_usage(path):\n  ''\n\n\n\n  \n  total,free=nt._getdiskusage(path)\n  used=total -free\n  return _ntuple_diskusage(total,used,free)\n  \n  \ndef chown(path,user=None ,group=None ):\n ''\n\n\n\n \n \n if user is None and group is None :\n  raise ValueError(\"user and/or group must be set\")\n  \n _user=user\n _group=group\n \n \n if user is None :\n  _user=-1\n  \n elif isinstance(user,str):\n  _user=_get_uid(user)\n  if _user is None :\n   raise LookupError(\"no such user: {!r}\".format(user))\n   \n if group is None :\n  _group=-1\n elif not isinstance(group,int):\n  _group=_get_gid(group)\n  if _group is None :\n   raise LookupError(\"no such group: {!r}\".format(group))\n   \n os.chown(path,_user,_group)\n \ndef get_terminal_size(fallback=(80,24)):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n try :\n  columns=int(os.environ['COLUMNS'])\n except (KeyError,ValueError):\n  columns=0\n  \n try :\n  lines=int(os.environ['LINES'])\n except (KeyError,ValueError):\n  lines=0\n  \n  \n if columns <=0 or lines <=0:\n  try :\n   size=os.get_terminal_size(sys.__stdout__.fileno())\n  except (NameError,OSError):\n   size=os.terminal_size(fallback)\n  if columns <=0:\n   columns=size.columns\n  if lines <=0:\n   lines=size.lines\n   \n return os.terminal_size((columns,lines))\n \ndef which(cmd,mode=os.F_OK |os.X_OK,path=None ):\n ''\n\n\n\n\n\n\n\n \n \n \n \n def _access_check(fn,mode):\n  return (os.path.exists(fn)and os.access(fn,mode)\n  and not os.path.isdir(fn))\n  \n  \n  \n  \n if os.path.dirname(cmd):\n  if _access_check(cmd,mode):\n   return cmd\n  return None\n  \n if path is None :\n  path=os.environ.get(\"PATH\",os.defpath)\n if not path:\n  return None\n path=path.split(os.pathsep)\n \n if sys.platform ==\"win32\":\n \n  if not os.curdir in path:\n   path.insert(0,os.curdir)\n   \n   \n  pathext=os.environ.get(\"PATHEXT\",\"\").split(os.pathsep)\n  \n  \n  \n  \n  if any(cmd.lower().endswith(ext.lower())for ext in pathext):\n   files=[cmd]\n  else :\n   files=[cmd+ext for ext in pathext]\n else :\n \n \n  files=[cmd]\n  \n seen=set()\n for dir in path:\n  normdir=os.path.normcase(dir)\n  if not normdir in seen:\n   seen.add(normdir)\n   for thefile in files:\n    name=os.path.join(dir,thefile)\n    if _access_check(name,mode):\n     return name\n return None\n"], "threading": [".py", "''\n\nimport sys as _sys\nimport _thread\n\nfrom time import sleep as _sleep\ntry :\n from time import monotonic as _time\nexcept ImportError:\n from time import time as _time\nfrom traceback import format_exc as _format_exc\nfrom _weakrefset import WeakSet\n\n\n\n\n\n\n\n\n\n\n\n__all__=['active_count','Condition','current_thread','enumerate','Event',\n'Lock','RLock','Semaphore','BoundedSemaphore','Thread','Barrier',\n'Timer','ThreadError','setprofile','settrace','local','stack_size']\n\n\n_start_new_thread=_thread.start_new_thread\n_allocate_lock=_thread.allocate_lock\nget_ident=_thread.get_ident\nThreadError=_thread.error\ntry :\n _CRLock=_thread.RLock\nexcept AttributeError:\n _CRLock=None\nTIMEOUT_MAX=_thread.TIMEOUT_MAX\ndel _thread\n\n\n\n\n_profile_hook=None\n_trace_hook=None\n\ndef setprofile(func):\n ''\n\n\n\n\n \n global _profile_hook\n _profile_hook=func\n \ndef settrace(func):\n ''\n\n\n\n\n \n global _trace_hook\n _trace_hook=func\n \n \n \nLock=_allocate_lock\n\ndef RLock(*args,**kwargs):\n ''\n\n\n\n\n\n\n \n if _CRLock is None :\n  return _PyRLock(*args,**kwargs)\n return _CRLock(*args,**kwargs)\n \nclass _RLock:\n ''\n\n\n\n\n\n\n \n \n def __init__(self):\n  self._block=_allocate_lock()\n  self._owner=None\n  self._count=0\n  \n def __repr__(self):\n  owner=self._owner\n  try :\n   owner=_active[owner].name\n  except KeyError:\n   pass\n  return\"<%s owner=%r count=%d>\"%(\n  self.__class__.__name__,owner,self._count)\n  \n def acquire(self,blocking=True ,timeout=-1):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  me=get_ident()\n  if self._owner ==me:\n   self._count=self._count+1\n   return 1\n  rc=self._block.acquire(blocking,timeout)\n  if rc:\n   self._owner=me\n   self._count=1\n  return rc\n  \n __enter__=acquire\n \n def release(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if self._owner !=get_ident():\n   raise RuntimeError(\"cannot release un-acquired lock\")\n  self._count=count=self._count -1\n  if not count:\n   self._owner=None\n   self._block.release()\n   \n def __exit__(self,t,v,tb):\n  self.release()\n  \n  \n  \n def _acquire_restore(self,state):\n  self._block.acquire()\n  self._count,self._owner=state\n  \n def _release_save(self):\n  if self._count ==0:\n   raise RuntimeError(\"cannot release un-acquired lock\")\n  count=self._count\n  self._count=0\n  owner=self._owner\n  self._owner=None\n  self._block.release()\n  return (count,owner)\n  \n def _is_owned(self):\n  return self._owner ==get_ident()\n  \n_PyRLock=_RLock\n\n\nclass Condition:\n ''\n\n\n\n\n\n\n\n\n \n \n def __init__(self,lock=None ):\n  if lock is None :\n   lock=RLock()\n  self._lock=lock\n  \n  self.acquire=lock.acquire\n  self.release=lock.release\n  \n  \n  \n  try :\n   self._release_save=lock._release_save\n  except AttributeError:\n   pass\n  try :\n   self._acquire_restore=lock._acquire_restore\n  except AttributeError:\n   pass\n  try :\n   self._is_owned=lock._is_owned\n  except AttributeError:\n   pass\n  self._waiters=[]\n  \n def __enter__(self):\n  return self._lock.__enter__()\n  \n def __exit__(self,*args):\n  return self._lock.__exit__(*args)\n  \n def __repr__(self):\n  return\"<Condition(%s, %d)>\"%(self._lock,len(self._waiters))\n  \n def _release_save(self):\n  self._lock.release()\n  \n def _acquire_restore(self,x):\n  self._lock.acquire()\n  \n def _is_owned(self):\n \n \n  if self._lock.acquire(0):\n   self._lock.release()\n   return False\n  else :\n   return True\n   \n def wait(self,timeout=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if not self._is_owned():\n   raise RuntimeError(\"cannot wait on un-acquired lock\")\n  waiter=_allocate_lock()\n  waiter.acquire()\n  self._waiters.append(waiter)\n  saved_state=self._release_save()\n  try :\n   if timeout is None :\n    waiter.acquire()\n    gotit=True\n   else :\n    if timeout >0:\n     gotit=waiter.acquire(True ,timeout)\n    else :\n     gotit=waiter.acquire(False )\n    if not gotit:\n     try :\n      self._waiters.remove(waiter)\n     except ValueError:\n      pass\n   return gotit\n  finally :\n   self._acquire_restore(saved_state)\n   \n def wait_for(self,predicate,timeout=None ):\n  ''\n\n\n\n\n\n  \n  endtime=None\n  waittime=timeout\n  result=predicate()\n  while not result:\n   if waittime is not None :\n    if endtime is None :\n     endtime=_time()+waittime\n    else :\n     waittime=endtime -_time()\n     if waittime <=0:\n      break\n   self.wait(waittime)\n   result=predicate()\n  return result\n  \n def notify(self,n=1):\n  ''\n\n\n\n\n\n\n\n  \n  if not self._is_owned():\n   raise RuntimeError(\"cannot notify on un-acquired lock\")\n  __waiters=self._waiters\n  waiters=__waiters[:n]\n  if not waiters:\n   return\n  for waiter in waiters:\n   waiter.release()\n   try :\n    __waiters.remove(waiter)\n   except ValueError:\n    pass\n    \n def notify_all(self):\n  ''\n\n\n\n\n  \n  self.notify(len(self._waiters))\n  \n notifyAll=notify_all\n \n \nclass Semaphore:\n ''\n\n\n\n\n\n\n \n \n \n \n def __init__(self,value=1):\n  if value <0:\n   raise ValueError(\"semaphore initial value must be >= 0\")\n  self._cond=Condition(Lock())\n  self._value=value\n  \n def acquire(self,blocking=True ,timeout=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if not blocking and timeout is not None :\n   raise ValueError(\"can't specify timeout for non-blocking acquire\")\n  rc=False\n  endtime=None\n  with self._cond:\n   while self._value ==0:\n    if not blocking:\n     break\n    if timeout is not None :\n     if endtime is None :\n      endtime=_time()+timeout\n     else :\n      timeout=endtime -_time()\n      if timeout <=0:\n       break\n    self._cond.wait(timeout)\n   else :\n    self._value=self._value -1\n    rc=True\n  return rc\n  \n __enter__=acquire\n \n def release(self):\n  ''\n\n\n\n\n  \n  with self._cond:\n   self._value=self._value+1\n   self._cond.notify()\n   \n def __exit__(self,t,v,tb):\n  self.release()\n  \n  \nclass BoundedSemaphore(Semaphore):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,value=1):\n  Semaphore.__init__(self,value)\n  self._initial_value=value\n  \n def release(self):\n  ''\n\n\n\n\n\n\n\n  \n  with self._cond:\n   if self._value >=self._initial_value:\n    raise ValueError(\"Semaphore released too many times\")\n   self._value +=1\n   self._cond.notify()\n   \n   \nclass Event:\n ''\n\n\n\n\n\n \n \n \n \n def __init__(self):\n  self._cond=Condition(Lock())\n  self._flag=False\n  \n def _reset_internal_locks(self):\n \n  self._cond.__init__()\n  \n def is_set(self):\n  ''\n  return self._flag\n  \n isSet=is_set\n \n def set(self):\n  ''\n\n\n\n\n  \n  self._cond.acquire()\n  try :\n   self._flag=True\n   self._cond.notify_all()\n  finally :\n   self._cond.release()\n   \n def clear(self):\n  ''\n\n\n\n\n  \n  self._cond.acquire()\n  try :\n   self._flag=False\n  finally :\n   self._cond.release()\n   \n def wait(self,timeout=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self._cond.acquire()\n  try :\n   signaled=self._flag\n   if not signaled:\n    signaled=self._cond.wait(timeout)\n   return signaled\n  finally :\n   self._cond.release()\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \nclass Barrier:\n ''\n\n\n\n\n\n \n \n def __init__(self,parties,action=None ,timeout=None ):\n  ''\n\n\n\n\n\n\n  \n  self._cond=Condition(Lock())\n  self._action=action\n  self._timeout=timeout\n  self._parties=parties\n  self._state=0\n  self._count=0\n  \n def wait(self,timeout=None ):\n  ''\n\n\n\n\n\n\n  \n  if timeout is None :\n   timeout=self._timeout\n  with self._cond:\n   self._enter()\n   index=self._count\n   self._count +=1\n   try :\n    if index+1 ==self._parties:\n    \n     self._release()\n    else :\n    \n     self._wait(timeout)\n    return index\n   finally :\n    self._count -=1\n    \n    self._exit()\n    \n    \n    \n def _enter(self):\n  while self._state in (-1,1):\n  \n   self._cond.wait()\n   \n  if self._state <0:\n   raise BrokenBarrierError\n  assert self._state ==0\n  \n  \n  \n def _release(self):\n  try :\n   if self._action:\n    self._action()\n    \n   self._state=1\n   self._cond.notify_all()\n  except :\n  \n   self._break()\n   raise\n   \n   \n   \n def _wait(self,timeout):\n  if not self._cond.wait_for(lambda :self._state !=0,timeout):\n  \n   self._break()\n   raise BrokenBarrierError\n  if self._state <0:\n   raise BrokenBarrierError\n  assert self._state ==1\n  \n  \n  \n def _exit(self):\n  if self._count ==0:\n   if self._state in (-1,1):\n   \n    self._state=0\n    self._cond.notify_all()\n    \n def reset(self):\n  ''\n\n\n\n\n  \n  with self._cond:\n   if self._count >0:\n    if self._state ==0:\n    \n     self._state=-1\n    elif self._state ==-2:\n    \n    \n     self._state=-1\n   else :\n    self._state=0\n   self._cond.notify_all()\n   \n def abort(self):\n  ''\n\n\n\n\n  \n  with self._cond:\n   self._break()\n   \n def _break(self):\n \n \n  self._state=-2\n  self._cond.notify_all()\n  \n @property\n def parties(self):\n  ''\n  return self._parties\n  \n @property\n def n_waiting(self):\n  ''\n  \n  \n  if self._state ==0:\n   return self._count\n  return 0\n  \n @property\n def broken(self):\n  ''\n  return self._state ==-2\n  \n  \nclass BrokenBarrierError(RuntimeError):\n pass\n \n \n \n_counter=0\ndef _newname(template=\"Thread-%d\"):\n global _counter\n _counter=_counter+1\n return template %_counter\n \n \n_active_limbo_lock=_allocate_lock()\n_active={}\n_limbo={}\n\n\n_dangling=WeakSet()\n\n\n\nclass Thread:\n ''\n\n\n\n\n\n \n \n __initialized=False\n \n \n \n \n __exc_info=_sys.exc_info\n \n \n \n \n def __init__(self,group=None ,target=None ,name=None ,\n args=(),kwargs=None ,*,daemon=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  assert group is None ,\"group argument must be None for now\"\n  if kwargs is None :\n   kwargs={}\n  self._target=target\n  self._name=str(name or _newname())\n  self._args=args\n  self._kwargs=kwargs\n  if daemon is not None :\n   self._daemonic=daemon\n  else :\n   self._daemonic=current_thread().daemon\n  self._ident=None\n  self._started=Event()\n  self._stopped=False\n  self._block=Condition(Lock())\n  self._initialized=True\n  \n  \n  self._stderr=_sys.stderr\n  _dangling.add(self)\n  \n def _reset_internal_locks(self):\n \n \n  if hasattr(self,'_block'):\n   self._block.__init__()\n  self._started._reset_internal_locks()\n  \n def __repr__(self):\n  assert self._initialized,\"Thread.__init__() was not called\"\n  status=\"initial\"\n  if self._started.is_set():\n   status=\"started\"\n  if self._stopped:\n   status=\"stopped\"\n  if self._daemonic:\n   status +=\" daemon\"\n  if self._ident is not None :\n   status +=\" %s\"%self._ident\n  return\"<%s(%s, %s)>\"%(self.__class__.__name__,self._name,status)\n  \n def start(self):\n  ''\n\n\n\n\n\n\n\n  \n  if not self._initialized:\n   raise RuntimeError(\"thread.__init__() not called\")\n   \n  if self._started.is_set():\n   raise RuntimeError(\"threads can only be started once\")\n  with _active_limbo_lock:\n   _limbo[self]=self\n  try :\n   _start_new_thread(self._bootstrap,())\n  except Exception:\n   with _active_limbo_lock:\n    del _limbo[self]\n   raise\n  self._started.wait()\n  \n def run(self):\n  ''\n\n\n\n\n\n\n  \n  try :\n   if self._target:\n    self._target(*self._args,**self._kwargs)\n  finally :\n  \n  \n   del self._target,self._args,self._kwargs\n   \n def _bootstrap(self):\n \n \n \n \n \n \n \n \n \n \n \n \n  try :\n   self._bootstrap_inner()\n  except :\n   if self._daemonic and _sys is None :\n    return\n   raise\n   \n def _set_ident(self):\n  self._ident=get_ident()\n  \n def _bootstrap_inner(self):\n  try :\n   self._set_ident()\n   self._started.set()\n   with _active_limbo_lock:\n    _active[self._ident]=self\n    del _limbo[self]\n    \n   if _trace_hook:\n    _sys.settrace(_trace_hook)\n   if _profile_hook:\n    _sys.setprofile(_profile_hook)\n    \n   try :\n    self.run()\n   except SystemExit:\n    pass\n   except :\n   \n   \n   \n   \n    if _sys:\n     _sys.stderr.write(\"Exception in thread %s:\\n%s\\n\"%\n     (self.name,_format_exc()))\n    else :\n    \n    \n    \n     exc_type,exc_value,exc_tb=self._exc_info()\n     try :\n      print((\n      \"Exception in thread \"+self.name+\n      \" (most likely raised during interpreter shutdown):\"),file=self._stderr)\n      print((\n      \"Traceback (most recent call last):\"),file=self._stderr)\n      while exc_tb:\n       print((\n       '  File \"%s\", line %s, in %s'%\n       (exc_tb.tb_frame.f_code.co_filename,\n       exc_tb.tb_lineno,\n       exc_tb.tb_frame.f_code.co_name)),file=self._stderr)\n       exc_tb=exc_tb.tb_next\n      print((\"%s: %s\"%(exc_type,exc_value)),file=self._stderr)\n      \n      \n     finally :\n      del exc_type,exc_value,exc_tb\n   finally :\n   \n   \n   \n   \n   \n    pass\n  finally :\n   with _active_limbo_lock:\n    self._stop()\n    try :\n    \n    \n     del _active[get_ident()]\n    except :\n     pass\n     \n def _stop(self):\n  self._block.acquire()\n  self._stopped=True\n  self._block.notify_all()\n  self._block.release()\n  \n def _delete(self):\n  ''\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  try :\n   with _active_limbo_lock:\n    del _active[get_ident()]\n    \n    \n    \n    \n  except KeyError:\n   if'dummy_threading'not in _sys.modules:\n    raise\n    \n def join(self,timeout=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if not self._initialized:\n   raise RuntimeError(\"Thread.__init__() not called\")\n  if not self._started.is_set():\n   raise RuntimeError(\"cannot join thread before it is started\")\n  if self is current_thread():\n   raise RuntimeError(\"cannot join current thread\")\n   \n  self._block.acquire()\n  try :\n   if timeout is None :\n    while not self._stopped:\n     self._block.wait()\n   else :\n    deadline=_time()+timeout\n    while not self._stopped:\n     delay=deadline -_time()\n     if delay <=0:\n      break\n     self._block.wait(delay)\n  finally :\n   self._block.release()\n   \n @property\n def name(self):\n  ''\n\n\n\n\n  \n  assert self._initialized,\"Thread.__init__() not called\"\n  return self._name\n  \n @name.setter\n def name(self,name):\n  assert self._initialized,\"Thread.__init__() not called\"\n  self._name=str(name)\n  \n @property\n def ident(self):\n  ''\n\n\n\n\n\n  \n  assert self._initialized,\"Thread.__init__() not called\"\n  return self._ident\n  \n def is_alive(self):\n  ''\n\n\n\n\n\n  \n  assert self._initialized,\"Thread.__init__() not called\"\n  return self._started.is_set()and not self._stopped\n  \n isAlive=is_alive\n \n @property\n def daemon(self):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  assert self._initialized,\"Thread.__init__() not called\"\n  return self._daemonic\n  \n @daemon.setter\n def daemon(self,daemonic):\n  if not self._initialized:\n   raise RuntimeError(\"Thread.__init__() not called\")\n  if self._started.is_set():\n   raise RuntimeError(\"cannot set daemon status of active thread\");\n  self._daemonic=daemonic\n  \n def isDaemon(self):\n  return self.daemon\n  \n def setDaemon(self,daemonic):\n  self.daemon=daemonic\n  \n def getName(self):\n  return self.name\n  \n def setName(self,name):\n  self.name=name\n  \n  \n  \nclass Timer(Thread):\n ''\n\n\n\n\n\n \n \n def __init__(self,interval,function,args=None ,kwargs=None ):\n  Thread.__init__(self)\n  self.interval=interval\n  self.function=function\n  self.args=args if args is not None else []\n  self.kwargs=kwargs if kwargs is not None else {}\n  self.finished=Event()\n  \n def cancel(self):\n  ''\n  self.finished.set()\n  \n def run(self):\n  self.finished.wait(self.interval)\n  if not self.finished.is_set():\n   self.function(*self.args,**self.kwargs)\n  self.finished.set()\n  \n  \n  \n  \nclass _MainThread(Thread):\n\n def __init__(self):\n  Thread.__init__(self,name=\"MainThread\",daemon=False )\n  self._started.set()\n  self._set_ident()\n  with _active_limbo_lock:\n   _active[self._ident]=self\n   \n def _exitfunc(self):\n  self._stop()\n  t=_pickSomeNonDaemonThread()\n  while t:\n   t.join()\n   t=_pickSomeNonDaemonThread()\n  self._delete()\n  \ndef _pickSomeNonDaemonThread():\n for t in enumerate():\n  if not t.daemon and t.is_alive():\n   return t\n return None\n \n \n \n \n \n \n \n \n \n \nclass _DummyThread(Thread):\n\n def __init__(self):\n  Thread.__init__(self,name=_newname(\"Dummy-%d\"),daemon=True )\n  \n  \n  \n  \n  del self._block\n  \n  self._started.set()\n  self._set_ident()\n  with _active_limbo_lock:\n   _active[self._ident]=self\n   \n def _stop(self):\n  pass\n  \n def join(self,timeout=None ):\n  assert False ,\"cannot join a dummy thread\"\n  \n  \n  \n  \ndef current_thread():\n ''\n\n\n\n\n \n try :\n  return _active[get_ident()]\n except KeyError:\n  return _DummyThread()\n  \ncurrentThread=current_thread\n\ndef active_count():\n ''\n\n\n\n\n \n with _active_limbo_lock:\n  return len(_active)+len(_limbo)\n  \nactiveCount=active_count\n\ndef _enumerate():\n\n return list(_active.values())+list(_limbo.values())\n \ndef enumerate():\n ''\n\n\n\n\n\n \n with _active_limbo_lock:\n  return list(_active.values())+list(_limbo.values())\n  \nfrom _thread import stack_size\n\n\n\n\n\n_shutdown=_MainThread()._exitfunc\n\n\n\n\ntry :\n from _thread import _local as local\nexcept ImportError:\n from _threading_local import local\n \n \ndef _after_fork():\n\n\n\n\n\n\n global _active_limbo_lock\n _active_limbo_lock=_allocate_lock()\n \n \n new_active={}\n current=current_thread()\n with _active_limbo_lock:\n  for thread in _enumerate():\n  \n  \n   thread._reset_internal_locks()\n   if thread is current:\n   \n   \n    ident=get_ident()\n    thread._ident=ident\n    new_active[ident]=thread\n   else :\n   \n    thread._stop()\n    \n  _limbo.clear()\n  _active.clear()\n  _active.update(new_active)\n  assert len(_active)==1\n"], "xml.sax.xmlreader": [".py", "''\n\n\nfrom .import handler\n\nfrom ._exceptions import SAXNotSupportedException,SAXNotRecognizedException\n\n\n\n\nclass XMLReader:\n ''\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self):\n  self._cont_handler=handler.ContentHandler()\n  self._dtd_handler=handler.DTDHandler()\n  self._ent_handler=handler.EntityResolver()\n  self._err_handler=handler.ErrorHandler()\n  \n def parse(self,source):\n  ''\n  raise NotImplementedError(\"This method must be implemented!\")\n  \n def getContentHandler(self):\n  ''\n  return self._cont_handler\n  \n def setContentHandler(self,handler):\n  ''\n  self._cont_handler=handler\n  \n def getDTDHandler(self):\n  ''\n  return self._dtd_handler\n  \n def setDTDHandler(self,handler):\n  ''\n  self._dtd_handler=handler\n  \n def getEntityResolver(self):\n  ''\n  return self._ent_handler\n  \n def setEntityResolver(self,resolver):\n  ''\n  self._ent_handler=resolver\n  \n def getErrorHandler(self):\n  ''\n  return self._err_handler\n  \n def setErrorHandler(self,handler):\n  ''\n  self._err_handler=handler\n  \n def setLocale(self,locale):\n  ''\n\n\n\n\n  \n  raise SAXNotSupportedException(\"Locale support not implemented\")\n  \n def getFeature(self,name):\n  ''\n  raise SAXNotRecognizedException(\"Feature '%s' not recognized\"%name)\n  \n def setFeature(self,name,state):\n  ''\n  raise SAXNotRecognizedException(\"Feature '%s' not recognized\"%name)\n  \n def getProperty(self,name):\n  ''\n  raise SAXNotRecognizedException(\"Property '%s' not recognized\"%name)\n  \n def setProperty(self,name,value):\n  ''\n  raise SAXNotRecognizedException(\"Property '%s' not recognized\"%name)\n  \nclass IncrementalParser(XMLReader):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,bufsize=2 **16):\n  self._bufsize=bufsize\n  XMLReader.__init__(self)\n  \n def parse(self,source):\n  from .import saxutils\n  source=saxutils.prepare_input_source(source)\n  \n  self.prepareParser(source)\n  file=source.getByteStream()\n  buffer=file.read(self._bufsize)\n  while buffer:\n   self.feed(buffer)\n   buffer=file.read(self._bufsize)\n  self.close()\n  \n def feed(self,data):\n  ''\n\n\n\n\n  \n  raise NotImplementedError(\"This method must be implemented!\")\n  \n def prepareParser(self,source):\n  ''\n  \n  raise NotImplementedError(\"prepareParser must be overridden!\")\n  \n def close(self):\n  ''\n\n\n\n\n\n\n\n\n  \n  raise NotImplementedError(\"This method must be implemented!\")\n  \n def reset(self):\n  ''\n\n\n  \n  raise NotImplementedError(\"This method must be implemented!\")\n  \n  \n  \nclass Locator:\n ''\n\n\n \n \n def getColumnNumber(self):\n  ''\n  return -1\n  \n def getLineNumber(self):\n  ''\n  return -1\n  \n def getPublicId(self):\n  ''\n  return None\n  \n def getSystemId(self):\n  ''\n  return None\n  \n  \n  \nclass InputSource:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,system_id=None ):\n  self.__system_id=system_id\n  self.__public_id=None\n  self.__encoding=None\n  self.__bytefile=None\n  self.__charfile=None\n  \n def setPublicId(self,public_id):\n  ''\n  self.__public_id=public_id\n  \n def getPublicId(self):\n  ''\n  return self.__public_id\n  \n def setSystemId(self,system_id):\n  ''\n  self.__system_id=system_id\n  \n def getSystemId(self):\n  ''\n  return self.__system_id\n  \n def setEncoding(self,encoding):\n  ''\n\n\n\n\n\n  \n  self.__encoding=encoding\n  \n def getEncoding(self):\n  ''\n  return self.__encoding\n  \n def setByteStream(self,bytefile):\n  ''\n\n\n\n\n\n\n\n\n  \n  self.__bytefile=bytefile\n  \n def getByteStream(self):\n  ''\n\n\n  \n  return self.__bytefile\n  \n def setCharacterStream(self,charfile):\n  ''\n\n\n\n\n\n  \n  self.__charfile=charfile\n  \n def getCharacterStream(self):\n  ''\n  return self.__charfile\n  \n  \n  \nclass AttributesImpl:\n\n def __init__(self,attrs):\n  ''\n\n  \n  self._attrs=attrs\n  \n def getLength(self):\n  return len(self._attrs)\n  \n def getType(self,name):\n  return\"CDATA\"\n  \n def getValue(self,name):\n  return self._attrs[name]\n  \n def getValueByQName(self,name):\n  return self._attrs[name]\n  \n def getNameByQName(self,name):\n  if name not in self._attrs:\n   raise KeyError(name)\n  return name\n  \n def getQNameByName(self,name):\n  if name not in self._attrs:\n   raise KeyError(name)\n  return name\n  \n def getNames(self):\n  return list(self._attrs.keys())\n  \n def getQNames(self):\n  return list(self._attrs.keys())\n  \n def __len__(self):\n  return len(self._attrs)\n  \n def __getitem__(self,name):\n  return self._attrs[name]\n  \n def keys(self):\n  return list(self._attrs.keys())\n  \n def __contains__(self,name):\n  return name in self._attrs\n  \n def get(self,name,alternative=None ):\n  return self._attrs.get(name,alternative)\n  \n def copy(self):\n  return self.__class__(self._attrs)\n  \n def items(self):\n  return list(self._attrs.items())\n  \n def values(self):\n  return list(self._attrs.values())\n  \n  \n  \nclass AttributesNSImpl(AttributesImpl):\n\n def __init__(self,attrs,qnames):\n  ''\n\n\n  \n  self._attrs=attrs\n  self._qnames=qnames\n  \n def getValueByQName(self,name):\n  for (nsname,qname)in self._qnames.items():\n   if qname ==name:\n    return self._attrs[nsname]\n    \n  raise KeyError(name)\n  \n def getNameByQName(self,name):\n  for (nsname,qname)in self._qnames.items():\n   if qname ==name:\n    return nsname\n    \n  raise KeyError(name)\n  \n def getQNameByName(self,name):\n  return self._qnames[name]\n  \n def getQNames(self):\n  return list(self._qnames.values())\n  \n def copy(self):\n  return self.__class__(self._attrs,self._qnames)\n  \n  \ndef _test():\n XMLReader()\n IncrementalParser()\n Locator()\n \nif __name__ ==\"__main__\":\n _test()\n"], "bisect": [".py", "''\n\ndef insort_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n \n \n if lo <0:\n  raise ValueError('lo must be non-negative')\n if hi is None :\n  hi=len(a)\n while lo <hi:\n  mid=(lo+hi)//2\n  if x <a[mid]:hi=mid\n  else :lo=mid+1\n a.insert(lo,x)\n \ninsort=insort_right\n\ndef bisect_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n\n\n \n \n if lo <0:\n  raise ValueError('lo must be non-negative')\n if hi is None :\n  hi=len(a)\n while lo <hi:\n  mid=(lo+hi)//2\n  if x <a[mid]:hi=mid\n  else :lo=mid+1\n return lo\n \nbisect=bisect_right\n\ndef insort_left(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n \n \n if lo <0:\n  raise ValueError('lo must be non-negative')\n if hi is None :\n  hi=len(a)\n while lo <hi:\n  mid=(lo+hi)//2\n  if a[mid]<x:lo=mid+1\n  else :hi=mid\n a.insert(lo,x)\n \n \ndef bisect_left(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n\n\n \n \n if lo <0:\n  raise ValueError('lo must be non-negative')\n if hi is None :\n  hi=len(a)\n while lo <hi:\n  mid=(lo+hi)//2\n  if a[mid]<x:lo=mid+1\n  else :hi=mid\n return lo\n \n \ntry :\n from _bisect import *\nexcept ImportError:\n pass\n"], "copy": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport types\nimport weakref\nfrom copyreg import dispatch_table\nimport builtins\n\nclass Error(Exception):\n pass\nerror=Error\n\n\n\n\n\n\n\nPyStringMap=None\n\n__all__=[\"Error\",\"copy\",\"deepcopy\"]\n\ndef copy(x):\n ''\n\n\n \n \n cls=type(x)\n \n copier=_copy_dispatch.get(cls)\n if copier:\n  return copier(x)\n  \n copier=getattr(cls,\"__copy__\",None )\n if copier:\n  return copier(x)\n  \n reductor=dispatch_table.get(cls)\n if reductor:\n  rv=reductor(x)\n else :\n  reductor=getattr(x,\"__reduce_ex__\",None )\n  if reductor:\n   rv=reductor(2)\n  else :\n   reductor=getattr(x,\"__reduce__\",None )\n   if reductor:\n    rv=reductor()\n   else :\n    raise Error(\"un(shallow)copyable object of type %s\"%cls)\n    \n return _reconstruct(x,rv,0)\n \n \n_copy_dispatch=d={}\n\ndef _copy_immutable(x):\n return x\nfor t in (type(None ),int,float,bool,str,tuple,\nfrozenset,type,range,\ntypes.BuiltinFunctionType,type(Ellipsis),\ntypes.FunctionType,weakref.ref):\n d[t]=_copy_immutable\nt=getattr(types,\"CodeType\",None )\nif t is not None :\n d[t]=_copy_immutable\nfor name in (\"complex\",\"unicode\"):\n t=getattr(builtins,name,None )\n if t is not None :\n  d[t]=_copy_immutable\n  \ndef _copy_with_constructor(x):\n return type(x)(x)\nfor t in (list,dict,set):\n d[t]=_copy_with_constructor\n \ndef _copy_with_copy_method(x):\n return x.copy()\nif PyStringMap is not None :\n d[PyStringMap]=_copy_with_copy_method\n \ndel d\n\ndef deepcopy(x,memo=None ,_nil=[]):\n ''\n\n\n \n \n if memo is None :\n  memo={}\n  \n d=id(x)\n y=memo.get(d,_nil)\n if y is not _nil:\n  return y\n  \n cls=type(x)\n \n copier=_deepcopy_dispatch.get(cls)\n if copier:\n  y=copier(x,memo)\n else :\n  try :\n   issc=issubclass(cls,type)\n  except TypeError:\n   issc=0\n  if issc:\n   y=_deepcopy_atomic(x,memo)\n  else :\n   copier=getattr(x,\"__deepcopy__\",None )\n   if copier:\n    y=copier(memo)\n   else :\n    reductor=dispatch_table.get(cls)\n    if reductor:\n     rv=reductor(x)\n    else :\n     reductor=getattr(x,\"__reduce_ex__\",None )\n     if reductor:\n      rv=reductor(2)\n     else :\n      reductor=getattr(x,\"__reduce__\",None )\n      if reductor:\n       rv=reductor()\n      else :\n       raise Error(\n       \"un(deep)copyable object of type %s\"%cls)\n    y=_reconstruct(x,rv,1,memo)\n    \n    \n if y is not x:\n  memo[d]=y\n  _keep_alive(x,memo)\n return y\n \n_deepcopy_dispatch=d={}\n\ndef _deepcopy_atomic(x,memo):\n return x\nd[type(None )]=_deepcopy_atomic\nd[type(Ellipsis)]=_deepcopy_atomic\nd[int]=_deepcopy_atomic\nd[float]=_deepcopy_atomic\nd[bool]=_deepcopy_atomic\ntry :\n d[complex]=_deepcopy_atomic\nexcept NameError:\n pass\nd[bytes]=_deepcopy_atomic\nd[str]=_deepcopy_atomic\ntry :\n d[types.CodeType]=_deepcopy_atomic\nexcept AttributeError:\n pass\nd[type]=_deepcopy_atomic\nd[range]=_deepcopy_atomic\nd[types.BuiltinFunctionType]=_deepcopy_atomic\nd[types.FunctionType]=_deepcopy_atomic\nd[weakref.ref]=_deepcopy_atomic\n\ndef _deepcopy_list(x,memo):\n y=[]\n memo[id(x)]=y\n for a in x:\n  y.append(deepcopy(a,memo))\n return y\nd[list]=_deepcopy_list\n\ndef _deepcopy_tuple(x,memo):\n y=[]\n for a in x:\n  y.append(deepcopy(a,memo))\n  \n  \n try :\n  return memo[id(x)]\n except KeyError:\n  pass\n for i in range(len(x)):\n  if x[i]is not y[i]:\n   y=tuple(y)\n   break\n else :\n  y=x\n return y\nd[tuple]=_deepcopy_tuple\n\ndef _deepcopy_dict(x,memo):\n y={}\n memo[id(x)]=y\n for key,value in x.items():\n  y[deepcopy(key,memo)]=deepcopy(value,memo)\n return y\nd[dict]=_deepcopy_dict\nif PyStringMap is not None :\n d[PyStringMap]=_deepcopy_dict\n \ndef _deepcopy_method(x,memo):\n return type(x)(x.__func__,deepcopy(x.__self__,memo))\n_deepcopy_dispatch[types.MethodType]=_deepcopy_method\n\ndef _keep_alive(x,memo):\n ''\n\n\n\n\n\n\n\n \n try :\n  memo[id(memo)].append(x)\n except KeyError:\n \n  memo[id(memo)]=[x]\n  \ndef _reconstruct(x,info,deep,memo=None ):\n if isinstance(info,str):\n  return x\n assert isinstance(info,tuple)\n if memo is None :\n  memo={}\n n=len(info)\n assert n in (2,3,4,5)\n callable,args=info[:2]\n if n >2:\n  state=info[2]\n else :\n  state={}\n if n >3:\n  listiter=info[3]\n else :\n  listiter=None\n if n >4:\n  dictiter=info[4]\n else :\n  dictiter=None\n if deep:\n  args=deepcopy(args,memo)\n y=callable(*args)\n memo[id(x)]=y\n \n if state:\n  if deep:\n   state=deepcopy(state,memo)\n  if hasattr(y,'__setstate__'):\n   y.__setstate__(state)\n  else :\n   if isinstance(state,tuple)and len(state)==2:\n    state,slotstate=state\n   else :\n    slotstate=None\n   if state is not None :\n    y.__dict__.update(state)\n   if slotstate is not None :\n    for key,value in slotstate.items():\n     setattr(y,key,value)\n     \n if listiter is not None :\n  for item in listiter:\n   if deep:\n    item=deepcopy(item,memo)\n   y.append(item)\n if dictiter is not None :\n  for key,value in dictiter:\n   if deep:\n    key=deepcopy(key,memo)\n    value=deepcopy(value,memo)\n   y[key]=value\n return y\n \ndel d\n\ndel types\n\n\nclass _EmptyClass:\n pass\n"], "_collections": [".py", "\n\n\n\n\n\n\n\n\n\nimport operator\n\n\n\ndef _thread_ident():\n return -1\n \n \nn=30\nLFTLNK=n\nRGTLNK=n+1\nBLOCKSIZ=n+2\n\n\n\n\n\n\n\n\nclass deque:\n\n def __new__(cls,iterable=(),*args,**kw):\n \n \n  self=object.__new__(cls,*args,**kw)\n  self.clear()\n  return self\n  \n def __init__(self,iterable=(),maxlen=None ):\n  object.__init__(self)\n  self.clear()\n  if maxlen is not None :\n   if maxlen <0:\n    raise ValueError(\"maxlen must be non-negative\")\n  self._maxlen=maxlen\n  add=self.append\n  for elem in iterable:\n   add(elem)\n   \n @property\n def maxlen(self):\n  return self._maxlen\n  \n def clear(self):\n  self.right=self.left=[None ]*BLOCKSIZ\n  self.rightndx=n //2\n  self.leftndx=n //2+1\n  self.length=0\n  self.state=0\n  \n def append(self,x):\n  self.state +=1\n  self.rightndx +=1\n  if self.rightndx ==n:\n   newblock=[None ]*BLOCKSIZ\n   self.right[RGTLNK]=newblock\n   newblock[LFTLNK]=self.right\n   self.right=newblock\n   self.rightndx=0\n  self.length +=1\n  self.right[self.rightndx]=x\n  if self.maxlen is not None and self.length >self.maxlen:\n   self.popleft()\n   \n def appendleft(self,x):\n  self.state +=1\n  self.leftndx -=1\n  if self.leftndx ==-1:\n   newblock=[None ]*BLOCKSIZ\n   self.left[LFTLNK]=newblock\n   newblock[RGTLNK]=self.left\n   self.left=newblock\n   self.leftndx=n -1\n  self.length +=1\n  self.left[self.leftndx]=x\n  if self.maxlen is not None and self.length >self.maxlen:\n   self.pop()\n   \n def extend(self,iterable):\n  if iterable is self:\n   iterable=list(iterable)\n  for elem in iterable:\n   self.append(elem)\n   \n def extendleft(self,iterable):\n  if iterable is self:\n   iterable=list(iterable)\n  for elem in iterable:\n   self.appendleft(elem)\n   \n def pop(self):\n  if self.left is self.right and self.leftndx >self.rightndx:\n  \n   raise IndexError(\"pop from an empty deque\")\n  x=self.right[self.rightndx]\n  self.right[self.rightndx]=None\n  self.length -=1\n  self.rightndx -=1\n  self.state +=1\n  if self.rightndx ==-1:\n   prevblock=self.right[LFTLNK]\n   if prevblock is None :\n   \n    self.rightndx=n //2\n    self.leftndx=n //2+1\n   else :\n    prevblock[RGTLNK]=None\n    self.right[LFTLNK]=None\n    self.right=prevblock\n    self.rightndx=n -1\n  return x\n  \n def popleft(self):\n  if self.left is self.right and self.leftndx >self.rightndx:\n  \n   raise IndexError(\"pop from an empty deque\")\n  x=self.left[self.leftndx]\n  self.left[self.leftndx]=None\n  self.length -=1\n  self.leftndx +=1\n  self.state +=1\n  if self.leftndx ==n:\n   prevblock=self.left[RGTLNK]\n   if prevblock is None :\n   \n    self.rightndx=n //2\n    self.leftndx=n //2+1\n   else :\n    prevblock[LFTLNK]=None\n    self.left[RGTLNK]=None\n    self.left=prevblock\n    self.leftndx=0\n  return x\n  \n def count(self,value):\n  c=0\n  for item in self:\n   if item ==value:\n    c +=1\n  return c\n  \n def remove(self,value):\n \n  for i in range(len(self)):\n   if self[i]==value:\n    del self[i]\n    return\n  raise ValueError(\"deque.remove(x): x not in deque\")\n  \n def rotate(self,n=1):\n  length=len(self)\n  if length ==0:\n   return\n  halflen=(length+1)>>1\n  if n >halflen or n <-halflen:\n   n %=length\n   if n >halflen:\n    n -=length\n   elif n <-halflen:\n    n +=length\n  while n >0:\n   self.appendleft(self.pop())\n   n -=1\n  while n <0:\n   self.append(self.popleft())\n   n +=1\n   \n def reverse(self):\n  ''\n  leftblock=self.left\n  rightblock=self.right\n  leftindex=self.leftndx\n  rightindex=self.rightndx\n  for i in range(self.length //2):\n  \n   assert leftblock !=rightblock or leftindex <rightindex\n   \n   \n   (rightblock[rightindex],leftblock[leftindex])=(\n   leftblock[leftindex],rightblock[rightindex])\n   \n   \n   leftindex +=1\n   if leftindex ==n:\n    leftblock=leftblock[RGTLNK]\n    assert leftblock is not None\n    leftindex=0\n    \n    \n   rightindex -=1\n   if rightindex ==-1:\n    rightblock=rightblock[LFTLNK]\n    assert rightblock is not None\n    rightindex=n -1\n    \n def __repr__(self):\n  threadlocalattr='__repr'+str(_thread_ident())\n  if threadlocalattr in self.__dict__:\n   return'deque([...])'\n  else :\n   self.__dict__[threadlocalattr]=True\n   try :\n    if self.maxlen is not None :\n     return'deque(%r, maxlen=%s)'%(list(self),self.maxlen)\n    else :\n     return'deque(%r)'%(list(self),)\n   finally :\n    del self.__dict__[threadlocalattr]\n    \n def __iter__(self):\n  return deque_iterator(self,self._iter_impl)\n  \n def _iter_impl(self,original_state,giveup):\n  if self.state !=original_state:\n   giveup()\n  block=self.left\n  while block:\n   l,r=0,n\n   if block is self.left:\n    l=self.leftndx\n   if block is self.right:\n    r=self.rightndx+1\n   for elem in block[l:r]:\n    yield elem\n    if self.state !=original_state:\n     giveup()\n   block=block[RGTLNK]\n   \n def __reversed__(self):\n  return deque_iterator(self,self._reversed_impl)\n  \n def _reversed_impl(self,original_state,giveup):\n  if self.state !=original_state:\n   giveup()\n  block=self.right\n  while block:\n   l,r=0,n\n   if block is self.left:\n    l=self.leftndx\n   if block is self.right:\n    r=self.rightndx+1\n   for elem in reversed(block[l:r]):\n    yield elem\n    if self.state !=original_state:\n     giveup()\n   block=block[LFTLNK]\n   \n def __len__(self):\n \n \n \n \n \n \n  return self.length\n  \n def __getref(self,index):\n  if index >=0:\n   block=self.left\n   while block:\n    l,r=0,n\n    if block is self.left:\n     l=self.leftndx\n    if block is self.right:\n     r=self.rightndx+1\n    span=r -l\n    if index <span:\n     return block,l+index\n    index -=span\n    block=block[RGTLNK]\n  else :\n   block=self.right\n   while block:\n    l,r=0,n\n    if block is self.left:\n     l=self.leftndx\n    if block is self.right:\n     r=self.rightndx+1\n    negative_span=l -r\n    if index >=negative_span:\n     return block,r+index\n    index -=negative_span\n    block=block[LFTLNK]\n  raise IndexError(\"deque index out of range\")\n  \n def __getitem__(self,index):\n  block,index=self.__getref(index)\n  return block[index]\n  \n def __setitem__(self,index,value):\n  block,index=self.__getref(index)\n  block[index]=value\n  \n def __delitem__(self,index):\n  length=len(self)\n  if index >=0:\n   if index >=length:\n    raise IndexError(\"deque index out of range\")\n   self.rotate(-index)\n   self.popleft()\n   self.rotate(index)\n  else :\n  \n   index=index ^(2 **31)\n   if index >=length:\n    raise IndexError(\"deque index out of range\")\n   self.rotate(index)\n   self.pop()\n   self.rotate(-index)\n   \n def __reduce_ex__(self,proto):\n  return type(self),(list(self),self.maxlen)\n  \n def __hash__(self):\n \n  raise TypeError(\"deque objects are unhashable\")\n  \n def __copy__(self):\n  return self.__class__(self,self.maxlen)\n  \n  \n def __eq__(self,other):\n  if isinstance(other,deque):\n   return list(self)==list(other)\n  else :\n   return NotImplemented\n   \n def __ne__(self,other):\n  if isinstance(other,deque):\n   return list(self)!=list(other)\n  else :\n   return NotImplemented\n   \n def __lt__(self,other):\n  if isinstance(other,deque):\n   return list(self)<list(other)\n  else :\n   return NotImplemented\n   \n def __le__(self,other):\n  if isinstance(other,deque):\n   return list(self)<=list(other)\n  else :\n   return NotImplemented\n   \n def __gt__(self,other):\n  if isinstance(other,deque):\n   return list(self)>list(other)\n  else :\n   return NotImplemented\n   \n def __ge__(self,other):\n  if isinstance(other,deque):\n   return list(self)>=list(other)\n  else :\n   return NotImplemented\n   \n def __iadd__(self,other):\n  self.extend(other)\n  return self\n  \n  \nclass deque_iterator(object):\n\n def __init__(self,deq,itergen):\n  self.counter=len(deq)\n  def giveup():\n   self.counter=0\n   \n   raise RuntimeError(\"deque mutated during iteration\")\n  self._gen=itergen(deq.state,giveup)\n  \n def next(self):\n  res=self._gen.next()\n  self.counter -=1\n  return res\n  \n def __iter__(self):\n  return self\n  \nclass defaultdict(dict):\n\n def __init__(self,*args,**kwds):\n  if len(args)>0:\n   default_factory=args[0]\n   args=args[1:]\n   if not callable(default_factory)and default_factory is not None :\n    raise TypeError(\"first argument must be callable\")\n  else :\n   default_factory=None\n  dict.__init__(self,args,kwds)\n  self.default_factory=default_factory\n  self.update(args,kwds)\n  super(defaultdict,self).__init__(*args,**kwds)\n  \n  \n  \n  \n  \n  \n  \n  \n def __missing__(self,key):\n \n  if self.default_factory is None :\n   raise KeyError(key)\n  self[key]=value=self.default_factory()\n  return value\n  \n def __repr__(self,recurse=set()):\n  if id(self)in recurse:\n   return\"defaultdict(...)\"\n  try :\n   recurse.add(id(self))\n   return\"defaultdict(%s, %s)\"%(repr(self.default_factory),super(defaultdict,self).__repr__())\n  finally :\n   recurse.remove(id(self))\n   \n def copy(self):\n  return type(self)(self.default_factory,self)\n  \n def __copy__(self):\n  return self.copy()\n  \n def __reduce__(self):\n \n \n \n \n \n \n \n \n \n \n \n  return (type(self),(self.default_factory,),None ,None ,self.items())\n  \nfrom operator import itemgetter as _itemgetter\nfrom keyword import iskeyword as _iskeyword\nimport sys as _sys\n\ndef namedtuple(typename,field_names,verbose=False ,rename=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n if isinstance(field_names,str):\n  field_names=field_names.replace(',',' ').split()\n field_names=tuple(map(str,field_names))\n if rename:\n  names=list(field_names)\n  seen=set()\n  for i,name in enumerate(names):\n   if (not min(c.isalnum()or c =='_'for c in name)or _iskeyword(name)\n   or not name or name[0].isdigit()or name.startswith('_')\n   or name in seen):\n    names[i]='_%d'%i\n   seen.add(name)\n  field_names=tuple(names)\n for name in (typename,)+field_names:\n  if not min(c.isalnum()or c =='_'for c in name):\n   raise ValueError('Type names and field names can only contain alphanumeric characters and underscores: %r'%name)\n  if _iskeyword(name):\n   raise ValueError('Type names and field names cannot be a keyword: %r'%name)\n  if name[0].isdigit():\n   raise ValueError('Type names and field names cannot start with a number: %r'%name)\n seen_names=set()\n for name in field_names:\n  if name.startswith('_')and not rename:\n   raise ValueError('Field names cannot start with an underscore: %r'%name)\n  if name in seen_names:\n   raise ValueError('Encountered duplicate field name: %r'%name)\n  seen_names.add(name)\n  \n  \n numfields=len(field_names)\n argtxt=repr(field_names).replace(\"'\",\"\")[1:-1]\n reprtxt=', '.join('%s=%%r'%name for name in field_names)\n \n template='''class %(typename)s(tuple):\n        '%(typename)s(%(argtxt)s)' \\n\n        __slots__ = () \\n\n        _fields = %(field_names)r \\n\n        def __new__(_cls, %(argtxt)s):\n            return tuple.__new__(_cls, (%(argtxt)s)) \\n\n        @classmethod\n        def _make(cls, iterable, new=tuple.__new__, len=len):\n            'Make a new %(typename)s object from a sequence or iterable'\n            result = new(cls, iterable)\n            if len(result) != %(numfields)d:\n                raise TypeError('Expected %(numfields)d arguments, got %%d' %% len(result))\n            return result \\n\n        def __repr__(self):\n            return '%(typename)s(%(reprtxt)s)' %% self \\n\n        def _asdict(self):\n            'Return a new dict which maps field names to their values'\n            return dict(zip(self._fields, self)) \\n\n        def _replace(_self, **kwds):\n            'Return a new %(typename)s object replacing specified fields with new values'\n            result = _self._make(map(kwds.pop, %(field_names)r, _self))\n            if kwds:\n                raise ValueError('Got unexpected field names: %%r' %% kwds.keys())\n            return result \\n\n        def __getnewargs__(self):\n            return tuple(self) \\n\\n'''%locals()\n for i,name in enumerate(field_names):\n  template +='        %s = _property(_itemgetter(%d))\\n'%(name,i)\n  \n if verbose:\n  print(template)\n  \n  \n namespace=dict(_itemgetter=_itemgetter,__name__='namedtuple_%s'%typename,\n _property=property,_tuple=tuple)\n try :\n  exec(template,namespace)\n except SyntaxError as e:\n  raise SyntaxError(e.message+':\\n'+template)\n result=namespace[typename]\n \n \n \n \n \n try :\n  result.__module__=_sys._getframe(1).f_globals.get('__name__','__main__')\n except (AttributeError,ValueError):\n  pass\n  \n return result\n \nif __name__ =='__main__':\n Point=namedtuple('Point',['x','y'])\n p=Point(11,y=22)\n print(p[0]+p[1])\n x,y=p\n print(x,y)\n print(p.x+p.y)\n print(p)\n"], "os": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport sys,errno\nimport stat as st\n\n_names=sys.builtin_module_names\n\n\n__all__=[\"altsep\",\"curdir\",\"pardir\",\"sep\",\"pathsep\",\"linesep\",\n\"defpath\",\"name\",\"path\",\"devnull\",\"SEEK_SET\",\"SEEK_CUR\",\n\"SEEK_END\",\"fsencode\",\"fsdecode\",\"get_exec_path\",\"fdopen\",\n\"popen\",\"extsep\"]\n\ndef _exists(name):\n return name in globals()\n \ndef _get_exports_list(module):\n try :\n  return list(module.__all__)\n except AttributeError:\n  return [n for n in dir(module)if n[0]!='_']\n  \n  \n  \nif'posix'in _names:\n name='posix'\n linesep='\\n'\n from posix import *\n try :\n  from posix import _exit\n  __all__.append('_exit')\n except ImportError:\n  pass\n import posixpath as path\n \n try :\n  from posix import _have_functions\n except ImportError:\n  pass\n  \nelif'nt'in _names:\n name='nt'\n linesep='\\r\\n'\n from nt import *\n try :\n  from nt import _exit\n  __all__.append('_exit')\n except ImportError:\n  pass\n import ntpath as path\n \n import nt\n __all__.extend(_get_exports_list(nt))\n del nt\n \n try :\n  from nt import _have_functions\n except ImportError:\n  pass\n  \nelif'os2'in _names:\n name='os2'\n linesep='\\r\\n'\n from os2 import *\n try :\n  from os2 import _exit\n  __all__.append('_exit')\n except ImportError:\n  pass\n if sys.version.find('EMX GCC')==-1:\n  import ntpath as path\n else :\n  import os2emxpath as path\n  from _emx_link import link\n  \n import os2\n __all__.extend(_get_exports_list(os2))\n del os2\n \n try :\n  from os2 import _have_functions\n except ImportError:\n  pass\n  \nelif'ce'in _names:\n name='ce'\n linesep='\\r\\n'\n from ce import *\n try :\n  from ce import _exit\n  __all__.append('_exit')\n except ImportError:\n  pass\n  \n import ntpath as path\n \n import ce\n __all__.extend(_get_exports_list(ce))\n del ce\n \n try :\n  from ce import _have_functions\n except ImportError:\n  pass\n  \nelse :\n raise ImportError('no os specific module found')\n \nsys.modules['os.path']=path\nfrom os.path import (curdir,pardir,sep,pathsep,defpath,extsep,altsep,\ndevnull)\n\ndel _names\n\n\nif _exists(\"_have_functions\"):\n _globals=globals()\n def _add(str,fn):\n  if (fn in _globals)and (str in _have_functions):\n   _set.add(_globals[fn])\n   \n _set=set()\n _add(\"HAVE_FACCESSAT\",\"access\")\n _add(\"HAVE_FCHMODAT\",\"chmod\")\n _add(\"HAVE_FCHOWNAT\",\"chown\")\n _add(\"HAVE_FSTATAT\",\"stat\")\n _add(\"HAVE_FUTIMESAT\",\"utime\")\n _add(\"HAVE_LINKAT\",\"link\")\n _add(\"HAVE_MKDIRAT\",\"mkdir\")\n _add(\"HAVE_MKFIFOAT\",\"mkfifo\")\n _add(\"HAVE_MKNODAT\",\"mknod\")\n _add(\"HAVE_OPENAT\",\"open\")\n _add(\"HAVE_READLINKAT\",\"readlink\")\n _add(\"HAVE_RENAMEAT\",\"rename\")\n _add(\"HAVE_SYMLINKAT\",\"symlink\")\n _add(\"HAVE_UNLINKAT\",\"unlink\")\n _add(\"HAVE_UNLINKAT\",\"rmdir\")\n _add(\"HAVE_UTIMENSAT\",\"utime\")\n supports_dir_fd=_set\n \n _set=set()\n _add(\"HAVE_FACCESSAT\",\"access\")\n supports_effective_ids=_set\n \n _set=set()\n _add(\"HAVE_FCHDIR\",\"chdir\")\n _add(\"HAVE_FCHMOD\",\"chmod\")\n _add(\"HAVE_FCHOWN\",\"chown\")\n _add(\"HAVE_FDOPENDIR\",\"listdir\")\n _add(\"HAVE_FEXECVE\",\"execve\")\n _set.add(stat)\n _add(\"HAVE_FTRUNCATE\",\"truncate\")\n _add(\"HAVE_FUTIMENS\",\"utime\")\n _add(\"HAVE_FUTIMES\",\"utime\")\n _add(\"HAVE_FPATHCONF\",\"pathconf\")\n if _exists(\"statvfs\")and _exists(\"fstatvfs\"):\n  _add(\"HAVE_FSTATVFS\",\"statvfs\")\n supports_fd=_set\n \n _set=set()\n _add(\"HAVE_FACCESSAT\",\"access\")\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n _add(\"HAVE_FCHOWNAT\",\"chown\")\n _add(\"HAVE_FSTATAT\",\"stat\")\n _add(\"HAVE_LCHFLAGS\",\"chflags\")\n _add(\"HAVE_LCHMOD\",\"chmod\")\n if _exists(\"lchown\"):\n  _add(\"HAVE_LCHOWN\",\"chown\")\n _add(\"HAVE_LINKAT\",\"link\")\n _add(\"HAVE_LUTIMES\",\"utime\")\n _add(\"HAVE_LSTAT\",\"stat\")\n _add(\"HAVE_FSTATAT\",\"stat\")\n _add(\"HAVE_UTIMENSAT\",\"utime\")\n _add(\"MS_WINDOWS\",\"stat\")\n supports_follow_symlinks=_set\n \n del _set\n del _have_functions\n del _globals\n del _add\n \n \n \n \n \nSEEK_SET=0\nSEEK_CUR=1\nSEEK_END=2\n\n\ndef _get_masked_mode(mode):\n mask=umask(0)\n umask(mask)\n return mode&~mask\n \n \n \n \ndef makedirs(name,mode=0o777,exist_ok=False ):\n ''\n\n\n\n\n\n\n\n\n \n head,tail=path.split(name)\n if not tail:\n  head,tail=path.split(head)\n if head and tail and not path.exists(head):\n  try :\n   makedirs(head,mode,exist_ok)\n  except OSError as e:\n  \n   if e.errno !=errno.EEXIST:\n    raise\n  cdir=curdir\n  if isinstance(tail,bytes):\n   cdir=bytes(curdir,'ASCII')\n  if tail ==cdir:\n   return\n try :\n  mkdir(name,mode)\n except OSError as e:\n  dir_exists=path.isdir(name)\n  expected_mode=_get_masked_mode(mode)\n  if dir_exists:\n  \n  \n  \n   actual_mode=st.S_IMODE(lstat(name).st_mode)&~st.S_ISGID\n  else :\n   actual_mode=-1\n  if not (e.errno ==errno.EEXIST and exist_ok and dir_exists and\n  actual_mode ==expected_mode):\n   if dir_exists and actual_mode !=expected_mode:\n    e.strerror +=' (mode %o != expected mode %o)'%(\n    actual_mode,expected_mode)\n   raise\n   \ndef removedirs(name):\n ''\n\n\n\n\n\n\n\n\n \n rmdir(name)\n head,tail=path.split(name)\n if not tail:\n  head,tail=path.split(head)\n while head and tail:\n  try :\n   rmdir(head)\n  except error:\n   break\n  head,tail=path.split(head)\n  \ndef renames(old,new):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n head,tail=path.split(new)\n if head and tail and not path.exists(head):\n  makedirs(head)\n rename(old,new)\n head,tail=path.split(old)\n if head and tail:\n  try :\n   removedirs(head)\n  except error:\n   pass\n   \n__all__.extend([\"makedirs\",\"removedirs\",\"renames\"])\n\ndef walk(top,topdown=True ,onerror=None ,followlinks=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n islink,join,isdir=path.islink,path.join,path.isdir\n \n \n \n \n \n \n try :\n \n \n  names=listdir(top)\n except error as err:\n  if onerror is not None :\n   onerror(err)\n  return\n  \n dirs,nondirs=[],[]\n for name in names:\n  if isdir(join(top,name)):\n   dirs.append(name)\n  else :\n   nondirs.append(name)\n   \n if topdown:\n  yield top,dirs,nondirs\n for name in dirs:\n  new_path=join(top,name)\n  if followlinks or not islink(new_path):\n   yield from walk(new_path,topdown,onerror,followlinks)\n if not topdown:\n  yield top,dirs,nondirs\n  \n__all__.append(\"walk\")\n\nif {open,stat}<=supports_dir_fd and {listdir,stat}<=supports_fd:\n\n def fwalk(top=\".\",topdown=True ,onerror=None ,*,follow_symlinks=False ,dir_fd=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  orig_st=stat(top,follow_symlinks=False ,dir_fd=dir_fd)\n  topfd=open(top,O_RDONLY,dir_fd=dir_fd)\n  try :\n   if (follow_symlinks or (st.S_ISDIR(orig_st.st_mode)and\n   path.samestat(orig_st,stat(topfd)))):\n    yield from _fwalk(topfd,top,topdown,onerror,follow_symlinks)\n  finally :\n   close(topfd)\n   \n def _fwalk(topfd,toppath,topdown,onerror,follow_symlinks):\n \n \n \n \n  names=listdir(topfd)\n  dirs,nondirs=[],[]\n  for name in names:\n   try :\n   \n   \n   \n   \n    if st.S_ISDIR(stat(name,dir_fd=topfd).st_mode):\n     dirs.append(name)\n    else :\n     nondirs.append(name)\n   except FileNotFoundError:\n    try :\n    \n     if st.S_ISLNK(stat(name,dir_fd=topfd,follow_symlinks=False )\n     .st_mode):\n      nondirs.append(name)\n    except FileNotFoundError:\n     continue\n     \n  if topdown:\n   yield toppath,dirs,nondirs,topfd\n   \n  for name in dirs:\n   try :\n    orig_st=stat(name,dir_fd=topfd,follow_symlinks=follow_symlinks)\n    dirfd=open(name,O_RDONLY,dir_fd=topfd)\n   except error as err:\n    if onerror is not None :\n     onerror(err)\n    return\n   try :\n    if follow_symlinks or path.samestat(orig_st,stat(dirfd)):\n     dirpath=path.join(toppath,name)\n     yield from _fwalk(dirfd,dirpath,topdown,onerror,follow_symlinks)\n   finally :\n    close(dirfd)\n    \n  if not topdown:\n   yield toppath,dirs,nondirs,topfd\n   \n __all__.append(\"fwalk\")\n \n \ntry :\n environ\nexcept NameError:\n environ={}\n \ndef execl(file,*args):\n ''\n\n\n \n execv(file,args)\n \ndef execle(file,*args):\n ''\n\n\n \n env=args[-1]\n execve(file,args[:-1],env)\n \ndef execlp(file,*args):\n ''\n\n\n \n execvp(file,args)\n \ndef execlpe(file,*args):\n ''\n\n\n\n \n env=args[-1]\n execvpe(file,args[:-1],env)\n \ndef execvp(file,args):\n ''\n\n\n\n \n _execvpe(file,args)\n \ndef execvpe(file,args,env):\n ''\n\n\n\n\n \n _execvpe(file,args,env)\n \n__all__.extend([\"execl\",\"execle\",\"execlp\",\"execlpe\",\"execvp\",\"execvpe\"])\n\ndef _execvpe(file,args,env=None ):\n if env is not None :\n  exec_func=execve\n  argrest=(args,env)\n else :\n  exec_func=execv\n  argrest=(args,)\n  env=environ\n  \n head,tail=path.split(file)\n if head:\n  exec_func(file,*argrest)\n  return\n last_exc=saved_exc=None\n saved_tb=None\n path_list=get_exec_path(env)\n if name !='nt':\n  file=fsencode(file)\n  path_list=map(fsencode,path_list)\n for dir in path_list:\n  fullname=path.join(dir,file)\n  try :\n   exec_func(fullname,*argrest)\n  except error as e:\n   last_exc=e\n   tb=sys.exc_info()[2]\n   if (e.errno !=errno.ENOENT and e.errno !=errno.ENOTDIR\n   and saved_exc is None ):\n    saved_exc=e\n    saved_tb=tb\n if saved_exc:\n  raise saved_exc.with_traceback(saved_tb)\n raise last_exc.with_traceback(tb)\n \n \ndef get_exec_path(env=None ):\n ''\n\n\n\n\n \n \n \n \n import warnings\n \n if env is None :\n  env=environ\n  \n  \n  \n with warnings.catch_warnings():\n  warnings.simplefilter(\"ignore\",BytesWarning)\n  \n  try :\n   path_list=env.get('PATH')\n  except TypeError:\n   path_list=None\n   \n  if supports_bytes_environ:\n   try :\n    path_listb=env[b'PATH']\n   except (KeyError,TypeError):\n    pass\n   else :\n    if path_list is not None :\n     raise ValueError(\n     \"env cannot contain 'PATH' and b'PATH' keys\")\n    path_list=path_listb\n    \n   if path_list is not None and isinstance(path_list,bytes):\n    path_list=fsdecode(path_list)\n    \n if path_list is None :\n  path_list=defpath\n return path_list.split(pathsep)\n \n \n \nfrom collections.abc import MutableMapping\n\nclass _Environ(MutableMapping):\n def __init__(self,data,encodekey,decodekey,encodevalue,decodevalue,putenv,unsetenv):\n  self.encodekey=encodekey\n  self.decodekey=decodekey\n  self.encodevalue=encodevalue\n  self.decodevalue=decodevalue\n  self.putenv=putenv\n  self.unsetenv=unsetenv\n  self._data=data\n  \n def __getitem__(self,key):\n  try :\n   value=self._data[self.encodekey(key)]\n  except KeyError:\n  \n   raise KeyError(key)from None\n  return self.decodevalue(value)\n  \n def __setitem__(self,key,value):\n  key=self.encodekey(key)\n  value=self.encodevalue(value)\n  self.putenv(key,value)\n  self._data[key]=value\n  \n def __delitem__(self,key):\n  encodedkey=self.encodekey(key)\n  self.unsetenv(encodedkey)\n  try :\n   del self._data[encodedkey]\n  except KeyError:\n  \n   raise KeyError(key)from None\n   \n def __iter__(self):\n  for key in self._data:\n   yield self.decodekey(key)\n   \n def __len__(self):\n  return len(self._data)\n  \n def __repr__(self):\n  return'environ({{{}}})'.format(', '.join(\n  ('{!r}: {!r}'.format(self.decodekey(key),self.decodevalue(value))\n  for key,value in self._data.items())))\n  \n def copy(self):\n  return dict(self)\n  \n def setdefault(self,key,value):\n  if key not in self:\n   self[key]=value\n  return self[key]\n  \ntry :\n _putenv=putenv\nexcept NameError:\n _putenv=lambda key,value:None\nelse :\n __all__.append(\"putenv\")\n \ntry :\n _unsetenv=unsetenv\nexcept NameError:\n _unsetenv=lambda key:_putenv(key,\"\")\nelse :\n __all__.append(\"unsetenv\")\n \ndef _createenviron():\n if name in ('os2','nt'):\n \n  def check_str(value):\n   if not isinstance(value,str):\n    raise TypeError(\"str expected, not %s\"%type(value).__name__)\n   return value\n  encode=check_str\n  decode=str\n  def encodekey(key):\n   return encode(key).upper()\n  data={}\n  for key,value in environ.items():\n   data[encodekey(key)]=value\n else :\n \n  encoding=sys.getfilesystemencoding()\n  def encode(value):\n   if not isinstance(value,str):\n    raise TypeError(\"str expected, not %s\"%type(value).__name__)\n   return value.encode(encoding,'surrogateescape')\n  def decode(value):\n   return value.decode(encoding,'surrogateescape')\n  encodekey=encode\n  data=environ\n return _Environ(data,\n encodekey,decode,\n encode,decode,\n _putenv,_unsetenv)\n \n \nenviron=_createenviron()\ndel _createenviron\n\n\ndef getenv(key,default=None ):\n ''\n\n \n return environ.get(key,default)\n \nsupports_bytes_environ=name not in ('os2','nt')\n__all__.extend((\"getenv\",\"supports_bytes_environ\"))\n\nif supports_bytes_environ:\n def _check_bytes(value):\n  if not isinstance(value,bytes):\n   raise TypeError(\"bytes expected, not %s\"%type(value).__name__)\n  return value\n  \n  \n environb=_Environ(environ._data,\n _check_bytes,bytes,\n _check_bytes,bytes,\n _putenv,_unsetenv)\n del _check_bytes\n \n def getenvb(key,default=None ):\n  ''\n\n  \n  return environb.get(key,default)\n  \n __all__.extend((\"environb\",\"getenvb\"))\n \ndef _fscodec():\n encoding=sys.getfilesystemencoding()\n if encoding =='mbcs':\n  errors='strict'\n else :\n  errors='surrogateescape'\n  \n def fsencode(filename):\n  ''\n\n\n\n  \n  if isinstance(filename,bytes):\n   return filename\n  elif isinstance(filename,str):\n   return filename.encode(encoding,errors)\n  else :\n   raise TypeError(\"expect bytes or str, not %s\"%type(filename).__name__)\n   \n def fsdecode(filename):\n  ''\n\n\n\n  \n  if isinstance(filename,str):\n   return filename\n  elif isinstance(filename,bytes):\n   return filename.decode(encoding,errors)\n  else :\n   raise TypeError(\"expect bytes or str, not %s\"%type(filename).__name__)\n   \n return fsencode,fsdecode\n \nfsencode,fsdecode=_fscodec()\ndel _fscodec\n\n\nif _exists(\"fork\")and not _exists(\"spawnv\")and _exists(\"execv\"):\n\n P_WAIT=0\n P_NOWAIT=P_NOWAITO=1\n \n __all__.extend([\"P_WAIT\",\"P_NOWAIT\",\"P_NOWAITO\"])\n \n \n \n \n \n def _spawnvef(mode,file,args,env,func):\n \n  pid=fork()\n  if not pid:\n  \n   try :\n    if env is None :\n     func(file,args)\n    else :\n     func(file,args,env)\n   except :\n    _exit(127)\n  else :\n  \n   if mode ==P_NOWAIT:\n    return pid\n   while 1:\n    wpid,sts=waitpid(pid,0)\n    if WIFSTOPPED(sts):\n     continue\n    elif WIFSIGNALED(sts):\n     return -WTERMSIG(sts)\n    elif WIFEXITED(sts):\n     return WEXITSTATUS(sts)\n    else :\n     raise error(\"Not stopped, signaled or exited???\")\n     \n def spawnv(mode,file,args):\n  ''\n\n\n\n\n  \n  return _spawnvef(mode,file,args,None ,execv)\n  \n def spawnve(mode,file,args,env):\n  ''\n\n\n\n\n\n  \n  return _spawnvef(mode,file,args,env,execve)\n  \n  \n  \n def spawnvp(mode,file,args):\n  ''\n\n\n\n\n\n  \n  return _spawnvef(mode,file,args,None ,execvp)\n  \n def spawnvpe(mode,file,args,env):\n  ''\n\n\n\n\n\n  \n  return _spawnvef(mode,file,args,env,execvpe)\n  \nif _exists(\"spawnv\"):\n\n\n\n def spawnl(mode,file,*args):\n  ''\n\n\n\n\n  \n  return spawnv(mode,file,args)\n  \n def spawnle(mode,file,*args):\n  ''\n\n\n\n\n\n  \n  env=args[-1]\n  return spawnve(mode,file,args[:-1],env)\n  \n  \n __all__.extend([\"spawnv\",\"spawnve\",\"spawnl\",\"spawnle\",])\n \n \nif _exists(\"spawnvp\"):\n\n\n def spawnlp(mode,file,*args):\n  ''\n\n\n\n\n\n  \n  return spawnvp(mode,file,args)\n  \n def spawnlpe(mode,file,*args):\n  ''\n\n\n\n\n\n  \n  env=args[-1]\n  return spawnvpe(mode,file,args[:-1],env)\n  \n  \n __all__.extend([\"spawnvp\",\"spawnvpe\",\"spawnlp\",\"spawnlpe\",])\n \nimport copyreg as _copyreg\n\ndef _make_stat_result(tup,dict):\n return stat_result(tup,dict)\n \ndef _pickle_stat_result(sr):\n (type,args)=sr.__reduce__()\n return (_make_stat_result,args)\n \ntry :\n _copyreg.pickle(stat_result,_pickle_stat_result,_make_stat_result)\nexcept NameError:\n pass\n \ndef _make_statvfs_result(tup,dict):\n return statvfs_result(tup,dict)\n \ndef _pickle_statvfs_result(sr):\n (type,args)=sr.__reduce__()\n return (_make_statvfs_result,args)\n \ntry :\n _copyreg.pickle(statvfs_result,_pickle_statvfs_result,\n _make_statvfs_result)\nexcept NameError:\n pass\n \n \ndef popen(cmd,mode=\"r\",buffering=-1):\n if not isinstance(cmd,str):\n  raise TypeError(\"invalid cmd type (%s, expected string)\"%type(cmd))\n if mode not in (\"r\",\"w\"):\n  raise ValueError(\"invalid mode %r\"%mode)\n if buffering ==0 or buffering is None :\n  raise ValueError(\"popen() does not support unbuffered streams\")\n import subprocess,io\n if mode ==\"r\":\n  proc=subprocess.Popen(cmd,\n  shell=True ,\n  stdout=subprocess.PIPE,\n  bufsize=buffering)\n  return _wrap_close(io.TextIOWrapper(proc.stdout),proc)\n else :\n  proc=subprocess.Popen(cmd,\n  shell=True ,\n  stdin=subprocess.PIPE,\n  bufsize=buffering)\n  return _wrap_close(io.TextIOWrapper(proc.stdin),proc)\n  \n  \nclass _wrap_close:\n def __init__(self,stream,proc):\n  self._stream=stream\n  self._proc=proc\n def close(self):\n  self._stream.close()\n  returncode=self._proc.wait()\n  if returncode ==0:\n   return None\n  if name =='nt':\n   return returncode\n  else :\n   return returncode <<8\n def __enter__(self):\n  return self\n def __exit__(self,*args):\n  self.close()\n def __getattr__(self,name):\n  return getattr(self._stream,name)\n def __iter__(self):\n  return iter(self._stream)\n  \n  \ndef fdopen(fd,*args,**kwargs):\n if not isinstance(fd,int):\n  raise TypeError(\"invalid fd type (%s, expected integer)\"%type(fd))\n import io\n return io.open(fd,*args,**kwargs)\n"], "encodings.cp875": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp875',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\u0391'\n'\\u0392'\n'\\u0393'\n'\\u0394'\n'\\u0395'\n'\\u0396'\n'\\u0397'\n'\\u0398'\n'\\u0399'\n'['\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\u039a'\n'\\u039b'\n'\\u039c'\n'\\u039d'\n'\\u039e'\n'\\u039f'\n'\\u03a0'\n'\\u03a1'\n'\\u03a3'\n']'\n'$'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\u03a4'\n'\\u03a5'\n'\\u03a6'\n'\\u03a7'\n'\\u03a8'\n'\\u03a9'\n'\\u03aa'\n'\\u03ab'\n'|'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xa8'\n'\\u0386'\n'\\u0388'\n'\\u0389'\n'\\xa0'\n'\\u038a'\n'\\u038c'\n'\\u038e'\n'\\u038f'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\u0385'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\u03b1'\n'\\u03b2'\n'\\u03b3'\n'\\u03b4'\n'\\u03b5'\n'\\u03b6'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\u03b7'\n'\\u03b8'\n'\\u03b9'\n'\\u03ba'\n'\\u03bb'\n'\\u03bc'\n'\\xb4'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\u03bd'\n'\\u03be'\n'\\u03bf'\n'\\u03c0'\n'\\u03c1'\n'\\u03c3'\n'\\xa3'\n'\\u03ac'\n'\\u03ad'\n'\\u03ae'\n'\\u03ca'\n'\\u03af'\n'\\u03cc'\n'\\u03cd'\n'\\u03cb'\n'\\u03ce'\n'\\u03c2'\n'\\u03c4'\n'\\u03c5'\n'\\u03c6'\n'\\u03c7'\n'\\u03c8'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\u03c9'\n'\\u0390'\n'\\u03b0'\n'\\u2018'\n'\\u2015'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb1'\n'\\xbd'\n'\\x1a'\n'\\u0387'\n'\\u2019'\n'\\xa6'\n'\\\\'\n'\\x1a'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xa7'\n'\\x1a'\n'\\x1a'\n'\\xab'\n'\\xac'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xa9'\n'\\x1a'\n'\\x1a'\n'\\xbb'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.iso8859_8": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-8',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\ufffe'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xd7'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xf7'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2017'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\ufffe'\n'\\ufffe'\n'\\u200e'\n'\\u200f'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.cp858": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp858',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x00d7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x00c0,\n0x00b8:0x00a9,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x00a2,\n0x00be:0x00a5,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x00e3,\n0x00c7:0x00c3,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x00f0,\n0x00d1:0x00d0,\n0x00d2:0x00ca,\n0x00d3:0x00cb,\n0x00d4:0x00c8,\n0x00d5:0x20ac,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x00cf,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x00a6,\n0x00de:0x00cc,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x00d2,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:0x00fe,\n0x00e8:0x00de,\n0x00e9:0x00da,\n0x00ea:0x00db,\n0x00eb:0x00d9,\n0x00ec:0x00fd,\n0x00ed:0x00dd,\n0x00ee:0x00af,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x2017,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\xd7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\xc0'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\xe3'\n'\\xc3'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\xf0'\n'\\xd0'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\u20ac'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\xcc'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\xd2'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\xfe'\n'\\xde'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\xfd'\n'\\xdd'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\u2017'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x00bd,\n0x00a3:0x009c,\n0x00a4:0x00cf,\n0x00a5:0x00be,\n0x00a6:0x00dd,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x00b8,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00af:0x00ee,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b4:0x00ef,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b8:0x00f7,\n0x00b9:0x00fb,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00bf:0x00a8,\n0x00c0:0x00b7,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c3:0x00c7,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c8:0x00d4,\n0x00c9:0x0090,\n0x00ca:0x00d2,\n0x00cb:0x00d3,\n0x00cc:0x00de,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00cf:0x00d8,\n0x00d0:0x00d1,\n0x00d1:0x00a5,\n0x00d2:0x00e3,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00d8:0x009d,\n0x00d9:0x00eb,\n0x00da:0x00e9,\n0x00db:0x00ea,\n0x00dc:0x009a,\n0x00dd:0x00ed,\n0x00de:0x00e8,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x00c6,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f0:0x00d0,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00fd:0x00ec,\n0x00fe:0x00e7,\n0x00ff:0x0098,\n0x20ac:0x00d5,\n0x0192:0x009f,\n0x2017:0x00f2,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "encodings.iso8859_3": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-3',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0126'\n'\\u02d8'\n'\\xa3'\n'\\xa4'\n'\\ufffe'\n'\\u0124'\n'\\xa7'\n'\\xa8'\n'\\u0130'\n'\\u015e'\n'\\u011e'\n'\\u0134'\n'\\xad'\n'\\ufffe'\n'\\u017b'\n'\\xb0'\n'\\u0127'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\u0125'\n'\\xb7'\n'\\xb8'\n'\\u0131'\n'\\u015f'\n'\\u011f'\n'\\u0135'\n'\\xbd'\n'\\ufffe'\n'\\u017c'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\ufffe'\n'\\xc4'\n'\\u010a'\n'\\u0108'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\ufffe'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\u0120'\n'\\xd6'\n'\\xd7'\n'\\u011c'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u016c'\n'\\u015c'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\ufffe'\n'\\xe4'\n'\\u010b'\n'\\u0109'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\ufffe'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\u0121'\n'\\xf6'\n'\\xf7'\n'\\u011d'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u016d'\n'\\u015d'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.cp1256": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1256',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\u067e'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0679'\n'\\u2039'\n'\\u0152'\n'\\u0686'\n'\\u0698'\n'\\u0688'\n'\\u06af'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u06a9'\n'\\u2122'\n'\\u0691'\n'\\u203a'\n'\\u0153'\n'\\u200c'\n'\\u200d'\n'\\u06ba'\n'\\xa0'\n'\\u060c'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\u06be'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\u061b'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\u061f'\n'\\u06c1'\n'\\u0621'\n'\\u0622'\n'\\u0623'\n'\\u0624'\n'\\u0625'\n'\\u0626'\n'\\u0627'\n'\\u0628'\n'\\u0629'\n'\\u062a'\n'\\u062b'\n'\\u062c'\n'\\u062d'\n'\\u062e'\n'\\u062f'\n'\\u0630'\n'\\u0631'\n'\\u0632'\n'\\u0633'\n'\\u0634'\n'\\u0635'\n'\\u0636'\n'\\xd7'\n'\\u0637'\n'\\u0638'\n'\\u0639'\n'\\u063a'\n'\\u0640'\n'\\u0641'\n'\\u0642'\n'\\u0643'\n'\\xe0'\n'\\u0644'\n'\\xe2'\n'\\u0645'\n'\\u0646'\n'\\u0647'\n'\\u0648'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\u0649'\n'\\u064a'\n'\\xee'\n'\\xef'\n'\\u064b'\n'\\u064c'\n'\\u064d'\n'\\u064e'\n'\\xf4'\n'\\u064f'\n'\\u0650'\n'\\xf7'\n'\\u0651'\n'\\xf9'\n'\\u0652'\n'\\xfb'\n'\\xfc'\n'\\u200e'\n'\\u200f'\n'\\u06d2'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "browser.session_storage": [".py", "\nimport sys\nfrom javascript import JSObject\nfrom browser import window\nfrom .local_storage import LocalStorage\n\nhas_session_storage=hasattr(window,'sessionStorage')\n\nclass SessionStorage(LocalStorage):\n\n storage_type=\"session_storage\"\n \n def __init__(self):\n  if not has_session_storage:\n   raise EnvironmentError(\"SessionStorage not available\")\n  self.store=window.sessionStorage\n  \nif has_session_storage:\n storage=SessionStorage()\n"], "encodings.mac_centeuro": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-centeuro',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\u0100'\n'\\u0101'\n'\\xc9'\n'\\u0104'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\u0105'\n'\\u010c'\n'\\xe4'\n'\\u010d'\n'\\u0106'\n'\\u0107'\n'\\xe9'\n'\\u0179'\n'\\u017a'\n'\\u010e'\n'\\xed'\n'\\u010f'\n'\\u0112'\n'\\u0113'\n'\\u0116'\n'\\xf3'\n'\\u0117'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\u011a'\n'\\u011b'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\u0118'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\u0119'\n'\\xa8'\n'\\u2260'\n'\\u0123'\n'\\u012e'\n'\\u012f'\n'\\u012a'\n'\\u2264'\n'\\u2265'\n'\\u012b'\n'\\u0136'\n'\\u2202'\n'\\u2211'\n'\\u0142'\n'\\u013b'\n'\\u013c'\n'\\u013d'\n'\\u013e'\n'\\u0139'\n'\\u013a'\n'\\u0145'\n'\\u0146'\n'\\u0143'\n'\\xac'\n'\\u221a'\n'\\u0144'\n'\\u0147'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u0148'\n'\\u0150'\n'\\xd5'\n'\\u0151'\n'\\u014c'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\u014d'\n'\\u0154'\n'\\u0155'\n'\\u0158'\n'\\u2039'\n'\\u203a'\n'\\u0159'\n'\\u0156'\n'\\u0157'\n'\\u0160'\n'\\u201a'\n'\\u201e'\n'\\u0161'\n'\\u015a'\n'\\u015b'\n'\\xc1'\n'\\u0164'\n'\\u0165'\n'\\xcd'\n'\\u017d'\n'\\u017e'\n'\\u016a'\n'\\xd3'\n'\\xd4'\n'\\u016b'\n'\\u016e'\n'\\xda'\n'\\u016f'\n'\\u0170'\n'\\u0171'\n'\\u0172'\n'\\u0173'\n'\\xdd'\n'\\xfd'\n'\\u0137'\n'\\u017b'\n'\\u0141'\n'\\u017c'\n'\\u0122'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_socket": [".py", "''\n\n\n\n\nAF_APPLETALK=16\n\nAF_DECnet=12\n\nAF_INET=2\n\nAF_INET6=23\n\nAF_IPX=6\n\nAF_IRDA=26\n\nAF_SNA=11\n\nAF_UNSPEC=0\n\nAI_ADDRCONFIG=1024\n\nAI_ALL=256\n\nAI_CANONNAME=2\n\nAI_NUMERICHOST=4\n\nAI_NUMERICSERV=8\n\nAI_PASSIVE=1\n\nAI_V4MAPPED=2048\n\nCAPI='<capsule object \"_socket.CAPI\" at 0x00BC4F38>'\n\nEAI_AGAIN=11002\n\nEAI_BADFLAGS=10022\n\nEAI_FAIL=11003\n\nEAI_FAMILY=10047\n\nEAI_MEMORY=8\n\nEAI_NODATA=11001\n\nEAI_NONAME=11001\n\nEAI_SERVICE=10109\n\nEAI_SOCKTYPE=10044\n\nINADDR_ALLHOSTS_GROUP=-536870911\n\nINADDR_ANY=0\n\nINADDR_BROADCAST=-1\n\nINADDR_LOOPBACK=2130706433\n\nINADDR_MAX_LOCAL_GROUP=-536870657\n\nINADDR_NONE=-1\n\nINADDR_UNSPEC_GROUP=-536870912\n\nIPPORT_RESERVED=1024\n\nIPPORT_USERRESERVED=5000\n\nIPPROTO_ICMP=1\n\nIPPROTO_IP=0\n\nIPPROTO_RAW=255\n\nIPPROTO_TCP=6\n\nIPPROTO_UDP=17\n\nIPV6_CHECKSUM=26\n\nIPV6_DONTFRAG=14\n\nIPV6_HOPLIMIT=21\n\nIPV6_HOPOPTS=1\n\nIPV6_JOIN_GROUP=12\n\nIPV6_LEAVE_GROUP=13\n\nIPV6_MULTICAST_HOPS=10\n\nIPV6_MULTICAST_IF=9\n\nIPV6_MULTICAST_LOOP=11\n\nIPV6_PKTINFO=19\n\nIPV6_RECVRTHDR=38\n\nIPV6_RECVTCLASS=40\n\nIPV6_RTHDR=32\n\nIPV6_TCLASS=39\n\nIPV6_UNICAST_HOPS=4\n\nIPV6_V6ONLY=27\n\nIP_ADD_MEMBERSHIP=12\n\nIP_DROP_MEMBERSHIP=13\n\nIP_HDRINCL=2\n\nIP_MULTICAST_IF=9\n\nIP_MULTICAST_LOOP=11\n\nIP_MULTICAST_TTL=10\n\nIP_OPTIONS=1\n\nIP_RECVDSTADDR=25\n\nIP_TOS=3\n\nIP_TTL=4\n\nMSG_BCAST=1024\n\nMSG_CTRUNC=512\n\nMSG_DONTROUTE=4\n\nMSG_MCAST=2048\n\nMSG_OOB=1\n\nMSG_PEEK=2\n\nMSG_TRUNC=256\n\nNI_DGRAM=16\n\nNI_MAXHOST=1025\n\nNI_MAXSERV=32\n\nNI_NAMEREQD=4\n\nNI_NOFQDN=1\n\nNI_NUMERICHOST=2\n\nNI_NUMERICSERV=8\n\nRCVALL_MAX=3\n\nRCVALL_OFF=0\n\nRCVALL_ON=1\n\nRCVALL_SOCKETLEVELONLY=2\n\nSHUT_RD=0\n\nSHUT_RDWR=2\n\nSHUT_WR=1\n\nSIO_KEEPALIVE_VALS=2550136836\n\nSIO_RCVALL=2550136833\n\nSOCK_DGRAM=2\n\nSOCK_RAW=3\n\nSOCK_RDM=4\n\nSOCK_SEQPACKET=5\n\nSOCK_STREAM=1\n\nSOL_IP=0\n\nSOL_SOCKET=65535\n\nSOL_TCP=6\n\nSOL_UDP=17\n\nSOMAXCONN=2147483647\n\nSO_ACCEPTCONN=2\n\nSO_BROADCAST=32\n\nSO_DEBUG=1\n\nSO_DONTROUTE=16\n\nSO_ERROR=4103\n\nSO_EXCLUSIVEADDRUSE=-5\n\nSO_KEEPALIVE=8\n\nSO_LINGER=128\n\nSO_OOBINLINE=256\n\nSO_RCVBUF=4098\n\nSO_RCVLOWAT=4100\n\nSO_RCVTIMEO=4102\n\nSO_REUSEADDR=4\n\nSO_SNDBUF=4097\n\nSO_SNDLOWAT=4099\n\nSO_SNDTIMEO=4101\n\nSO_TYPE=4104\n\nSO_USELOOPBACK=64\n\nclass SocketType:\n pass\n \nTCP_MAXSEG=4\n\nTCP_NODELAY=1\n\n__loader__='<_frozen_importlib.ExtensionFileLoader object at 0x00CA2D90>'\n\ndef dup(*args,**kw):\n ''\n\n \n pass\n \nclass error:\n pass\n \nclass gaierror:\n pass\n \ndef getaddrinfo(*args,**kw):\n ''\n\n \n pass\n \ndef getdefaulttimeout(*args,**kw):\n ''\n\n\n \n pass\n \ndef gethostbyaddr(*args,**kw):\n ''\n\n \n pass\n \ndef gethostbyname(*args,**kw):\n ''\n \n pass\n \ndef gethostbyname_ex(*args,**kw):\n ''\n\n \n pass\n \ndef gethostname(*args,**kw):\n ''\n \n pass\n \ndef getnameinfo(*args,**kw):\n ''\n \n pass\n \ndef getprotobyname(*args,**kw):\n ''\n \n pass\n \ndef getservbyname(*args,**kw):\n ''\n\n\n \n pass\n \ndef getservbyport(*args,**kw):\n ''\n\n\n \n pass\n \nhas_ipv6=True\n\nclass herror:\n pass\n \ndef htonl(*args,**kw):\n ''\n \n pass\n \ndef htons(*args,**kw):\n ''\n \n pass\n \ndef inet_aton(*args,**kw):\n ''\n\n \n pass\n \ndef inet_ntoa(*args,**kw):\n ''\n \n pass\n \ndef ntohl(*args,**kw):\n ''\n \n pass\n \ndef ntohs(*args,**kw):\n ''\n \n pass\n \ndef setdefaulttimeout(*args,**kw):\n ''\n\n\n \n pass\n \nclass socket:\n def __init__(self,*args,**kw):\n  pass\n def bind(self,*args,**kw):\n  pass\n def close(self):\n  pass\n  \nclass timeout:\n pass\n"], "imp": [".py", "''\n\n\n\n\n\n\n\nfrom _imp import (lock_held,acquire_lock,release_lock,\nget_frozen_object,is_frozen_package,\ninit_builtin,init_frozen,is_builtin,is_frozen,\n_fix_co_filename)\ntry :\n from _imp import load_dynamic\nexcept ImportError:\n\n load_dynamic=None\n \n \nfrom importlib._bootstrap import new_module\nfrom importlib._bootstrap import cache_from_source,source_from_cache\n\n\nfrom importlib import _bootstrap\n\n\nimport importlib.machinery as machinery\nimport os\nimport sys\nimport tokenize\nimport warnings\n\n\n\nSEARCH_ERROR=0\nPY_SOURCE=1\nPY_COMPILED=2\nC_EXTENSION=3\nPY_RESOURCE=4\nPKG_DIRECTORY=5\nC_BUILTIN=6\nPY_FROZEN=7\nPY_CODERESOURCE=8\nIMP_HOOK=9\n\n\ndef get_magic():\n ''\n return _bootstrap._MAGIC_BYTES\n \n \ndef get_tag():\n ''\n return sys.implementation.cache_tag\n \n \ndef get_suffixes():\n warnings.warn('imp.get_suffixes() is deprecated; use the constants '\n 'defined on importlib.machinery instead',\n DeprecationWarning,2)\n extensions=[(s,'rb',C_EXTENSION)for s in machinery.EXTENSION_SUFFIXES]\n source=[(s,'U',PY_SOURCE)for s in machinery.SOURCE_SUFFIXES]\n bytecode=[(s,'rb',PY_COMPILED)for s in machinery.BYTECODE_SUFFIXES]\n \n return extensions+source+bytecode\n \n \nclass NullImporter:\n\n ''\n \n def __init__(self,path):\n  if path =='':\n   raise ImportError('empty pathname',path='')\n  elif os.path.isdir(path):\n   raise ImportError('existing directory',path=path)\n   \n def find_module(self,fullname):\n  ''\n  return None\n  \n  \nclass _HackedGetData:\n\n ''\n \n \n def __init__(self,fullname,path,file=None ):\n  super().__init__(fullname,path)\n  self.file=file\n  \n def get_data(self,path):\n  ''\n  if self.file and path ==self.path:\n   if not self.file.closed:\n    file=self.file\n   else :\n    self.file=file=open(self.path,'r')\n    \n   with file:\n   \n   \n   \n   \n   \n    return file.read()\n  else :\n   return super().get_data(path)\n   \n   \nclass _LoadSourceCompatibility(_HackedGetData,_bootstrap.SourceFileLoader):\n\n ''\n \n pass\n \ndef load_source(name,pathname,file=None ):\n msg=('imp.load_source() is deprecated; use '\n 'importlib.machinery.SourceFileLoader(name, pathname).load_module()'\n ' instead')\n warnings.warn(msg,DeprecationWarning,2)\n _LoadSourceCompatibility(name,pathname,file).load_module(name)\n module=sys.modules[name]\n \n \n module.__loader__=_bootstrap.SourceFileLoader(name,pathname)\n return module\n \n \nclass _LoadCompiledCompatibility(_HackedGetData,\n_bootstrap.SourcelessFileLoader):\n\n ''\n \n pass\n \ndef load_compiled(name,pathname,file=None ):\n msg=('imp.load_compiled() is deprecated; use '\n 'importlib.machinery.SourcelessFileLoader(name, pathname).'\n 'load_module() instead ')\n warnings.warn(msg,DeprecationWarning,2)\n _LoadCompiledCompatibility(name,pathname,file).load_module(name)\n module=sys.modules[name]\n \n \n module.__loader__=_bootstrap.SourcelessFileLoader(name,pathname)\n return module\n \n \ndef load_package(name,path):\n msg=('imp.load_package() is deprecated; use either '\n 'importlib.machinery.SourceFileLoader() or '\n 'importlib.machinery.SourcelessFileLoader() instead')\n warnings.warn(msg,DeprecationWarning,2)\n if os.path.isdir(path):\n  extensions=(machinery.SOURCE_SUFFIXES[:]+\n  machinery.BYTECODE_SUFFIXES[:])\n  for extension in extensions:\n   path=os.path.join(path,'__init__'+extension)\n   if os.path.exists(path):\n    break\n  else :\n   raise ValueError('{!r} is not a package'.format(path))\n return _bootstrap.SourceFileLoader(name,path).load_module(name)\n \n \ndef load_module(name,file,filename,details):\n ''\n\n\n\n\n\n \n suffix,mode,type_=details\n with warnings.catch_warnings():\n  warnings.simplefilter('ignore')\n  if mode and (not mode.startswith(('r','U'))or'+'in mode):\n   raise ValueError('invalid file open mode {!r}'.format(mode))\n  elif file is None and type_ in {PY_SOURCE,PY_COMPILED}:\n   msg='file object required for import (type code {})'.format(type_)\n   raise ValueError(msg)\n  elif type_ ==PY_SOURCE:\n   return load_source(name,filename,file)\n  elif type_ ==PY_COMPILED:\n   return load_compiled(name,filename,file)\n  elif type_ ==C_EXTENSION and load_dynamic is not None :\n   if file is None :\n    with open(filename,'rb')as opened_file:\n     return load_dynamic(name,filename,opened_file)\n   else :\n    return load_dynamic(name,filename,file)\n  elif type_ ==PKG_DIRECTORY:\n   return load_package(name,filename)\n  elif type_ ==C_BUILTIN:\n   return init_builtin(name)\n  elif type_ ==PY_FROZEN:\n   return init_frozen(name)\n  else :\n   msg=\"Don't know how to import {} (type code {})\".format(name,type_)\n   raise ImportError(msg,name=name)\n   \n   \ndef find_module(name,path=None ):\n ''\n\n\n\n\n\n\n\n\n \n if not isinstance(name,str):\n  raise TypeError(\"'name' must be a str, not {}\".format(type(name)))\n elif not isinstance(path,(type(None ),list)):\n \n  raise RuntimeError(\"'list' must be None or a list, \"\n  \"not {}\".format(type(name)))\n  \n if path is None :\n  if is_builtin(name):\n   return None ,None ,('','',C_BUILTIN)\n  elif is_frozen(name):\n   return None ,None ,('','',PY_FROZEN)\n  else :\n   path=sys.path\n   \n for entry in path:\n  package_directory=os.path.join(entry,name)\n  for suffix in ['.py',machinery.BYTECODE_SUFFIXES[0]]:\n   package_file_name='__init__'+suffix\n   file_path=os.path.join(package_directory,package_file_name)\n   if os.path.isfile(file_path):\n    return None ,package_directory,('','',PKG_DIRECTORY)\n  with warnings.catch_warnings():\n   warnings.simplefilter('ignore')\n   for suffix,mode,type_ in get_suffixes():\n    file_name=name+suffix\n    file_path=os.path.join(entry,file_name)\n    if os.path.isfile(file_path):\n     break\n   else :\n    continue\n   break\n else :\n  raise ImportError(_bootstrap._ERR_MSG.format(name),name=name)\n  \n encoding=None\n if mode =='U':\n  with open(file_path,'rb')as file:\n   encoding=tokenize.detect_encoding(file.readline)[0]\n file=open(file_path,mode,encoding=encoding)\n return file,file_path,(suffix,mode,type_)\n \n \n_RELOADING={}\n\ndef reload(module):\n ''\n\n\n\n \n if not module or type(module)!=type(sys):\n  raise TypeError(\"reload() argument must be module\")\n name=module.__name__\n if name not in sys.modules:\n  msg=\"module {} not in sys.modules\"\n  raise ImportError(msg.format(name),name=name)\n if name in _RELOADING:\n  return _RELOADING[name]\n _RELOADING[name]=module\n try :\n  parent_name=name.rpartition('.')[0]\n  if parent_name and parent_name not in sys.modules:\n   msg=\"parent {!r} not in sys.modules\"\n   raise ImportError(msg.format(parent_name),name=parent_name)\n  module.__loader__.load_module(name)\n  \n  return sys.modules[module.__name__]\n finally :\n  try :\n   del _RELOADING[name]\n  except KeyError:\n   pass\n"], "encodings.cp861": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_map)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp861',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00d0,\n0x008c:0x00f0,\n0x008d:0x00de,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00fe,\n0x0096:0x00fb,\n0x0097:0x00dd,\n0x0098:0x00fd,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x20a7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00c1,\n0x00a5:0x00cd,\n0x00a6:0x00d3,\n0x00a7:0x00da,\n0x00a8:0x00bf,\n0x00a9:0x2310,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x03b1,\n0x00e1:0x00df,\n0x00e2:0x0393,\n0x00e3:0x03c0,\n0x00e4:0x03a3,\n0x00e5:0x03c3,\n0x00e6:0x00b5,\n0x00e7:0x03c4,\n0x00e8:0x03a6,\n0x00e9:0x0398,\n0x00ea:0x03a9,\n0x00eb:0x03b4,\n0x00ec:0x221e,\n0x00ed:0x03c6,\n0x00ee:0x03b5,\n0x00ef:0x2229,\n0x00f0:0x2261,\n0x00f1:0x00b1,\n0x00f2:0x2265,\n0x00f3:0x2264,\n0x00f4:0x2320,\n0x00f5:0x2321,\n0x00f6:0x00f7,\n0x00f7:0x2248,\n0x00f8:0x00b0,\n0x00f9:0x2219,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x207f,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xd0'\n'\\xf0'\n'\\xde'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xfe'\n'\\xfb'\n'\\xdd'\n'\\xfd'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\u20a7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xc1'\n'\\xcd'\n'\\xd3'\n'\\xda'\n'\\xbf'\n'\\u2310'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u03b1'\n'\\xdf'\n'\\u0393'\n'\\u03c0'\n'\\u03a3'\n'\\u03c3'\n'\\xb5'\n'\\u03c4'\n'\\u03a6'\n'\\u0398'\n'\\u03a9'\n'\\u03b4'\n'\\u221e'\n'\\u03c6'\n'\\u03b5'\n'\\u2229'\n'\\u2261'\n'\\xb1'\n'\\u2265'\n'\\u2264'\n'\\u2320'\n'\\u2321'\n'\\xf7'\n'\\u2248'\n'\\xb0'\n'\\u2219'\n'\\xb7'\n'\\u221a'\n'\\u207f'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a3:0x009c,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b5:0x00e6,\n0x00b7:0x00fa,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00bf:0x00a8,\n0x00c1:0x00a4,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c9:0x0090,\n0x00cd:0x00a5,\n0x00d0:0x008b,\n0x00d3:0x00a6,\n0x00d6:0x0099,\n0x00d8:0x009d,\n0x00da:0x00a7,\n0x00dc:0x009a,\n0x00dd:0x0097,\n0x00de:0x008d,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ed:0x00a1,\n0x00f0:0x008c,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00fd:0x0098,\n0x00fe:0x0095,\n0x0192:0x009f,\n0x0393:0x00e2,\n0x0398:0x00e9,\n0x03a3:0x00e4,\n0x03a6:0x00e8,\n0x03a9:0x00ea,\n0x03b1:0x00e0,\n0x03b4:0x00eb,\n0x03b5:0x00ee,\n0x03c0:0x00e3,\n0x03c3:0x00e5,\n0x03c4:0x00e7,\n0x03c6:0x00ed,\n0x207f:0x00fc,\n0x20a7:0x009e,\n0x2219:0x00f9,\n0x221a:0x00fb,\n0x221e:0x00ec,\n0x2229:0x00ef,\n0x2248:0x00f7,\n0x2261:0x00f0,\n0x2264:0x00f3,\n0x2265:0x00f2,\n0x2310:0x00a9,\n0x2320:0x00f4,\n0x2321:0x00f5,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "_string": [".py", "''\n\nimport re\n\nclass __loader__(object):\n pass\n \ndef formatter_field_name_split(fieldname):\n ''\n _list=[]\n for _name in fieldname:\n  _parts=_name.split('.')\n  for _item in _parts:\n   is_attr=False\n   if re.match('\\d+',_item):\n    _list.append((int(_item),is_attr))\n   else :\n    _list.append((_item,is_attr))\n    \n return _list[0][0],iter(_list[1:])\n \ndef formatter_parser(*args,**kw):\n ''\n \n assert len(args)==1\n assert isinstance(args[0],str)\n \n _result=[]\n for _match in re.finditer(\"([^{]*)?(\\{[^}]*\\})?\",args[0]):\n  _pre,_fmt=_match.groups()\n  if _fmt is None :\n   _result.append((_pre,None ,None ,None ))\n  elif _fmt =='{}':\n   _result.append((_pre,'','',None ))\n  else :\n   _m=re.match(\"\\{([^!]*)!?(.*)?\\}\",_fmt)\n   _name=_m.groups(0)\n   _flags=_m.groups(1)\n   \n   _result.append((_pre,_name,_flags,None ))\n   \n return _result\n"], "encodings.cp273": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp273',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'{'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xf1'\n'\\xc4'\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'~'\n'\\xdc'\n'$'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\xc2'\n'['\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'\\xc7'\n'\\xd1'\n'\\xf6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'`'\n':'\n'#'\n'\\xa7'\n\"'\"\n'='\n'\"'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\xf0'\n'\\xfd'\n'\\xfe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'\\xdf'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n'\\xd0'\n'\\xdd'\n'\\xde'\n'\\xae'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'@'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xac'\n'|'\n'\\u203e'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'\\xe4'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'\\xa6'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'\\xfc'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'}'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\xd6'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'\\\\'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n']'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "pydoc": [".py", "#!/usr/bin/env python3\n''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=['help']\n__author__=\"Ka-Ping Yee <ping@lfw.org>\"\n__date__=\"26 February 2001\"\n\n__credits__=\"\"\"Guido van Rossum, for an excellent programming language.\nTommy Burnette, the original creator of manpy.\nPaul Prescod, for all his work on onlinehelp.\nRichard Chamberlain, for the first implementation of textdoc.\n\"\"\"\n\n\n\n\n\n\n\n\n\nimport builtins\nimport imp\nimport importlib.machinery\n\nimport inspect\nimport io\nimport os\n\n\nimport platform\nimport re\nimport sys\nimport time\nimport tokenize\nimport warnings\nfrom collections import deque\nfrom reprlib import Repr\n\n\n\n\n\n\ndef pathdirs():\n ''\n dirs=[]\n normdirs=[]\n for dir in sys.path:\n  dir=os.path.abspath(dir or'.')\n  normdir=os.path.normcase(dir)\n  if normdir not in normdirs and os.path.isdir(dir):\n   dirs.append(dir)\n   normdirs.append(normdir)\n return dirs\n \ndef getdoc(object):\n ''\n result=inspect.getdoc(object)or inspect.getcomments(object)\n return result and re.sub('^ *\\n','',result.rstrip())or''\n \ndef splitdoc(doc):\n ''\n lines=doc.strip().split('\\n')\n if len(lines)==1:\n  return lines[0],''\n elif len(lines)>=2 and not lines[1].rstrip():\n  return lines[0],'\\n'.join(lines[2:])\n return'','\\n'.join(lines)\n \ndef classname(object,modname):\n ''\n name=object.__name__\n if object.__module__ !=modname:\n  name=object.__module__+'.'+name\n return name\n \ndef isdata(object):\n ''\n return not (inspect.ismodule(object)or inspect.isclass(object)or\n inspect.isroutine(object)or inspect.isframe(object)or\n inspect.istraceback(object)or inspect.iscode(object))\n \ndef replace(text,*pairs):\n ''\n while pairs:\n  text=pairs[1].join(text.split(pairs[0]))\n  pairs=pairs[2:]\n return text\n \ndef cram(text,maxlen):\n ''\n if len(text)>maxlen:\n  pre=max(0,(maxlen -3)//2)\n  post=max(0,maxlen -3 -pre)\n  return text[:pre]+'...'+text[len(text)-post:]\n return text\n \n_re_stripid=re.compile(r' at 0x[0-9a-f]{6,16}(>+)$',re.IGNORECASE)\ndef stripid(text):\n ''\n \n \n \n return text\n \ndef _is_some_method(obj):\n return (inspect.isfunction(obj)or\n inspect.ismethod(obj)or\n inspect.isbuiltin(obj)or\n inspect.ismethoddescriptor(obj))\n \ndef allmethods(cl):\n methods={}\n for key,value in inspect.getmembers(cl,_is_some_method):\n  methods[key]=1\n for base in cl.__bases__:\n  methods.update(allmethods(base))\n for key in methods.keys():\n  methods[key]=getattr(cl,key)\n return methods\n \ndef _split_list(s,predicate):\n ''\n\n\n\n\n \n \n yes=[]\n no=[]\n for x in s:\n  if predicate(x):\n   yes.append(x)\n  else :\n   no.append(x)\n return yes,no\n \ndef visiblename(name,all=None ,obj=None ):\n ''\n \n if name in {'__author__','__builtins__','__cached__','__credits__',\n '__date__','__doc__','__file__','__initializing__',\n '__loader__','__module__','__name__','__package__',\n '__path__','__qualname__','__slots__','__version__'}:\n  return 0\n  \n if name.startswith('__')and name.endswith('__'):return 1\n \n if name.startswith('_')and hasattr(obj,'_fields'):\n  return True\n if all is not None :\n \n  return name in all\n else :\n  return not name.startswith('_')\n  \ndef classify_class_attrs(object):\n ''\n results=[]\n for (name,kind,cls,value)in inspect.classify_class_attrs(object):\n  if inspect.isdatadescriptor(value):\n   kind='data descriptor'\n  results.append((name,kind,cls,value))\n return results\n \n \n \ndef ispackage(path):\n ''\n if os.path.isdir(path):\n  for ext in ('.py','.pyc','.pyo'):\n   if os.path.isfile(os.path.join(path,'__init__'+ext)):\n    return True\n return False\n \ndef source_synopsis(file):\n line=file.readline()\n while line[:1]=='#'or not line.strip():\n  line=file.readline()\n  if not line:break\n line=line.strip()\n if line[:4]=='r\"\"\"':line=line[1:]\n if line[:3]=='\"\"\"':\n  line=line[3:]\n  if line[-1:]=='\\\\':line=line[:-1]\n  while not line.strip():\n   line=file.readline()\n   if not line:break\n  result=line.split('\"\"\"')[0].strip()\n else :result=None\n return result\n \ndef synopsis(filename,cache={}):\n ''\n mtime=os.stat(filename).st_mtime\n lastupdate,result=cache.get(filename,(None ,None ))\n if lastupdate is None or lastupdate <mtime:\n  try :\n   file=tokenize.open(filename)\n  except IOError:\n  \n   return None\n  binary_suffixes=importlib.machinery.BYTECODE_SUFFIXES[:]\n  binary_suffixes +=importlib.machinery.EXTENSION_SUFFIXES[:]\n  if any(filename.endswith(x)for x in binary_suffixes):\n  \n   file.close()\n   if any(filename.endswith(x)for x in\n   importlib.machinery.BYTECODE_SUFFIXES):\n    loader=importlib.machinery.SourcelessFileLoader('__temp__',\n    filename)\n   else :\n    loader=importlib.machinery.ExtensionFileLoader('__temp__',\n    filename)\n   try :\n    module=loader.load_module('__temp__')\n   except :\n    return None\n   result=(module.__doc__ or'').splitlines()[0]\n   del sys.modules['__temp__']\n  else :\n  \n   result=source_synopsis(file)\n   file.close()\n   \n  cache[filename]=(mtime,result)\n return result\n \nclass ErrorDuringImport(Exception):\n ''\n def __init__(self,filename,exc_info):\n  self.filename=filename\n  self.exc,self.value,self.tb=exc_info\n  \n def __str__(self):\n  exc=self.exc.__name__\n  return'problem in %s - %s: %s'%(self.filename,exc,self.value)\n  \ndef importfile(path):\n ''\n magic=imp.get_magic()\n with open(path,'rb')as file:\n  if file.read(len(magic))==magic:\n   kind=imp.PY_COMPILED\n  else :\n   kind=imp.PY_SOURCE\n  file.seek(0)\n  filename=os.path.basename(path)\n  name,ext=os.path.splitext(filename)\n  try :\n   module=imp.load_module(name,file,path,(ext,'r',kind))\n  except :\n   raise ErrorDuringImport(path,sys.exc_info())\n return module\n \ndef safeimport(path,forceload=0,cache={}):\n ''\n\n\n\n\n\n \n try :\n \n \n \n \n  if forceload and path in sys.modules:\n   if path not in sys.builtin_module_names:\n   \n   \n   \n   \n   \n    subs=[m for m in sys.modules if m.startswith(path+'.')]\n    for key in [path]+subs:\n    \n     cache[key]=sys.modules[key]\n     del sys.modules[key]\n  module=__import__(path)\n except :\n \n  (exc,value,tb)=info=sys.exc_info()\n  if path in sys.modules:\n  \n   raise ErrorDuringImport(sys.modules[path].__file__,info)\n  elif exc is SyntaxError:\n  \n   raise ErrorDuringImport(value.filename,info)\n   \n   \n  elif exc is ImportError and str(value)==str(path):\n  \n   return None\n  else :\n  \n   raise ErrorDuringImport(path,sys.exc_info())\n for part in path.split('.')[1:]:\n  try :module=getattr(module,part)\n  except AttributeError:return None\n return module\n \n \n \nclass Doc:\n\n PYTHONDOCS=os.environ.get(\"PYTHONDOCS\",\n \"http://docs.python.org/%d.%d/library\"\n %sys.version_info[:2])\n \n def document(self,object,name=None ,*args):\n  ''\n  args=(object,name)+args\n  \n  \n  \n  \n  if inspect.isgetsetdescriptor(object):return self.docdata(*args)\n  if inspect.ismemberdescriptor(object):return self.docdata(*args)\n  try :\n   if inspect.ismodule(object):return self.docmodule(*args)\n   if inspect.isclass(object):return self.docclass(*args)\n   if inspect.isroutine(object):return self.docroutine(*args)\n  except AttributeError:\n   pass\n  if isinstance(object,property):return self.docproperty(*args)\n  return self.docother(*args)\n  \n def fail(self,object,name=None ,*args):\n  ''\n  message=\"don't know how to document object%s of type %s\"%(\n  name and' '+repr(name),type(object).__name__)\n  raise TypeError(message)\n  \n docmodule=docclass=docroutine=docother=docproperty=docdata=fail\n \n def getdocloc(self,object):\n  ''\n  \n  try :\n   file=inspect.getabsfile(object)\n  except TypeError:\n   file='(built-in)'\n   \n  docloc=os.environ.get(\"PYTHONDOCS\",self.PYTHONDOCS)\n  \n  basedir=os.path.join(sys.base_exec_prefix,\"lib\",\n  \"python%d.%d\"%sys.version_info[:2])\n  if (isinstance(object,type(os))and\n  (object.__name__ in ('errno','exceptions','gc','imp',\n  'marshal','posix','signal','sys',\n  '_thread','zipimport')or\n  (file.startswith(basedir)and\n  not file.startswith(os.path.join(basedir,'site-packages'))))and\n  object.__name__ not in ('xml.etree','test.pydoc_mod')):\n   if docloc.startswith(\"http://\"):\n    docloc=\"%s/%s\"%(docloc.rstrip(\"/\"),object.__name__)\n   else :\n    docloc=os.path.join(docloc,object.__name__+\".html\")\n  else :\n   docloc=None\n  return docloc\n  \n  \n  \nclass HTMLRepr(Repr):\n ''\n def __init__(self):\n  Repr.__init__(self)\n  self.maxlist=self.maxtuple=20\n  self.maxdict=10\n  self.maxstring=self.maxother=100\n  \n def escape(self,text):\n  return replace(text,'&','&amp;','<','&lt;','>','&gt;')\n  \n def repr(self,object):\n  return Repr.repr(self,object)\n  \n def repr1(self,x,level):\n  if hasattr(type(x),'__name__'):\n   methodname='repr_'+'_'.join(type(x).__name__.split())\n   if hasattr(self,methodname):\n    return getattr(self,methodname)(x,level)\n  return self.escape(cram(stripid(repr(x)),self.maxother))\n  \n def repr_string(self,x,level):\n  test=cram(x,self.maxstring)\n  testrepr=repr(test)\n  if'\\\\'in test and'\\\\'not in replace(testrepr,r'\\\\',''):\n  \n  \n   return'r'+testrepr[0]+self.escape(test)+testrepr[0]\n  return re.sub(r'((\\\\[\\\\abfnrtv\\'\"]|\\\\[0-9]..|\\\\x..|\\\\u....)+)',\n  r'<font color=\"#c040c0\">\\1</font>',\n  self.escape(testrepr))\n  \n repr_str=repr_string\n \n def repr_instance(self,x,level):\n  try :\n   return self.escape(cram(stripid(repr(x)),self.maxstring))\n  except :\n   return self.escape('<%s instance>'%x.__class__.__name__)\n   \n repr_unicode=repr_string\n \nclass HTMLDoc(Doc):\n ''\n \n \n \n _repr_instance=HTMLRepr()\n repr=_repr_instance.repr\n escape=_repr_instance.escape\n \n def page(self,title,contents):\n  ''\n  return'''\\\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n<html><head><title>Python: %s</title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n</head><body bgcolor=\"#f0f0f8\">\n%s\n</body></html>'''%(title,contents)\n  \n def heading(self,title,fgcol,bgcol,extras=''):\n  ''\n  return'''\n<table width=\"100%%\" cellspacing=0 cellpadding=2 border=0 summary=\"heading\">\n<tr bgcolor=\"%s\">\n<td valign=bottom>&nbsp;<br>\n<font color=\"%s\" face=\"helvetica, arial\">&nbsp;<br>%s</font></td\n><td align=right valign=bottom\n><font color=\"%s\" face=\"helvetica, arial\">%s</font></td></tr></table>\n    '''%(bgcol,fgcol,title,fgcol,extras or'&nbsp;')\n  \n def section(self,title,fgcol,bgcol,contents,width=6,\n prelude='',marginalia=None ,gap='&nbsp;'):\n  ''\n  if marginalia is None :\n   marginalia='<tt>'+'&nbsp;'*width+'</tt>'\n  result='''<p>\n<table width=\"100%%\" cellspacing=0 cellpadding=2 border=0 summary=\"section\">\n<tr bgcolor=\"%s\">\n<td colspan=3 valign=bottom>&nbsp;<br>\n<font color=\"%s\" face=\"helvetica, arial\">%s</font></td></tr>\n    '''%(bgcol,fgcol,title)\n  if prelude:\n   result=result+'''\n<tr bgcolor=\"%s\"><td rowspan=2>%s</td>\n<td colspan=2>%s</td></tr>\n<tr><td>%s</td>'''%(bgcol,marginalia,prelude,gap)\n  else :\n   result=result+'''\n<tr><td bgcolor=\"%s\">%s</td><td>%s</td>'''%(bgcol,marginalia,gap)\n   \n  return result+'\\n<td width=\"100%%\">%s</td></tr></table>'%contents\n  \n def bigsection(self,title,*args):\n  ''\n  title='<big><strong>%s</strong></big>'%title\n  return self.section(title,*args)\n  \n def preformat(self,text):\n  ''\n  text=self.escape(text.expandtabs())\n  return replace(text,'\\n\\n','\\n \\n','\\n\\n','\\n \\n',\n  ' ','&nbsp;','\\n','<br>\\n')\n  \n def multicolumn(self,list,format,cols=4):\n  ''\n  result=''\n  rows=(len(list)+cols -1)//cols\n  for col in range(cols):\n   result=result+'<td width=\"%d%%\" valign=top>'%(100 //cols)\n   for i in range(rows *col,rows *col+rows):\n    if i <len(list):\n     result=result+format(list[i])+'<br>\\n'\n   result=result+'</td>'\n  return'<table width=\"100%%\" summary=\"list\"><tr>%s</tr></table>'%result\n  \n def grey(self,text):return'<font color=\"#909090\">%s</font>'%text\n \n def namelink(self,name,*dicts):\n  ''\n  for dict in dicts:\n   if name in dict:\n    return'<a href=\"%s\">%s</a>'%(dict[name],name)\n  return name\n  \n def classlink(self,object,modname):\n  ''\n  name,module=object.__name__,sys.modules.get(object.__module__)\n  if hasattr(module,name)and getattr(module,name)is object:\n   return'<a href=\"%s.html#%s\">%s</a>'%(\n   module.__name__,name,classname(object,modname))\n  return classname(object,modname)\n  \n def modulelink(self,object):\n  ''\n  return'<a href=\"%s.html\">%s</a>'%(object.__name__,object.__name__)\n  \n def modpkglink(self,modpkginfo):\n  ''\n  name,path,ispackage,shadowed=modpkginfo\n  if shadowed:\n   return self.grey(name)\n  if path:\n   url='%s.%s.html'%(path,name)\n  else :\n   url='%s.html'%name\n  if ispackage:\n   text='<strong>%s</strong>&nbsp;(package)'%name\n  else :\n   text=name\n  return'<a href=\"%s\">%s</a>'%(url,text)\n  \n def filelink(self,url,path):\n  ''\n  return'<a href=\"file:%s\">%s</a>'%(url,path)\n  \n def markup(self,text,escape=None ,funcs={},classes={},methods={}):\n  ''\n  \n  escape=escape or self.escape\n  results=[]\n  here=0\n  pattern=re.compile(r'\\b((http|ftp)://\\S+[\\w/]|'\n  r'RFC[- ]?(\\d+)|'\n  r'PEP[- ]?(\\d+)|'\n  r'(self\\.)?(\\w+))')\n  while True :\n   match=pattern.search(text,here)\n   if not match:break\n   start,end=match.span()\n   results.append(escape(text[here:start]))\n   \n   all,scheme,rfc,pep,selfdot,name=match.groups()\n   if scheme:\n    url=escape(all).replace('\"','&quot;')\n    results.append('<a href=\"%s\">%s</a>'%(url,url))\n   elif rfc:\n    url='http://www.rfc-editor.org/rfc/rfc%d.txt'%int(rfc)\n    results.append('<a href=\"%s\">%s</a>'%(url,escape(all)))\n   elif pep:\n    url='http://www.python.org/dev/peps/pep-%04d/'%int(pep)\n    results.append('<a href=\"%s\">%s</a>'%(url,escape(all)))\n   elif text[end:end+1]=='(':\n    results.append(self.namelink(name,methods,funcs,classes))\n   elif selfdot:\n    results.append('self.<strong>%s</strong>'%name)\n   else :\n    results.append(self.namelink(name,classes))\n   here=end\n  results.append(escape(text[here:]))\n  return''.join(results)\n  \n  \n  \n def formattree(self,tree,modname,parent=None ):\n  ''\n  result=''\n  for entry in tree:\n   if type(entry)is type(()):\n    c,bases=entry\n    result=result+'<dt><font face=\"helvetica, arial\">'\n    result=result+self.classlink(c,modname)\n    if bases and bases !=(parent,):\n     parents=[]\n     for base in bases:\n      parents.append(self.classlink(base,modname))\n     result=result+'('+', '.join(parents)+')'\n    result=result+'\\n</font></dt>'\n   elif type(entry)is type([]):\n    result=result+'<dd>\\n%s</dd>\\n'%self.formattree(\n    entry,modname,c)\n  return'<dl>\\n%s</dl>\\n'%result\n  \n def docmodule(self,object,name=None ,mod=None ,*ignored):\n  ''\n  name=object.__name__\n  try :\n   all=object.__all__\n  except AttributeError:\n   all=None\n  parts=name.split('.')\n  links=[]\n  for i in range(len(parts)-1):\n   links.append(\n   '<a href=\"%s.html\"><font color=\"#ffffff\">%s</font></a>'%\n   ('.'.join(parts[:i+1]),parts[i]))\n  linkedname='.'.join(links+parts[-1:])\n  head='<big><big><strong>%s</strong></big></big>'%linkedname\n  try :\n   path=inspect.getabsfile(object)\n   url=path\n   if sys.platform =='win32':\n    import nturl2path\n    url=nturl2path.pathname2url(path)\n   filelink=self.filelink(url,path)\n  except TypeError:\n   filelink='(built-in)'\n  info=[]\n  if hasattr(object,'__version__'):\n   version=str(object.__version__)\n   if version[:11]=='$'+'Revision: 'and version[-1:]=='$':\n    version=version[11:-1].strip()\n   info.append('version %s'%self.escape(version))\n  if hasattr(object,'__date__'):\n   info.append(self.escape(str(object.__date__)))\n  if info:\n   head=head+' (%s)'%', '.join(info)\n  docloc=self.getdocloc(object)\n  if docloc is not None :\n   docloc='<br><a href=\"%(docloc)s\">Module Reference</a>'%locals()\n  else :\n   docloc=''\n  result=self.heading(\n  head,'#ffffff','#7799ee',\n  '<a href=\".\">index</a><br>'+filelink+docloc)\n  \n  modules=inspect.getmembers(object,inspect.ismodule)\n  \n  classes,cdict=[],{}\n  for key,value in inspect.getmembers(object,inspect.isclass):\n  \n   if (all is not None or\n   (inspect.getmodule(value)or object)is object):\n    if visiblename(key,all,object):\n     classes.append((key,value))\n     cdict[key]=cdict[value]='#'+key\n  for key,value in classes:\n   for base in value.__bases__:\n    key,modname=base.__name__,base.__module__\n    module=sys.modules.get(modname)\n    if modname !=name and module and hasattr(module,key):\n     if getattr(module,key)is base:\n      if not key in cdict:\n       cdict[key]=cdict[base]=modname+'.html#'+key\n  funcs,fdict=[],{}\n  for key,value in inspect.getmembers(object,inspect.isroutine):\n  \n   if (all is not None or\n   inspect.isbuiltin(value)or inspect.getmodule(value)is object):\n    if visiblename(key,all,object):\n     funcs.append((key,value))\n     fdict[key]='#-'+key\n     if inspect.isfunction(value):fdict[value]=fdict[key]\n  data=[]\n  for key,value in inspect.getmembers(object,isdata):\n   if visiblename(key,all,object):\n    data.append((key,value))\n    \n  doc=self.markup(getdoc(object),self.preformat,fdict,cdict)\n  doc=doc and'<tt>%s</tt>'%doc\n  result=result+'<p>%s</p>\\n'%doc\n  \n  if hasattr(object,'__path__'):\n   modpkgs=[]\n   for importer,modname,ispkg in pkgutil.iter_modules(object.__path__):\n    modpkgs.append((modname,name,ispkg,0))\n   modpkgs.sort()\n   contents=self.multicolumn(modpkgs,self.modpkglink)\n   result=result+self.bigsection(\n   'Package Contents','#ffffff','#aa55cc',contents)\n  elif modules:\n   contents=self.multicolumn(\n   modules,lambda t:self.modulelink(t[1]))\n   result=result+self.bigsection(\n   'Modules','#ffffff','#aa55cc',contents)\n   \n  if classes:\n   classlist=[value for (key,value)in classes]\n   contents=[\n   self.formattree(inspect.getclasstree(classlist,1),name)]\n   for key,value in classes:\n    contents.append(self.document(value,key,name,fdict,cdict))\n   result=result+self.bigsection(\n   'Classes','#ffffff','#ee77aa',' '.join(contents))\n  if funcs:\n   contents=[]\n   for key,value in funcs:\n    contents.append(self.document(value,key,name,fdict,cdict))\n   result=result+self.bigsection(\n   'Functions','#ffffff','#eeaa77',' '.join(contents))\n  if data:\n   contents=[]\n   for key,value in data:\n    contents.append(self.document(value,key))\n   result=result+self.bigsection(\n   'Data','#ffffff','#55aa55','<br>\\n'.join(contents))\n  if hasattr(object,'__author__'):\n   contents=self.markup(str(object.__author__),self.preformat)\n   result=result+self.bigsection(\n   'Author','#ffffff','#7799ee',contents)\n  if hasattr(object,'__credits__'):\n   contents=self.markup(str(object.__credits__),self.preformat)\n   result=result+self.bigsection(\n   'Credits','#ffffff','#7799ee',contents)\n   \n  return result\n  \n def docclass(self,object,name=None ,mod=None ,funcs={},classes={},\n *ignored):\n  ''\n  print('docclass')\n  realname=object.__name__\n  name=name or realname\n  bases=object.__bases__\n  \n  contents=[]\n  push=contents.append\n  \n  \n  class HorizontalRule:\n   def __init__(self):\n    self.needone=0\n   def maybe(self):\n    if self.needone:\n     push('<hr>\\n')\n    self.needone=1\n  hr=HorizontalRule()\n  \n  \n  mro=deque(inspect.getmro(object))\n  if len(mro)>2:\n   hr.maybe()\n   push('<dl><dt>Method resolution order:</dt>\\n')\n   for base in mro:\n    push('<dd>%s</dd>\\n'%self.classlink(base,\n    object.__module__))\n   push('</dl>\\n')\n   \n  def spill(msg,attrs,predicate):\n   ok,attrs=_split_list(attrs,predicate)\n   if ok:\n    hr.maybe()\n    push(msg)\n    for name,kind,homecls,value in ok:\n     try :\n      value=getattr(object,name)\n     except Exception:\n     \n     \n      push(self._docdescriptor(name,value,mod))\n     else :\n      push(self.document(value,name,mod,\n      funcs,classes,mdict,object))\n     push('\\n')\n   return attrs\n   \n  def spilldescriptors(msg,attrs,predicate):\n   ok,attrs=_split_list(attrs,predicate)\n   if ok:\n    hr.maybe()\n    push(msg)\n    for name,kind,homecls,value in ok:\n     push(self._docdescriptor(name,value,mod))\n   return attrs\n   \n  def spilldata(msg,attrs,predicate):\n   ok,attrs=_split_list(attrs,predicate)\n   if ok:\n    hr.maybe()\n    push(msg)\n    for name,kind,homecls,value in ok:\n     base=self.docother(getattr(object,name),name,mod)\n     if callable(value)or inspect.isdatadescriptor(value):\n      doc=getattr(value,\"__doc__\",None )\n     else :\n      doc=None\n     if doc is None :\n      push('<dl><dt>%s</dl>\\n'%base)\n     else :\n      doc=self.markup(getdoc(value),self.preformat,\n      funcs,classes,mdict)\n      doc='<dd><tt>%s</tt>'%doc\n      push('<dl><dt>%s%s</dl>\\n'%(base,doc))\n     push('\\n')\n   return attrs\n   \n  attrs=[(name,kind,cls,value)\n  for name,kind,cls,value in classify_class_attrs(object)\n  if visiblename(name,obj=object)]\n  \n  mdict={}\n  for key,kind,homecls,value in attrs:\n   mdict[key]=anchor='#'+name+'-'+key\n   try :\n    value=getattr(object,name)\n   except Exception:\n   \n   \n    pass\n   try :\n   \n   \n    mdict[value]=anchor\n   except TypeError:\n    pass\n    \n  while attrs:\n   if mro:\n    thisclass=mro.popleft()\n   else :\n    thisclass=attrs[0][2]\n   attrs,inherited=_split_list(attrs,lambda t:t[2]is thisclass)\n   \n   if thisclass is builtins.object:\n    attrs=inherited\n    continue\n   elif thisclass is object:\n    tag='defined here'\n   else :\n    tag='inherited from %s'%self.classlink(thisclass,\n    object.__module__)\n   tag +=':<br>\\n'\n   \n   \n   attrs.sort(key=lambda t:t[0])\n   \n   \n   attrs=spill('Methods %s'%tag,attrs,\n   lambda t:t[1]=='method')\n   attrs=spill('Class methods %s'%tag,attrs,\n   lambda t:t[1]=='class method')\n   attrs=spill('Static methods %s'%tag,attrs,\n   lambda t:t[1]=='static method')\n   attrs=spilldescriptors('Data descriptors %s'%tag,attrs,\n   lambda t:t[1]=='data descriptor')\n   attrs=spilldata('Data and other attributes %s'%tag,attrs,\n   lambda t:t[1]=='data')\n   assert attrs ==[]\n   attrs=inherited\n   \n  contents=''.join(contents)\n  \n  if name ==realname:\n   title='<a name=\"%s\">class <strong>%s</strong></a>'%(\n   name,realname)\n  else :\n   title='<strong>%s</strong> = <a name=\"%s\">class %s</a>'%(\n   name,name,realname)\n  if bases:\n   parents=[]\n   for base in bases:\n    parents.append(self.classlink(base,object.__module__))\n   title=title+'(%s)'%', '.join(parents)\n  doc=self.markup(getdoc(object),self.preformat,funcs,classes,mdict)\n  doc=doc and'<tt>%s<br>&nbsp;</tt>'%doc\n  \n  return self.section(title,'#000000','#ffc8d8',contents,3,doc)\n  \n def formatvalue(self,object):\n  ''\n  return self.grey('='+self.repr(object))\n  \n def docroutine(self,object,name=None ,mod=None ,\n funcs={},classes={},methods={},cl=None ):\n  ''\n  realname=object.__name__\n  name=name or realname\n  anchor=(cl and cl.__name__ or'')+'-'+name\n  note=''\n  skipdocs=0\n  if inspect.ismethod(object):\n   imclass=object.__self__.__class__\n   if cl:\n    if imclass is not cl:\n     note=' from '+self.classlink(imclass,mod)\n   else :\n    if object.__self__ is not None :\n     note=' method of %s instance'%self.classlink(\n     object.__self__.__class__,mod)\n    else :\n     note=' unbound %s method'%self.classlink(imclass,mod)\n   object=object.__func__\n   \n  if name ==realname:\n   title='<a name=\"%s\"><strong>%s</strong></a>'%(anchor,realname)\n  else :\n   if (cl and realname in cl.__dict__ and\n   cl.__dict__[realname]is object):\n    reallink='<a href=\"#%s\">%s</a>'%(\n    cl.__name__+'-'+realname,realname)\n    skipdocs=1\n   else :\n    reallink=realname\n   title='<a name=\"%s\"><strong>%s</strong></a> = %s'%(\n   anchor,name,reallink)\n  if inspect.isfunction(object):\n   args,varargs,kwonlyargs,kwdefaults,varkw,defaults,ann=   inspect.getfullargspec(object)\n   argspec=inspect.formatargspec(\n   args,varargs,kwonlyargs,kwdefaults,varkw,defaults,ann,\n   formatvalue=self.formatvalue,\n   formatannotation=inspect.formatannotationrelativeto(object))\n   if realname =='<lambda>':\n    title='<strong>%s</strong> <em>lambda</em> '%name\n    \n    \n    \n    argspec=argspec[1:-1]\n  else :\n   argspec='(...)'\n   \n  decl=title+argspec+(note and self.grey(\n  '<font face=\"helvetica, arial\">%s</font>'%note))\n  \n  if skipdocs:\n   return'<dl><dt>%s</dt></dl>\\n'%decl\n  else :\n   doc=self.markup(\n   getdoc(object),self.preformat,funcs,classes,methods)\n   doc=doc and'<dd><tt>%s</tt></dd>'%doc\n   return'<dl><dt>%s</dt>%s</dl>\\n'%(decl,doc)\n   \n def _docdescriptor(self,name,value,mod):\n  results=[]\n  push=results.append\n  \n  if name:\n   push('<dl><dt><strong>%s</strong></dt>\\n'%name)\n  if value.__doc__ is not None :\n   doc=self.markup(getdoc(value),self.preformat)\n   push('<dd><tt>%s</tt></dd>\\n'%doc)\n  push('</dl>\\n')\n  \n  return''.join(results)\n  \n def docproperty(self,object,name=None ,mod=None ,cl=None ):\n  ''\n  return self._docdescriptor(name,object,mod)\n  \n def docother(self,object,name=None ,mod=None ,*ignored):\n  ''\n  lhs=name and'<strong>%s</strong> = '%name or''\n  return lhs+self.repr(object)\n  \n def docdata(self,object,name=None ,mod=None ,cl=None ):\n  ''\n  return self._docdescriptor(name,object,mod)\n  \n def index(self,dir,shadowed=None ):\n  ''\n  modpkgs=[]\n  if shadowed is None :shadowed={}\n  for importer,name,ispkg in pkgutil.iter_modules([dir]):\n   if any((0xD800 <=ord(ch)<=0xDFFF)for ch in name):\n   \n    continue\n   modpkgs.append((name,'',ispkg,name in shadowed))\n   shadowed[name]=1\n   \n  modpkgs.sort()\n  contents=self.multicolumn(modpkgs,self.modpkglink)\n  return self.bigsection(dir,'#ffffff','#ee77aa',contents)\n  \n  \n  \nclass TextRepr(Repr):\n ''\n def __init__(self):\n  Repr.__init__(self)\n  self.maxlist=self.maxtuple=20\n  self.maxdict=10\n  self.maxstring=self.maxother=100\n  \n  \n  \n  \n  \n  \n  \n  \n def repr_string(self,x,level):\n  test=cram(x,self.maxstring)\n  testrepr=repr(test)\n  if'\\\\'in test and'\\\\'not in replace(testrepr,r'\\\\',''):\n  \n  \n   return'r'+testrepr[0]+test+testrepr[0]\n  return testrepr\n  \n repr_str=repr_string\n \n def repr_instance(self,x,level):\n  try :\n   return cram(stripid(repr(x)),self.maxstring)\n  except :\n   return'<%s instance>'%x.__class__.__name__\n   \nclass TextDoc(Doc):\n ''\n \n \n \n _repr_instance=TextRepr()\n repr=_repr_instance.repr\n \n def bold(self,text):\n  ''\n  return''.join(ch+'\\b'+ch for ch in text)\n  \n def indent(self,text,prefix='    '):\n  ''\n  if not text:return''\n  lines=[prefix+line for line in text.split('\\n')]\n  if lines:lines[-1]=lines[-1].rstrip()\n  return'\\n'.join(lines)\n  \n def section(self,title,contents):\n  ''\n  clean_contents=self.indent(contents).rstrip()\n  return self.bold(title)+'\\n'+clean_contents+'\\n\\n'\n  \n  \n  \n def formattree(self,tree,modname,parent=None ,prefix=''):\n  ''\n  result=''\n  for entry in tree:\n   if type(entry)is type(()):\n    c,bases=entry\n    result=result+prefix+classname(c,modname)\n    if bases and bases !=(parent,):\n     parents=(classname(c,modname)for c in bases)\n     result=result+'(%s)'%', '.join(parents)\n    result=result+'\\n'\n   elif type(entry)is type([]):\n    result=result+self.formattree(\n    entry,modname,c,prefix+'    ')\n  return result\n  \n def docmodule(self,object,name=None ,mod=None ):\n  ''\n  name=object.__name__\n  synop,desc=splitdoc(getdoc(object))\n  result=self.section('NAME',name+(synop and' - '+synop))\n  all=getattr(object,'__all__',None )\n  docloc=self.getdocloc(object)\n  if docloc is not None :\n   result=result+self.section('MODULE REFERENCE',docloc+\"\"\"\n\nThe following documentation is automatically generated from the Python\nsource files.  It may be incomplete, incorrect or include features that\nare considered implementation detail and may vary between Python\nimplementations.  When in doubt, consult the module reference at the\nlocation listed above.\n\"\"\")\n   \n  if desc:\n   result=result+self.section('DESCRIPTION',desc)\n   \n  classes=[]\n  for key,value in inspect.getmembers(object,inspect.isclass):\n  \n   if (all is not None\n   or (inspect.getmodule(value)or object)is object):\n    if visiblename(key,all,object):\n     classes.append((key,value))\n  funcs=[]\n  for key,value in inspect.getmembers(object,inspect.isroutine):\n  \n   if (all is not None or\n   inspect.isbuiltin(value)or inspect.getmodule(value)is object):\n    if visiblename(key,all,object):\n     funcs.append((key,value))\n  data=[]\n  for key,value in inspect.getmembers(object,isdata):\n   if visiblename(key,all,object):\n    data.append((key,value))\n    \n  modpkgs=[]\n  modpkgs_names=set()\n  if hasattr(object,'__path__'):\n   for importer,modname,ispkg in pkgutil.iter_modules(object.__path__):\n    modpkgs_names.add(modname)\n    if ispkg:\n     modpkgs.append(modname+' (package)')\n    else :\n     modpkgs.append(modname)\n     \n   modpkgs.sort()\n   result=result+self.section(\n   'PACKAGE CONTENTS','\\n'.join(modpkgs))\n   \n   \n  submodules=[]\n  for key,value in inspect.getmembers(object,inspect.ismodule):\n   if value.__name__.startswith(name+'.')and key not in modpkgs_names:\n    submodules.append(key)\n  if submodules:\n   submodules.sort()\n   result=result+self.section(\n   'SUBMODULES','\\n'.join(submodules))\n   \n  if classes:\n   classlist=[value for key,value in classes]\n   contents=[self.formattree(\n   inspect.getclasstree(classlist,1),name)]\n   for key,value in classes:\n    contents.append(self.document(value,key,name))\n   result=result+self.section('CLASSES','\\n'.join(contents))\n   \n  if funcs:\n   contents=[]\n   for key,value in funcs:\n    contents.append(self.document(value,key,name))\n   result=result+self.section('FUNCTIONS','\\n'.join(contents))\n   \n  if data:\n   contents=[]\n   for key,value in data:\n    contents.append(self.docother(value,key,name,maxlen=70))\n   result=result+self.section('DATA','\\n'.join(contents))\n   \n  if hasattr(object,'__version__'):\n   version=str(object.__version__)\n   if version[:11]=='$'+'Revision: 'and version[-1:]=='$':\n    version=version[11:-1].strip()\n   result=result+self.section('VERSION',version)\n  if hasattr(object,'__date__'):\n   result=result+self.section('DATE',str(object.__date__))\n  if hasattr(object,'__author__'):\n   result=result+self.section('AUTHOR',str(object.__author__))\n  if hasattr(object,'__credits__'):\n   result=result+self.section('CREDITS',str(object.__credits__))\n  try :\n   file=inspect.getabsfile(object)\n  except TypeError:\n   file='(built-in)'\n  result=result+self.section('FILE',file)\n  return result\n  \n def docclass(self,object,name=None ,mod=None ,*ignored):\n  ''\n  realname=object.__name__\n  name=name or realname\n  bases=object.__bases__\n  \n  def makename(c,m=object.__module__):\n   return classname(c,m)\n   \n  if name ==realname:\n   title='class '+self.bold(realname)\n  else :\n   title=self.bold(name)+' = class '+realname\n  if bases:\n   parents=map(makename,bases)\n   title=title+'(%s)'%', '.join(parents)\n   \n  doc=getdoc(object)\n  contents=doc and [doc+'\\n']or []\n  push=contents.append\n  \n  \n  mro=deque(inspect.getmro(object))\n  if len(mro)>2:\n   push(\"Method resolution order:\")\n   for base in mro:\n    push('    '+makename(base))\n   push('')\n   \n   \n  class HorizontalRule:\n   def __init__(self):\n    self.needone=0\n   def maybe(self):\n    if self.needone:\n     push('-'*70)\n    self.needone=1\n  hr=HorizontalRule()\n  \n  def spill(msg,attrs,predicate):\n   ok,attrs=_split_list(attrs,predicate)\n   if ok:\n    hr.maybe()\n    push(msg)\n    for name,kind,homecls,value in ok:\n     try :\n      value=getattr(object,name)\n     except Exception:\n     \n     \n      push(self._docdescriptor(name,value,mod))\n     else :\n      push(self.document(value,\n      name,mod,object))\n   return attrs\n   \n  def spilldescriptors(msg,attrs,predicate):\n   ok,attrs=_split_list(attrs,predicate)\n   if ok:\n    hr.maybe()\n    push(msg)\n    for name,kind,homecls,value in ok:\n     push(self._docdescriptor(name,value,mod))\n   return attrs\n   \n  def spilldata(msg,attrs,predicate):\n   ok,attrs=_split_list(attrs,predicate)\n   if ok:\n    hr.maybe()\n    push(msg)\n    for name,kind,homecls,value in ok:\n     if callable(value)or inspect.isdatadescriptor(value):\n      doc=getdoc(value)\n     else :\n      doc=None\n     push(self.docother(getattr(object,name),\n     name,mod,maxlen=70,doc=doc)+'\\n')\n   return attrs\n   \n  attrs=[(name,kind,cls,value)\n  for name,kind,cls,value in classify_class_attrs(object)\n  if visiblename(name,obj=object)]\n  \n  while attrs:\n   if mro:\n    thisclass=mro.popleft()\n   else :\n    thisclass=attrs[0][2]\n   attrs,inherited=_split_list(attrs,lambda t:t[2]is thisclass)\n   \n   if thisclass is builtins.object:\n    attrs=inherited\n    continue\n   elif thisclass is object:\n    tag=\"defined here\"\n   else :\n    tag=\"inherited from %s\"%classname(thisclass,\n    object.__module__)\n    \n    \n   attrs.sort()\n   \n   \n   attrs=spill(\"Methods %s:\\n\"%tag,attrs,\n   lambda t:t[1]=='method')\n   attrs=spill(\"Class methods %s:\\n\"%tag,attrs,\n   lambda t:t[1]=='class method')\n   attrs=spill(\"Static methods %s:\\n\"%tag,attrs,\n   lambda t:t[1]=='static method')\n   attrs=spilldescriptors(\"Data descriptors %s:\\n\"%tag,attrs,\n   lambda t:t[1]=='data descriptor')\n   attrs=spilldata(\"Data and other attributes %s:\\n\"%tag,attrs,\n   lambda t:t[1]=='data')\n   assert attrs ==[]\n   attrs=inherited\n   \n  contents='\\n'.join(contents)\n  if not contents:\n   return title+'\\n'\n  return title+'\\n'+self.indent(contents.rstrip(),' |  ')+'\\n'\n  \n def formatvalue(self,object):\n  ''\n  return'='+self.repr(object)\n  \n def docroutine(self,object,name=None ,mod=None ,cl=None ):\n  ''\n  realname=object.__name__\n  name=name or realname\n  note=''\n  skipdocs=0\n  if inspect.ismethod(object):\n   imclass=object.__self__.__class__\n   if cl:\n    if imclass is not cl:\n     note=' from '+classname(imclass,mod)\n   else :\n    if object.__self__ is not None :\n     note=' method of %s instance'%classname(\n     object.__self__.__class__,mod)\n    else :\n     note=' unbound %s method'%classname(imclass,mod)\n   object=object.__func__\n   \n  if name ==realname:\n   title=self.bold(realname)\n  else :\n   if (cl and realname in cl.__dict__ and\n   cl.__dict__[realname]is object):\n    skipdocs=1\n   title=self.bold(name)+' = '+realname\n  if inspect.isfunction(object):\n   args,varargs,varkw,defaults,kwonlyargs,kwdefaults,ann=   inspect.getfullargspec(object)\n   argspec=inspect.formatargspec(\n   args,varargs,varkw,defaults,kwonlyargs,kwdefaults,ann,\n   formatvalue=self.formatvalue,\n   formatannotation=inspect.formatannotationrelativeto(object))\n   if realname =='<lambda>':\n    title=self.bold(name)+' lambda '\n    \n    \n    \n    argspec=argspec[1:-1]\n  else :\n   argspec='(...)'\n  decl=title+argspec+note\n  \n  if skipdocs:\n   return decl+'\\n'\n  else :\n   doc=getdoc(object)or''\n   return decl+'\\n'+(doc and self.indent(doc).rstrip()+'\\n')\n   \n def _docdescriptor(self,name,value,mod):\n  results=[]\n  push=results.append\n  \n  if name:\n   push(self.bold(name))\n   push('\\n')\n  doc=getdoc(value)or''\n  if doc:\n   push(self.indent(doc))\n   push('\\n')\n  return''.join(results)\n  \n def docproperty(self,object,name=None ,mod=None ,cl=None ):\n  ''\n  return self._docdescriptor(name,object,mod)\n  \n def docdata(self,object,name=None ,mod=None ,cl=None ):\n  ''\n  return self._docdescriptor(name,object,mod)\n  \n def docother(self,object,name=None ,mod=None ,parent=None ,maxlen=None ,doc=None ):\n  ''\n  repr=self.repr(object)\n  if maxlen:\n   line=(name and name+' = 'or'')+repr\n   chop=maxlen -len(line)\n   if chop <0:repr=repr[:chop]+'...'\n  line=(name and self.bold(name)+' = 'or'')+repr\n  if doc is not None :\n   line +='\\n'+self.indent(str(doc))\n  return line\n  \nclass _PlainTextDoc(TextDoc):\n ''\n def bold(self,text):\n  return text\n  \n  \n  \ndef pager(text):\n ''\n global pager\n pager=getpager()\n pager(text)\n \ndef getpager():\n ''\n if not hasattr(sys.stdout,\"isatty\"):\n  return plainpager\n if not sys.stdin.isatty()or not sys.stdout.isatty():\n  return plainpager\n if'PAGER'in os.environ:\n  if sys.platform =='win32':\n   return lambda text:tempfilepager(plain(text),os.environ['PAGER'])\n  elif os.environ.get('TERM')in ('dumb','emacs'):\n   return lambda text:pipepager(plain(text),os.environ['PAGER'])\n  else :\n   return lambda text:pipepager(text,os.environ['PAGER'])\n if os.environ.get('TERM')in ('dumb','emacs'):\n  return plainpager\n if sys.platform =='win32'or sys.platform.startswith('os2'):\n  return lambda text:tempfilepager(plain(text),'more <')\n if hasattr(os,'system')and os.system('(less) 2>/dev/null')==0:\n  return lambda text:pipepager(text,'less')\n  \n import tempfile\n (fd,filename)=tempfile.mkstemp()\n os.close(fd)\n try :\n  if hasattr(os,'system')and os.system('more \"%s\"'%filename)==0:\n   return lambda text:pipepager(text,'more')\n  else :\n   return ttypager\n finally :\n  os.unlink(filename)\n  \ndef plain(text):\n ''\n return re.sub('.\\b','',text)\n \ndef pipepager(text,cmd):\n ''\n pipe=os.popen(cmd,'w')\n try :\n  pipe.write(text)\n  pipe.close()\n except IOError:\n  pass\n  \ndef tempfilepager(text,cmd):\n ''\n import tempfile\n filename=tempfile.mktemp()\n file=open(filename,'w')\n file.write(text)\n file.close()\n try :\n  os.system(cmd+' \"'+filename+'\"')\n finally :\n  os.unlink(filename)\n  \ndef ttypager(text):\n ''\n lines=plain(text).split('\\n')\n try :\n  import tty\n  fd=sys.stdin.fileno()\n  old=tty.tcgetattr(fd)\n  tty.setcbreak(fd)\n  getchar=lambda :sys.stdin.read(1)\n except (ImportError,AttributeError):\n  tty=None\n  getchar=lambda :sys.stdin.readline()[:-1][:1]\n  \n try :\n  r=inc=os.environ.get('LINES',25)-1\n  sys.stdout.write('\\n'.join(lines[:inc])+'\\n')\n  while lines[r:]:\n   sys.stdout.write('-- more --')\n   sys.stdout.flush()\n   c=getchar()\n   \n   if c in ('q','Q'):\n    sys.stdout.write('\\r          \\r')\n    break\n   elif c in ('\\r','\\n'):\n    sys.stdout.write('\\r          \\r'+lines[r]+'\\n')\n    r=r+1\n    continue\n   if c in ('b','B','\\x1b'):\n    r=r -inc -inc\n    if r <0:r=0\n   sys.stdout.write('\\n'+'\\n'.join(lines[r:r+inc])+'\\n')\n   r=r+inc\n   \n finally :\n  if tty:\n   tty.tcsetattr(fd,tty.TCSAFLUSH,old)\n   \ndef plainpager(text):\n ''\n sys.stdout.write(plain(text))\n \ndef describe(thing):\n ''\n if inspect.ismodule(thing):\n  if thing.__name__ in sys.builtin_module_names:\n   return'built-in module '+thing.__name__\n  if hasattr(thing,'__path__'):\n   return'package '+thing.__name__\n  else :\n   return'module '+thing.__name__\n if inspect.isbuiltin(thing):\n  return'built-in function '+thing.__name__\n if inspect.isgetsetdescriptor(thing):\n  return'getset descriptor %s.%s.%s'%(\n  thing.__objclass__.__module__,thing.__objclass__.__name__,\n  thing.__name__)\n if inspect.ismemberdescriptor(thing):\n  return'member descriptor %s.%s.%s'%(\n  thing.__objclass__.__module__,thing.__objclass__.__name__,\n  thing.__name__)\n if inspect.isclass(thing):\n  return'class '+thing.__name__\n if inspect.isfunction(thing):\n  return'function '+thing.__name__\n if inspect.ismethod(thing):\n  return'method '+thing.__name__\n return type(thing).__name__\n \ndef locate(path,forceload=0):\n ''\n parts=[part for part in path.split('.')if part]\n module,n=None ,0\n while n <len(parts):\n  nextmodule=safeimport('.'.join(parts[:n+1]),forceload)\n  if nextmodule:module,n=nextmodule,n+1\n  else :break\n if module:\n  object=module\n else :\n  object=builtins\n for part in parts[n:]:\n  try :\n   object=getattr(object,part)\n  except AttributeError:\n   return None\n return object\n \n \n \ntext=TextDoc()\nplaintext=_PlainTextDoc()\nhtml=HTMLDoc()\n\ndef resolve(thing,forceload=0):\n ''\n if isinstance(thing,str):\n  object=locate(thing,forceload)\n  if not object:\n   raise ImportError('no Python documentation found for %r'%thing)\n  return object,thing\n else :\n  name=getattr(thing,'__name__',None )\n  return thing,name if isinstance(name,str)else None\n  \ndef render_doc(thing,title='Python Library Documentation: %s',forceload=0,\nrenderer=None ):\n ''\n if renderer is None :\n  renderer=text\n object,name=resolve(thing,forceload)\n desc=describe(object)\n module=inspect.getmodule(object)\n if name and'.'in name:\n  desc +=' in '+name[:name.rfind('.')]\n elif module and module is not object:\n  desc +=' in module '+module.__name__\n  \n if not (inspect.ismodule(object)or\n inspect.isclass(object)or\n inspect.isroutine(object)or\n inspect.isgetsetdescriptor(object)or\n inspect.ismemberdescriptor(object)or\n isinstance(object,property)):\n \n \n  object=type(object)\n  desc +=' object'\n return title %desc+'\\n\\n'+renderer.document(object,name)\n \ndef doc(thing,title='Python Library Documentation: %s',forceload=0,\noutput=None ):\n ''\n try :\n  if output is None :\n   pager(render_doc(thing,title,forceload))\n  else :\n   output.write(render_doc(thing,title,forceload,plaintext))\n except (ImportError,ErrorDuringImport)as value:\n  print(value)\n  \ndef writedoc(thing,forceload=0):\n ''\n try :\n  object,name=resolve(thing,forceload)\n  page=html.page(describe(object),html.document(object,name))\n  file=open(name+'.html','w',encoding='utf-8')\n  file.write(page)\n  file.close()\n  print('wrote',name+'.html')\n except (ImportError,ErrorDuringImport)as value:\n  print(value)\n  \ndef writedocs(dir,pkgpath='',done=None ):\n ''\n if done is None :done={}\n for importer,modname,ispkg in pkgutil.walk_packages([dir],pkgpath):\n  writedoc(modname)\n return\n \nclass Helper:\n\n\n\n\n\n\n\n\n\n\n\n\n keywords={\n 'False':'',\n 'None':'',\n 'True':'',\n 'and':'BOOLEAN',\n 'as':'with',\n 'assert':('assert',''),\n 'break':('break','while for'),\n 'class':('class','CLASSES SPECIALMETHODS'),\n 'continue':('continue','while for'),\n 'def':('function',''),\n 'del':('del','BASICMETHODS'),\n 'elif':'if',\n 'else':('else','while for'),\n 'except':'try',\n 'finally':'try',\n 'for':('for','break continue while'),\n 'from':'import',\n 'global':('global','nonlocal NAMESPACES'),\n 'if':('if','TRUTHVALUE'),\n 'import':('import','MODULES'),\n 'in':('in','SEQUENCEMETHODS'),\n 'is':'COMPARISON',\n 'lambda':('lambda','FUNCTIONS'),\n 'nonlocal':('nonlocal','global NAMESPACES'),\n 'not':'BOOLEAN',\n 'or':'BOOLEAN',\n 'pass':('pass',''),\n 'raise':('raise','EXCEPTIONS'),\n 'return':('return','FUNCTIONS'),\n 'try':('try','EXCEPTIONS'),\n 'while':('while','break continue if TRUTHVALUE'),\n 'with':('with','CONTEXTMANAGERS EXCEPTIONS yield'),\n 'yield':('yield',''),\n }\n \n \n _symbols_inverse={\n 'STRINGS':(\"'\",\"'''\",\"r'\",\"b'\",'\"\"\"','\"','r\"','b\"'),\n 'OPERATORS':('+','-','*','**','/','//','%','<<','>>','&',\n '|','^','~','<','>','<=','>=','==','!=','<>'),\n 'COMPARISON':('<','>','<=','>=','==','!=','<>'),\n 'UNARY':('-','~'),\n 'AUGMENTEDASSIGNMENT':('+=','-=','*=','/=','%=','&=','|=',\n '^=','<<=','>>=','**=','//='),\n 'BITWISE':('<<','>>','&','|','^','~'),\n 'COMPLEX':('j','J')\n }\n symbols={\n '%':'OPERATORS FORMATTING',\n '**':'POWER',\n ',':'TUPLES LISTS FUNCTIONS',\n '.':'ATTRIBUTES FLOAT MODULES OBJECTS',\n '...':'ELLIPSIS',\n ':':'SLICINGS DICTIONARYLITERALS',\n '@':'def class',\n '\\\\':'STRINGS',\n '_':'PRIVATENAMES',\n '__':'PRIVATENAMES SPECIALMETHODS',\n '`':'BACKQUOTES',\n '(':'TUPLES FUNCTIONS CALLS',\n ')':'TUPLES FUNCTIONS CALLS',\n '[':'LISTS SUBSCRIPTS SLICINGS',\n ']':'LISTS SUBSCRIPTS SLICINGS'\n }\n for topic,symbols_ in _symbols_inverse.items():\n  for symbol in symbols_:\n   topics=symbols.get(symbol,topic)\n   if topic not in topics:\n    topics=topics+' '+topic\n   symbols[symbol]=topics\n   \n topics={\n 'TYPES':('types','STRINGS UNICODE NUMBERS SEQUENCES MAPPINGS '\n 'FUNCTIONS CLASSES MODULES FILES inspect'),\n 'STRINGS':('strings','str UNICODE SEQUENCES STRINGMETHODS '\n 'FORMATTING TYPES'),\n 'STRINGMETHODS':('string-methods','STRINGS FORMATTING'),\n 'FORMATTING':('formatstrings','OPERATORS'),\n 'UNICODE':('strings','encodings unicode SEQUENCES STRINGMETHODS '\n 'FORMATTING TYPES'),\n 'NUMBERS':('numbers','INTEGER FLOAT COMPLEX TYPES'),\n 'INTEGER':('integers','int range'),\n 'FLOAT':('floating','float math'),\n 'COMPLEX':('imaginary','complex cmath'),\n 'SEQUENCES':('typesseq','STRINGMETHODS FORMATTING range LISTS'),\n 'MAPPINGS':'DICTIONARIES',\n 'FUNCTIONS':('typesfunctions','def TYPES'),\n 'METHODS':('typesmethods','class def CLASSES TYPES'),\n 'CODEOBJECTS':('bltin-code-objects','compile FUNCTIONS TYPES'),\n 'TYPEOBJECTS':('bltin-type-objects','types TYPES'),\n 'FRAMEOBJECTS':'TYPES',\n 'TRACEBACKS':'TYPES',\n 'NONE':('bltin-null-object',''),\n 'ELLIPSIS':('bltin-ellipsis-object','SLICINGS'),\n 'FILES':('bltin-file-objects',''),\n 'SPECIALATTRIBUTES':('specialattrs',''),\n 'CLASSES':('types','class SPECIALMETHODS PRIVATENAMES'),\n 'MODULES':('typesmodules','import'),\n 'PACKAGES':'import',\n 'EXPRESSIONS':('operator-summary','lambda or and not in is BOOLEAN '\n 'COMPARISON BITWISE SHIFTING BINARY FORMATTING POWER '\n 'UNARY ATTRIBUTES SUBSCRIPTS SLICINGS CALLS TUPLES '\n 'LISTS DICTIONARIES'),\n 'OPERATORS':'EXPRESSIONS',\n 'PRECEDENCE':'EXPRESSIONS',\n 'OBJECTS':('objects','TYPES'),\n 'SPECIALMETHODS':('specialnames','BASICMETHODS ATTRIBUTEMETHODS '\n 'CALLABLEMETHODS SEQUENCEMETHODS MAPPINGMETHODS '\n 'NUMBERMETHODS CLASSES'),\n 'BASICMETHODS':('customization','hash repr str SPECIALMETHODS'),\n 'ATTRIBUTEMETHODS':('attribute-access','ATTRIBUTES SPECIALMETHODS'),\n 'CALLABLEMETHODS':('callable-types','CALLS SPECIALMETHODS'),\n 'SEQUENCEMETHODS':('sequence-types','SEQUENCES SEQUENCEMETHODS '\n 'SPECIALMETHODS'),\n 'MAPPINGMETHODS':('sequence-types','MAPPINGS SPECIALMETHODS'),\n 'NUMBERMETHODS':('numeric-types','NUMBERS AUGMENTEDASSIGNMENT '\n 'SPECIALMETHODS'),\n 'EXECUTION':('execmodel','NAMESPACES DYNAMICFEATURES EXCEPTIONS'),\n 'NAMESPACES':('naming','global nonlocal ASSIGNMENT DELETION DYNAMICFEATURES'),\n 'DYNAMICFEATURES':('dynamic-features',''),\n 'SCOPING':'NAMESPACES',\n 'FRAMES':'NAMESPACES',\n 'EXCEPTIONS':('exceptions','try except finally raise'),\n 'CONVERSIONS':('conversions',''),\n 'IDENTIFIERS':('identifiers','keywords SPECIALIDENTIFIERS'),\n 'SPECIALIDENTIFIERS':('id-classes',''),\n 'PRIVATENAMES':('atom-identifiers',''),\n 'LITERALS':('atom-literals','STRINGS NUMBERS TUPLELITERALS '\n 'LISTLITERALS DICTIONARYLITERALS'),\n 'TUPLES':'SEQUENCES',\n 'TUPLELITERALS':('exprlists','TUPLES LITERALS'),\n 'LISTS':('typesseq-mutable','LISTLITERALS'),\n 'LISTLITERALS':('lists','LISTS LITERALS'),\n 'DICTIONARIES':('typesmapping','DICTIONARYLITERALS'),\n 'DICTIONARYLITERALS':('dict','DICTIONARIES LITERALS'),\n 'ATTRIBUTES':('attribute-references','getattr hasattr setattr ATTRIBUTEMETHODS'),\n 'SUBSCRIPTS':('subscriptions','SEQUENCEMETHODS'),\n 'SLICINGS':('slicings','SEQUENCEMETHODS'),\n 'CALLS':('calls','EXPRESSIONS'),\n 'POWER':('power','EXPRESSIONS'),\n 'UNARY':('unary','EXPRESSIONS'),\n 'BINARY':('binary','EXPRESSIONS'),\n 'SHIFTING':('shifting','EXPRESSIONS'),\n 'BITWISE':('bitwise','EXPRESSIONS'),\n 'COMPARISON':('comparisons','EXPRESSIONS BASICMETHODS'),\n 'BOOLEAN':('booleans','EXPRESSIONS TRUTHVALUE'),\n 'ASSERTION':'assert',\n 'ASSIGNMENT':('assignment','AUGMENTEDASSIGNMENT'),\n 'AUGMENTEDASSIGNMENT':('augassign','NUMBERMETHODS'),\n 'DELETION':'del',\n 'RETURNING':'return',\n 'IMPORTING':'import',\n 'CONDITIONAL':'if',\n 'LOOPING':('compound','for while break continue'),\n 'TRUTHVALUE':('truth','if while and or not BASICMETHODS'),\n 'DEBUGGING':('debugger','pdb'),\n 'CONTEXTMANAGERS':('context-managers','with'),\n }\n \n def __init__(self,input=None ,output=None ):\n  self._input=input\n  self._output=output\n  \n  \n  self.input=self._input or sys.stdin\n  self.output=self._output or sys.stdout\n  \n  \n  \n  \n  \n def __repr__(self):\n  if inspect.stack()[1][3]=='?':\n   self()\n   return''\n  return'<pydoc.Helper instance>'\n  \n _GoInteractive=object()\n def __call__(self,request=_GoInteractive):\n  if request is not self._GoInteractive:\n   self.help(request)\n  else :\n   self.intro()\n   self.interact()\n   self.output.write('''\nYou are now leaving help and returning to the Python interpreter.\nIf you want to ask for help on a particular object directly from the\ninterpreter, you can type \"help(object)\".  Executing \"help('string')\"\nhas the same effect as typing a particular string at the help> prompt.\n''')\n   \n def interact(self):\n  self.output.write('\\n')\n  while True :\n   try :\n    request=self.getline('help> ')\n    if not request:break\n   except (KeyboardInterrupt,EOFError):\n    break\n   request=replace(request,'\"','',\"'\",'').strip()\n   if request.lower()in ('q','quit'):break\n   self.help(request)\n   \n def getline(self,prompt):\n  ''\n  if self.input is sys.stdin:\n   return input(prompt)\n  else :\n   self.output.write(prompt)\n   self.output.flush()\n   return self.input.readline()\n   \n def help(self,request):\n  if type(request)is type(''):\n   request=request.strip()\n   if request =='help':self.intro()\n   elif request =='keywords':self.listkeywords()\n   elif request =='symbols':self.listsymbols()\n   elif request =='topics':self.listtopics()\n   elif request =='modules':self.listmodules()\n   elif request[:8]=='modules ':\n    self.listmodules(request.split()[1])\n   elif request in self.symbols:self.showsymbol(request)\n   elif request in ['True','False','None']:\n   \n    doc(eval(request),'Help on %s:')\n   elif request in self.keywords:self.showtopic(request)\n   elif request in self.topics:self.showtopic(request)\n   elif request:doc(request,'Help on %s:',output=self._output)\n  elif isinstance(request,Helper):self()\n  else :doc(request,'Help on %s:',output=self._output)\n  self.output.write('\\n')\n  \n def intro(self):\n  self.output.write('''\nWelcome to Python %s!  This is the interactive help utility.\n\nIf this is your first time using Python, you should definitely check out\nthe tutorial on the Internet at http://docs.python.org/%s/tutorial/.\n\nEnter the name of any module, keyword, or topic to get help on writing\nPython programs and using Python modules.  To quit this help utility and\nreturn to the interpreter, just type \"quit\".\n\nTo get a list of available modules, keywords, or topics, type \"modules\",\n\"keywords\", or \"topics\".  Each module also comes with a one-line summary\nof what it does; to list the modules whose summaries contain a given word\nsuch as \"spam\", type \"modules spam\".\n'''%tuple([sys.version[:3]]*2))\n  \n def list(self,items,columns=4,width=80):\n  items=list(sorted(items))\n  colw=width //columns\n  rows=(len(items)+columns -1)//columns\n  for row in range(rows):\n   for col in range(columns):\n    i=col *rows+row\n    if i <len(items):\n     self.output.write(items[i])\n     if col <columns -1:\n      self.output.write(' '+' '*(colw -1 -len(items[i])))\n   self.output.write('\\n')\n   \n def listkeywords(self):\n  self.output.write('''\nHere is a list of the Python keywords.  Enter any keyword to get more help.\n\n''')\n  self.list(self.keywords.keys())\n  \n def listsymbols(self):\n  self.output.write('''\nHere is a list of the punctuation symbols which Python assigns special meaning\nto. Enter any symbol to get more help.\n\n''')\n  self.list(self.symbols.keys())\n  \n def listtopics(self):\n  self.output.write('''\nHere is a list of available topics.  Enter any topic name to get more help.\n\n''')\n  self.list(self.topics.keys())\n  \n def showtopic(self,topic,more_xrefs=''):\n  try :\n   import pydoc_data.topics\n  except ImportError:\n   self.output.write('''\nSorry, topic and keyword documentation is not available because the\nmodule \"pydoc_data.topics\" could not be found.\n''')\n   return\n  target=self.topics.get(topic,self.keywords.get(topic))\n  if not target:\n   self.output.write('no documentation found for %s\\n'%repr(topic))\n   return\n  if type(target)is type(''):\n   return self.showtopic(target,more_xrefs)\n   \n  label,xrefs=target\n  try :\n   doc=pydoc_data.topics.topics[label]\n  except KeyError:\n   self.output.write('no documentation found for %s\\n'%repr(topic))\n   return\n  pager(doc.strip()+'\\n')\n  if more_xrefs:\n   xrefs=(xrefs or'')+' '+more_xrefs\n  if xrefs:\n   import formatter\n   buffer=io.StringIO()\n   formatter.DumbWriter(buffer).send_flowing_data(\n   'Related help topics: '+', '.join(xrefs.split())+'\\n')\n   self.output.write('\\n%s\\n'%buffer.getvalue())\n   \n def _gettopic(self,topic,more_xrefs=''):\n  ''\n\n\n\n\n\n\n  \n  try :\n   import pydoc_data.topics\n  except ImportError:\n   return ('''\nSorry, topic and keyword documentation is not available because the\nmodule \"pydoc_data.topics\" could not be found.\n''','')\n  target=self.topics.get(topic,self.keywords.get(topic))\n  if not target:\n   raise ValueError('could not find topic')\n  if isinstance(target,str):\n   return self._gettopic(target,more_xrefs)\n  label,xrefs=target\n  doc=pydoc_data.topics.topics[label]\n  if more_xrefs:\n   xrefs=(xrefs or'')+' '+more_xrefs\n  return doc,xrefs\n  \n def showsymbol(self,symbol):\n  target=self.symbols[symbol]\n  topic,_,xrefs=target.partition(' ')\n  self.showtopic(topic,xrefs)\n  \n def listmodules(self,key=''):\n  if key:\n   self.output.write('''\nHere is a list of matching modules.  Enter any module name to get more help.\n\n''')\n   apropos(key)\n  else :\n   self.output.write('''\nPlease wait a moment while I gather a list of all available modules...\n\n''')\n   modules={}\n   def callback(path,modname,desc,modules=modules):\n    if modname and modname[-9:]=='.__init__':\n     modname=modname[:-9]+' (package)'\n    if modname.find('.')<0:\n     modules[modname]=1\n   def onerror(modname):\n    callback(None ,modname,None )\n   ModuleScanner().run(callback,onerror=onerror)\n   self.list(modules.keys())\n   self.output.write('''\nEnter any module name to get more help.  Or, type \"modules spam\" to search\nfor modules whose descriptions contain the word \"spam\".\n''')\n   \nhelp=Helper()\n\nclass Scanner:\n ''\n def __init__(self,roots,children,descendp):\n  self.roots=roots[:]\n  self.state=[]\n  self.children=children\n  self.descendp=descendp\n  \n def next(self):\n  if not self.state:\n   if not self.roots:\n    return None\n   root=self.roots.pop(0)\n   self.state=[(root,self.children(root))]\n  node,children=self.state[-1]\n  if not children:\n   self.state.pop()\n   return self.next()\n  child=children.pop(0)\n  if self.descendp(child):\n   self.state.append((child,self.children(child)))\n  return child\n  \n  \nclass ModuleScanner:\n ''\n \n def run(self,callback,key=None ,completer=None ,onerror=None ):\n  if key:key=key.lower()\n  self.quit=False\n  seen={}\n  \n  for modname in sys.builtin_module_names:\n   if modname !='__main__':\n    seen[modname]=1\n    if key is None :\n     callback(None ,modname,'')\n    else :\n     name=__import__(modname).__doc__ or''\n     desc=name.split('\\n')[0]\n     name=modname+' - '+desc\n     if name.lower().find(key)>=0:\n      callback(None ,modname,desc)\n      \n  for importer,modname,ispkg in pkgutil.walk_packages(onerror=onerror):\n   if self.quit:\n    break\n    \n   if key is None :\n    callback(None ,modname,'')\n   else :\n    try :\n     loader=importer.find_module(modname)\n    except SyntaxError:\n    \n     continue\n    if hasattr(loader,'get_source'):\n     try :\n      source=loader.get_source(modname)\n     except Exception:\n      if onerror:\n       onerror(modname)\n      continue\n     desc=source_synopsis(io.StringIO(source))or''\n     if hasattr(loader,'get_filename'):\n      path=loader.get_filename(modname)\n     else :\n      path=None\n    else :\n     try :\n      module=loader.load_module(modname)\n     except ImportError:\n      if onerror:\n       onerror(modname)\n      continue\n     desc=(module.__doc__ or'').splitlines()[0]\n     path=getattr(module,'__file__',None )\n    name=modname+' - '+desc\n    if name.lower().find(key)>=0:\n     callback(path,modname,desc)\n     \n  if completer:\n   completer()\n   \ndef apropos(key):\n ''\n def callback(path,modname,desc):\n  if modname[-9:]=='.__init__':\n   modname=modname[:-9]+' (package)'\n  print(modname,desc and'- '+desc)\n def onerror(modname):\n  pass\n with warnings.catch_warnings():\n  warnings.filterwarnings('ignore')\n  ModuleScanner().run(callback,key,onerror=onerror)\n  \n  \n  \ndef _start_server(urlhandler,port):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n import http.server\n import email.message\n import select\n import threading\n \n class DocHandler(http.server.BaseHTTPRequestHandler):\n \n  def do_GET(self):\n   ''\n\n\n\n   \n   if self.path.endswith('.css'):\n    content_type='text/css'\n   else :\n    content_type='text/html'\n   self.send_response(200)\n   self.send_header('Content-Type','%s; charset=UTF-8'%content_type)\n   self.end_headers()\n   self.wfile.write(self.urlhandler(\n   self.path,content_type).encode('utf-8'))\n   \n  def log_message(self,*args):\n  \n   pass\n   \n class DocServer(http.server.HTTPServer):\n \n  def __init__(self,port,callback):\n   self.host=(sys.platform =='mac')and'127.0.0.1'or'localhost'\n   self.address=('',port)\n   self.callback=callback\n   self.base.__init__(self,self.address,self.handler)\n   self.quit=False\n   \n  def serve_until_quit(self):\n   while not self.quit:\n    rd,wr,ex=select.select([self.socket.fileno()],[],[],1)\n    if rd:\n     self.handle_request()\n   self.server_close()\n   \n  def server_activate(self):\n   self.base.server_activate(self)\n   if self.callback:\n    self.callback(self)\n    \n class ServerThread(threading.Thread):\n \n  def __init__(self,urlhandler,port):\n   self.urlhandler=urlhandler\n   self.port=int(port)\n   threading.Thread.__init__(self)\n   self.serving=False\n   self.error=None\n   \n  def run(self):\n   ''\n   try :\n    DocServer.base=http.server.HTTPServer\n    DocServer.handler=DocHandler\n    DocHandler.MessageClass=email.message.Message\n    DocHandler.urlhandler=staticmethod(self.urlhandler)\n    docsvr=DocServer(self.port,self.ready)\n    self.docserver=docsvr\n    docsvr.serve_until_quit()\n   except Exception as e:\n    self.error=e\n    \n  def ready(self,server):\n   self.serving=True\n   self.host=server.host\n   self.port=server.server_port\n   self.url='http://%s:%d/'%(self.host,self.port)\n   \n  def stop(self):\n   ''\n   self.docserver.quit=True\n   self.serving=False\n   self.url=None\n   \n thread=ServerThread(urlhandler,port)\n thread.start()\n \n \n while not thread.error and not thread.serving:\n  time.sleep(.01)\n return thread\n \n \ndef _url_handler(url,content_type=\"text/html\"):\n ''\n\n\n\n\n\n\n \n class _HTMLDoc(HTMLDoc):\n \n  def page(self,title,contents):\n   ''\n   css_path=\"pydoc_data/_pydoc.css\"\n   css_link=(\n   '<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\">'%\n   css_path)\n   return'''\\\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n<html><head><title>Pydoc: %s</title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n%s</head><body bgcolor=\"#f0f0f8\">%s<div style=\"clear:both;padding-top:.5em;\">%s</div>\n</body></html>'''%(title,css_link,html_navbar(),contents)\n   \n  def filelink(self,url,path):\n   return'<a href=\"getfile?key=%s\">%s</a>'%(url,path)\n   \n   \n html=_HTMLDoc()\n \n def html_navbar():\n  version=html.escape(\"%s [%s, %s]\"%(platform.python_version(),\n  platform.python_build()[0],\n  platform.python_compiler()))\n  return\"\"\"\n            <div style='float:left'>\n                Python %s<br>%s\n            </div>\n            <div style='float:right'>\n                <div style='text-align:center'>\n                  <a href=\"index.html\">Module Index</a>\n                  : <a href=\"topics.html\">Topics</a>\n                  : <a href=\"keywords.html\">Keywords</a>\n                </div>\n                <div>\n                    <form action=\"get\" style='display:inline;'>\n                      <input type=text name=key size=15>\n                      <input type=submit value=\"Get\">\n                    </form>&nbsp;\n                    <form action=\"search\" style='display:inline;'>\n                      <input type=text name=key size=15>\n                      <input type=submit value=\"Search\">\n                    </form>\n                </div>\n            </div>\n            \"\"\"%(version,html.escape(platform.platform(terse=True )))\n  \n def html_index():\n  ''\n  \n  def bltinlink(name):\n   return'<a href=\"%s.html\">%s</a>'%(name,name)\n   \n  heading=html.heading(\n  '<big><big><strong>Index of Modules</strong></big></big>',\n  '#ffffff','#7799ee')\n  names=[name for name in sys.builtin_module_names\n  if name !='__main__']\n  contents=html.multicolumn(names,bltinlink)\n  contents=[heading,'<p>'+html.bigsection(\n  'Built-in Modules','#ffffff','#ee77aa',contents)]\n  \n  seen={}\n  for dir in sys.path:\n   contents.append(html.index(dir,seen))\n   \n  contents.append(\n  '<p align=right><font color=\"#909090\" face=\"helvetica,'\n  'arial\"><strong>pydoc</strong> by Ka-Ping Yee'\n  '&lt;ping@lfw.org&gt;</font>')\n  return'Index of Modules',''.join(contents)\n  \n def html_search(key):\n  ''\n  \n  search_result=[]\n  \n  def callback(path,modname,desc):\n   if modname[-9:]=='.__init__':\n    modname=modname[:-9]+' (package)'\n   search_result.append((modname,desc and'- '+desc))\n   \n  with warnings.catch_warnings():\n   warnings.filterwarnings('ignore')\n   ModuleScanner().run(callback,key)\n   \n   \n  def bltinlink(name):\n   return'<a href=\"%s.html\">%s</a>'%(name,name)\n   \n  results=[]\n  heading=html.heading(\n  '<big><big><strong>Search Results</strong></big></big>',\n  '#ffffff','#7799ee')\n  for name,desc in search_result:\n   results.append(bltinlink(name)+desc)\n  contents=heading+html.bigsection(\n  'key = %s'%key,'#ffffff','#ee77aa','<br>'.join(results))\n  return'Search Results',contents\n  \n def html_getfile(path):\n  ''\n  path=path.replace('%20',' ')\n  with tokenize.open(path)as fp:\n   lines=html.escape(fp.read())\n  body='<pre>%s</pre>'%lines\n  heading=html.heading(\n  '<big><big><strong>File Listing</strong></big></big>',\n  '#ffffff','#7799ee')\n  contents=heading+html.bigsection(\n  'File: %s'%path,'#ffffff','#ee77aa',body)\n  return'getfile %s'%path,contents\n  \n def html_topics():\n  ''\n  \n  def bltinlink(name):\n   return'<a href=\"topic?key=%s\">%s</a>'%(name,name)\n   \n  heading=html.heading(\n  '<big><big><strong>INDEX</strong></big></big>',\n  '#ffffff','#7799ee')\n  names=sorted(Helper.topics.keys())\n  \n  contents=html.multicolumn(names,bltinlink)\n  contents=heading+html.bigsection(\n  'Topics','#ffffff','#ee77aa',contents)\n  return'Topics',contents\n  \n def html_keywords():\n  ''\n  heading=html.heading(\n  '<big><big><strong>INDEX</strong></big></big>',\n  '#ffffff','#7799ee')\n  names=sorted(Helper.keywords.keys())\n  \n  def bltinlink(name):\n   return'<a href=\"topic?key=%s\">%s</a>'%(name,name)\n   \n  contents=html.multicolumn(names,bltinlink)\n  contents=heading+html.bigsection(\n  'Keywords','#ffffff','#ee77aa',contents)\n  return'Keywords',contents\n  \n def html_topicpage(topic):\n  ''\n  buf=io.StringIO()\n  htmlhelp=Helper(buf,buf)\n  contents,xrefs=htmlhelp._gettopic(topic)\n  if topic in htmlhelp.keywords:\n   title='KEYWORD'\n  else :\n   title='TOPIC'\n  heading=html.heading(\n  '<big><big><strong>%s</strong></big></big>'%title,\n  '#ffffff','#7799ee')\n  contents='<pre>%s</pre>'%html.markup(contents)\n  contents=html.bigsection(topic,'#ffffff','#ee77aa',contents)\n  if xrefs:\n   xrefs=sorted(xrefs.split())\n   \n   def bltinlink(name):\n    return'<a href=\"topic?key=%s\">%s</a>'%(name,name)\n    \n   xrefs=html.multicolumn(xrefs,bltinlink)\n   xrefs=html.section('Related help topics: ',\n   '#ffffff','#ee77aa',xrefs)\n  return ('%s %s'%(title,topic),\n  ''.join((heading,contents,xrefs)))\n  \n def html_getobj(url):\n  obj=locate(url,forceload=1)\n  if obj is None and url !='None':\n   raise ValueError('could not find object')\n  title=describe(obj)\n  content=html.document(obj,url)\n  return title,content\n  \n def html_error(url,exc):\n  heading=html.heading(\n  '<big><big><strong>Error</strong></big></big>',\n  '#ffffff','#7799ee')\n  contents='<br>'.join(html.escape(line)for line in\n  format_exception_only(type(exc),exc))\n  contents=heading+html.bigsection(url,'#ffffff','#bb0000',\n  contents)\n  return\"Error - %s\"%url,contents\n  \n def get_html_page(url):\n  ''\n  complete_url=url\n  if url.endswith('.html'):\n   url=url[:-5]\n  try :\n   if url in (\"\",\"index\"):\n    title,content=html_index()\n   elif url ==\"topics\":\n    title,content=html_topics()\n   elif url ==\"keywords\":\n    title,content=html_keywords()\n   elif'='in url:\n    op,_,url=url.partition('=')\n    if op ==\"search?key\":\n     title,content=html_search(url)\n    elif op ==\"getfile?key\":\n     title,content=html_getfile(url)\n    elif op ==\"topic?key\":\n    \n     try :\n      title,content=html_topicpage(url)\n     except ValueError:\n      title,content=html_getobj(url)\n    elif op ==\"get?key\":\n    \n     if url in (\"\",\"index\"):\n      title,content=html_index()\n     else :\n      try :\n       title,content=html_getobj(url)\n      except ValueError:\n       title,content=html_topicpage(url)\n    else :\n     raise ValueError('bad pydoc url')\n   else :\n    title,content=html_getobj(url)\n  except Exception as exc:\n  \n   title,content=html_error(complete_url,exc)\n  return html.page(title,content)\n  \n if url.startswith('/'):\n  url=url[1:]\n if content_type =='text/css':\n  path_here=os.path.dirname(os.path.realpath(__file__))\n  css_path=os.path.join(path_here,url)\n  with open(css_path)as fp:\n   return''.join(fp.readlines())\n elif content_type =='text/html':\n  return get_html_page(url)\n  \n raise TypeError('unknown content type %r for url %s'%(content_type,url))\n \n \ndef browse(port=0,*,open_browser=True ):\n ''\n\n\n\n \n import webbrowser\n serverthread=_start_server(_url_handler,port)\n if serverthread.error:\n  print(serverthread.error)\n  return\n if serverthread.serving:\n  server_help_msg='Server commands: [b]rowser, [q]uit'\n  if open_browser:\n   webbrowser.open(serverthread.url)\n  try :\n   print('Server ready at',serverthread.url)\n   print(server_help_msg)\n   while serverthread.serving:\n    cmd=input('server> ')\n    cmd=cmd.lower()\n    if cmd =='q':\n     break\n    elif cmd =='b':\n     webbrowser.open(serverthread.url)\n    else :\n     print(server_help_msg)\n  except (KeyboardInterrupt,EOFError):\n   print()\n  finally :\n   if serverthread.serving:\n    serverthread.stop()\n    print('Server stopped')\n    \n    \n    \n    \ndef ispath(x):\n return isinstance(x,str)and x.find(os.sep)>=0\n \ndef cli():\n ''\n import getopt\n class BadUsage(Exception):pass\n \n \n \n if''not in sys.path:\n  scriptdir=os.path.dirname(sys.argv[0])\n  if scriptdir in sys.path:\n   sys.path.remove(scriptdir)\n  sys.path.insert(0,'.')\n  \n try :\n  opts,args=getopt.getopt(sys.argv[1:],'bk:p:w')\n  writing=False\n  start_server=False\n  open_browser=False\n  port=None\n  for opt,val in opts:\n   if opt =='-b':\n    start_server=True\n    open_browser=True\n   if opt =='-k':\n    apropos(val)\n    return\n   if opt =='-p':\n    start_server=True\n    port=val\n   if opt =='-w':\n    writing=True\n    \n  if start_server:\n   if port is None :\n    port=0\n   browse(port,open_browser=open_browser)\n   return\n   \n  if not args:raise BadUsage\n  for arg in args:\n   if ispath(arg)and not os.path.exists(arg):\n    print('file %r does not exist'%arg)\n    break\n   try :\n    if ispath(arg)and os.path.isfile(arg):\n     arg=importfile(arg)\n    if writing:\n     if ispath(arg)and os.path.isdir(arg):\n      writedocs(arg)\n     else :\n      writedoc(arg)\n    else :\n     help.help(arg)\n   except ErrorDuringImport as value:\n    print(value)\n    \n except (getopt.error,BadUsage):\n  cmd=os.path.splitext(os.path.basename(sys.argv[0]))[0]\n  print(\"\"\"pydoc - the Python documentation tool\n\n{cmd} <name> ...\n    Show text documentation on something.  <name> may be the name of a\n    Python keyword, topic, function, module, or package, or a dotted\n    reference to a class or function within a module or module in a\n    package.  If <name> contains a '{sep}', it is used as the path to a\n    Python source file to document. If name is 'keywords', 'topics',\n    or 'modules', a listing of these things is displayed.\n\n{cmd} -k <keyword>\n    Search for a keyword in the synopsis lines of all available modules.\n\n{cmd} -p <port>\n    Start an HTTP server on the given port on the local machine.  Port\n    number 0 can be used to get an arbitrary unused port.\n\n{cmd} -b\n    Start an HTTP server on an arbitrary unused port and open a Web browser\n    to interactively browse documentation.  The -p option can be used with\n    the -b option to explicitly specify the server port.\n\n{cmd} -w <name> ...\n    Write out the HTML documentation for a module to a file in the current\n    directory.  If <name> contains a '{sep}', it is treated as a filename; if\n    it names a directory, documentation is written for all the contents.\n\"\"\".format(cmd=cmd,sep=os.sep))\n  \nif __name__ =='__main__':\n cli()\n"], "crypto_js.rollups.sha384": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,c){var d={},j=d.lib={},f=function(){},m=j.Base={extend:function(a){f.prototype=this;var b=new f;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nB=j.WordArray=m.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=c?b:4*a.length},toString:function(a){return(a||y).stringify(this)},concat:function(a){var b=this.words,g=a.words,e=this.sigBytes;a=a.sigBytes;this.clamp();if(e%4)for(var k=0;k<a;k++)b[e+k>>>2]|=(g[k>>>2]>>>24-8*(k%4)&255)<<24-8*((e+k)%4);else if(65535<g.length)for(k=0;k<a;k+=4)b[e+k>>>2]=g[k>>>2];else b.push.apply(b,g);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],g=0;g<n;g+=4)b.push(4294967296*a.random()|0);return new B.init(b,n)}}),v=d.enc={},y=v.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var g=[],e=0;e<a;e++){var k=b[e>>>2]>>>24-8*(e%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join(\"\")},parse:function(a){for(var b=a.length,g=[],e=0;e<b;e+=2)g[e>>>3]|=parseInt(a.substr(e,\n2),16)<<24-4*(e%8);return new B.init(g,b/2)}},F=v.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var g=[],e=0;e<a;e++)g.push(String.fromCharCode(b[e>>>2]>>>24-8*(e%4)&255));return g.join(\"\")},parse:function(a){for(var b=a.length,g=[],e=0;e<b;e++)g[e>>>2]|=(a.charCodeAt(e)&255)<<24-8*(e%4);return new B.init(g,b)}},ha=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(F.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return F.parse(unescape(encodeURIComponent(a)))}},\nZ=j.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new B.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=ha.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,g=b.words,e=b.sigBytes,k=this.blockSize,m=e/(4*k),m=n?a.ceil(m):a.max((m|0)-this._minBufferSize,0);n=m*k;e=a.min(4*n,e);if(n){for(var c=0;c<n;c+=k)this._doProcessBlock(g,c);c=g.splice(0,n);b.sigBytes-=e}return new B.init(c,e)},clone:function(){var a=m.clone.call(this);\na._data=this._data.clone();return a},_minBufferSize:0});j.Hasher=Z.extend({cfg:m.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){Z.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,g){return(new a.init(g)).finalize(b)}},_createHmacHelper:function(a){return function(b,g){return(new ia.HMAC.init(a,\ng)).finalize(b)}}});var ia=d.algo={};return d}(Math);\n(function(a){var c=CryptoJS,d=c.lib,j=d.Base,f=d.WordArray,c=c.x64={};c.Word=j.extend({init:function(a,c){this.high=a;this.low=c}});c.WordArray=j.extend({init:function(c,d){c=this.words=c||[];this.sigBytes=d!=a?d:8*c.length},toX32:function(){for(var a=this.words,c=a.length,d=[],j=0;j<c;j++){var F=a[j];d.push(F.high);d.push(F.low)}return f.create(d,this.sigBytes)},clone:function(){for(var a=j.clone.call(this),c=a.words=this.words.slice(0),d=c.length,f=0;f<d;f++)c[f]=c[f].clone();return a}})})();\n(function(){function a(){return f.create.apply(f,arguments)}for(var c=CryptoJS,d=c.lib.Hasher,j=c.x64,f=j.Word,m=j.WordArray,j=c.algo,B=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),\na(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,\n2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),\na(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,\n3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],v=[],y=0;80>y;y++)v[y]=a();j=j.SHA512=d.extend({_doReset:function(){this._hash=new m.init([new f.init(1779033703,4089235720),new f.init(3144134277,2227873595),new f.init(1013904242,4271175723),new f.init(2773480762,1595750129),new f.init(1359893119,2917565137),new f.init(2600822924,725511199),new f.init(528734635,4215389547),new f.init(1541459225,327033209)])},_doProcessBlock:function(a,c){for(var d=this._hash.words,\nf=d[0],j=d[1],b=d[2],g=d[3],e=d[4],k=d[5],m=d[6],d=d[7],y=f.high,M=f.low,$=j.high,N=j.low,aa=b.high,O=b.low,ba=g.high,P=g.low,ca=e.high,Q=e.low,da=k.high,R=k.low,ea=m.high,S=m.low,fa=d.high,T=d.low,s=y,p=M,G=$,D=N,H=aa,E=O,W=ba,I=P,t=ca,q=Q,U=da,J=R,V=ea,K=S,X=fa,L=T,u=0;80>u;u++){var z=v[u];if(16>u)var r=z.high=a[c+2*u]|0,h=z.low=a[c+2*u+1]|0;else{var r=v[u-15],h=r.high,w=r.low,r=(h>>>1|w<<31)^(h>>>8|w<<24)^h>>>7,w=(w>>>1|h<<31)^(w>>>8|h<<24)^(w>>>7|h<<25),C=v[u-2],h=C.high,l=C.low,C=(h>>>19|l<<\n13)^(h<<3|l>>>29)^h>>>6,l=(l>>>19|h<<13)^(l<<3|h>>>29)^(l>>>6|h<<26),h=v[u-7],Y=h.high,A=v[u-16],x=A.high,A=A.low,h=w+h.low,r=r+Y+(h>>>0<w>>>0?1:0),h=h+l,r=r+C+(h>>>0<l>>>0?1:0),h=h+A,r=r+x+(h>>>0<A>>>0?1:0);z.high=r;z.low=h}var Y=t&U^~t&V,A=q&J^~q&K,z=s&G^s&H^G&H,ja=p&D^p&E^D&E,w=(s>>>28|p<<4)^(s<<30|p>>>2)^(s<<25|p>>>7),C=(p>>>28|s<<4)^(p<<30|s>>>2)^(p<<25|s>>>7),l=B[u],ka=l.high,ga=l.low,l=L+((q>>>14|t<<18)^(q>>>18|t<<14)^(q<<23|t>>>9)),x=X+((t>>>14|q<<18)^(t>>>18|q<<14)^(t<<23|q>>>9))+(l>>>0<\nL>>>0?1:0),l=l+A,x=x+Y+(l>>>0<A>>>0?1:0),l=l+ga,x=x+ka+(l>>>0<ga>>>0?1:0),l=l+h,x=x+r+(l>>>0<h>>>0?1:0),h=C+ja,z=w+z+(h>>>0<C>>>0?1:0),X=V,L=K,V=U,K=J,U=t,J=q,q=I+l|0,t=W+x+(q>>>0<I>>>0?1:0)|0,W=H,I=E,H=G,E=D,G=s,D=p,p=l+h|0,s=x+z+(p>>>0<l>>>0?1:0)|0}M=f.low=M+p;f.high=y+s+(M>>>0<p>>>0?1:0);N=j.low=N+D;j.high=$+G+(N>>>0<D>>>0?1:0);O=b.low=O+E;b.high=aa+H+(O>>>0<E>>>0?1:0);P=g.low=P+I;g.high=ba+W+(P>>>0<I>>>0?1:0);Q=e.low=Q+q;e.high=ca+t+(Q>>>0<q>>>0?1:0);R=k.low=R+J;k.high=da+U+(R>>>0<J>>>0?1:0);\nS=m.low=S+K;m.high=ea+V+(S>>>0<K>>>0?1:0);T=d.low=T+L;d.high=fa+X+(T>>>0<L>>>0?1:0)},_doFinalize:function(){var a=this._data,c=a.words,d=8*this._nDataBytes,f=8*a.sigBytes;c[f>>>5]|=128<<24-f%32;c[(f+128>>>10<<5)+30]=Math.floor(d/4294967296);c[(f+128>>>10<<5)+31]=d;a.sigBytes=4*c.length;this._process();return this._hash.toX32()},clone:function(){var a=d.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});c.SHA512=d._createHelper(j);c.HmacSHA512=d._createHmacHelper(j)})();\n(function(){var a=CryptoJS,c=a.x64,d=c.Word,j=c.WordArray,c=a.algo,f=c.SHA512,c=c.SHA384=f.extend({_doReset:function(){this._hash=new j.init([new d.init(3418070365,3238371032),new d.init(1654270250,914150663),new d.init(2438529370,812702999),new d.init(355462360,4144912697),new d.init(1731405415,4290775857),new d.init(2394180231,1750603025),new d.init(3675008525,1694076839),new d.init(1203062813,3204075428)])},_doFinalize:function(){var a=f._doFinalize.call(this);a.sigBytes-=16;return a}});a.SHA384=\nf._createHelper(c);a.HmacSHA384=f._createHmacHelper(c)})();\n"], "importlib": [".py", "''\n__all__=['__import__','import_module','invalidate_caches']\n\n\n\n\n\n\n\n\n\nimport _imp\nimport sys\n\nfrom .import machinery\n\ntry :\n import _frozen_importlib as _bootstrap\nexcept ImportError:\n from .import _bootstrap\n _bootstrap._setup(sys,_imp)\nelse :\n\n\n _bootstrap.__name__='importlib._bootstrap'\n _bootstrap.__package__='importlib'\n _bootstrap.__file__=__file__.replace('__init__.py','_bootstrap.py')\n sys.modules['importlib._bootstrap']=_bootstrap\n \n \n_w_long=_bootstrap._w_long\n_r_long=_bootstrap._r_long\n\n\n\n\n\n\nfrom ._bootstrap import __import__\n\n\ndef invalidate_caches():\n ''\n \n for finder in sys.meta_path:\n  if hasattr(finder,'invalidate_caches'):\n   finder.invalidate_caches()\n   \n   \ndef find_loader(name,path=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n  loader=sys.modules[name].__loader__\n  if loader is None :\n   raise ValueError('{}.__loader__ is None'.format(name))\n  else :\n   return loader\n except KeyError:\n  pass\n return _bootstrap._find_module(name,path)\n \n \ndef import_module(name,package=None ):\n ''\n\n\n\n\n\n \n level=0\n if name.startswith('.'):\n  if not package:\n   raise TypeError(\"relative imports require the 'package' argument\")\n  for character in name:\n   if character !='.':\n    break\n   level +=1\n return _bootstrap._gcd_import(name[level:],package,level)\n \n \n \nfrom .import basehook\nsys.meta_path.append(basehook.BaseHook())\n", 1], "sre_constants": [".py", "\n\n\n\n\n\n\n\n\n\n\n\"\"\"Internal support module for sre\"\"\"\n\n\n\nMAGIC=20031017\n\n\n\n\n\n\n\nclass error(Exception):\n pass\n \n \n \nFAILURE=\"failure\"\nSUCCESS=\"success\"\n\nANY=\"any\"\nANY_ALL=\"any_all\"\nASSERT=\"assert\"\nASSERT_NOT=\"assert_not\"\nAT=\"at\"\nBIGCHARSET=\"bigcharset\"\nBRANCH=\"branch\"\nCALL=\"call\"\nCATEGORY=\"category\"\nCHARSET=\"charset\"\nGROUPREF=\"groupref\"\nGROUPREF_IGNORE=\"groupref_ignore\"\nGROUPREF_EXISTS=\"groupref_exists\"\nIN=\"in\"\nIN_IGNORE=\"in_ignore\"\nINFO=\"info\"\nJUMP=\"jump\"\nLITERAL=\"literal\"\nLITERAL_IGNORE=\"literal_ignore\"\nMARK=\"mark\"\nMAX_REPEAT=\"max_repeat\"\nMAX_UNTIL=\"max_until\"\nMIN_REPEAT=\"min_repeat\"\nMIN_UNTIL=\"min_until\"\nNEGATE=\"negate\"\nNOT_LITERAL=\"not_literal\"\nNOT_LITERAL_IGNORE=\"not_literal_ignore\"\nRANGE=\"range\"\nREPEAT=\"repeat\"\nREPEAT_ONE=\"repeat_one\"\nSUBPATTERN=\"subpattern\"\nMIN_REPEAT_ONE=\"min_repeat_one\"\n\n\nAT_BEGINNING=\"at_beginning\"\nAT_BEGINNING_LINE=\"at_beginning_line\"\nAT_BEGINNING_STRING=\"at_beginning_string\"\nAT_BOUNDARY=\"at_boundary\"\nAT_NON_BOUNDARY=\"at_non_boundary\"\nAT_END=\"at_end\"\nAT_END_LINE=\"at_end_line\"\nAT_END_STRING=\"at_end_string\"\nAT_LOC_BOUNDARY=\"at_loc_boundary\"\nAT_LOC_NON_BOUNDARY=\"at_loc_non_boundary\"\nAT_UNI_BOUNDARY=\"at_uni_boundary\"\nAT_UNI_NON_BOUNDARY=\"at_uni_non_boundary\"\n\n\nCATEGORY_DIGIT=\"category_digit\"\nCATEGORY_NOT_DIGIT=\"category_not_digit\"\nCATEGORY_SPACE=\"category_space\"\nCATEGORY_NOT_SPACE=\"category_not_space\"\nCATEGORY_WORD=\"category_word\"\nCATEGORY_NOT_WORD=\"category_not_word\"\nCATEGORY_LINEBREAK=\"category_linebreak\"\nCATEGORY_NOT_LINEBREAK=\"category_not_linebreak\"\nCATEGORY_LOC_WORD=\"category_loc_word\"\nCATEGORY_LOC_NOT_WORD=\"category_loc_not_word\"\nCATEGORY_UNI_DIGIT=\"category_uni_digit\"\nCATEGORY_UNI_NOT_DIGIT=\"category_uni_not_digit\"\nCATEGORY_UNI_SPACE=\"category_uni_space\"\nCATEGORY_UNI_NOT_SPACE=\"category_uni_not_space\"\nCATEGORY_UNI_WORD=\"category_uni_word\"\nCATEGORY_UNI_NOT_WORD=\"category_uni_not_word\"\nCATEGORY_UNI_LINEBREAK=\"category_uni_linebreak\"\nCATEGORY_UNI_NOT_LINEBREAK=\"category_uni_not_linebreak\"\n\nOPCODES=[\n\n\nFAILURE,SUCCESS,\n\nANY,ANY_ALL,\nASSERT,ASSERT_NOT,\nAT,\nBRANCH,\nCALL,\nCATEGORY,\nCHARSET,BIGCHARSET,\nGROUPREF,GROUPREF_EXISTS,GROUPREF_IGNORE,\nIN,IN_IGNORE,\nINFO,\nJUMP,\nLITERAL,LITERAL_IGNORE,\nMARK,\nMAX_UNTIL,\nMIN_UNTIL,\nNOT_LITERAL,NOT_LITERAL_IGNORE,\nNEGATE,\nRANGE,\nREPEAT,\nREPEAT_ONE,\nSUBPATTERN,\nMIN_REPEAT_ONE\n\n]\n\nATCODES=[\nAT_BEGINNING,AT_BEGINNING_LINE,AT_BEGINNING_STRING,AT_BOUNDARY,\nAT_NON_BOUNDARY,AT_END,AT_END_LINE,AT_END_STRING,\nAT_LOC_BOUNDARY,AT_LOC_NON_BOUNDARY,AT_UNI_BOUNDARY,\nAT_UNI_NON_BOUNDARY\n]\n\nCHCODES=[\nCATEGORY_DIGIT,CATEGORY_NOT_DIGIT,CATEGORY_SPACE,\nCATEGORY_NOT_SPACE,CATEGORY_WORD,CATEGORY_NOT_WORD,\nCATEGORY_LINEBREAK,CATEGORY_NOT_LINEBREAK,CATEGORY_LOC_WORD,\nCATEGORY_LOC_NOT_WORD,CATEGORY_UNI_DIGIT,CATEGORY_UNI_NOT_DIGIT,\nCATEGORY_UNI_SPACE,CATEGORY_UNI_NOT_SPACE,CATEGORY_UNI_WORD,\nCATEGORY_UNI_NOT_WORD,CATEGORY_UNI_LINEBREAK,\nCATEGORY_UNI_NOT_LINEBREAK\n]\n\ndef makedict(list):\n d={}\n i=0\n for item in list:\n  d[item]=i\n  i=i+1\n return d\n \nOPCODES=makedict(OPCODES)\nATCODES=makedict(ATCODES)\nCHCODES=makedict(CHCODES)\n\n\nOP_IGNORE={\nGROUPREF:GROUPREF_IGNORE,\nIN:IN_IGNORE,\nLITERAL:LITERAL_IGNORE,\nNOT_LITERAL:NOT_LITERAL_IGNORE\n}\n\nAT_MULTILINE={\nAT_BEGINNING:AT_BEGINNING_LINE,\nAT_END:AT_END_LINE\n}\n\nAT_LOCALE={\nAT_BOUNDARY:AT_LOC_BOUNDARY,\nAT_NON_BOUNDARY:AT_LOC_NON_BOUNDARY\n}\n\nAT_UNICODE={\nAT_BOUNDARY:AT_UNI_BOUNDARY,\nAT_NON_BOUNDARY:AT_UNI_NON_BOUNDARY\n}\n\nCH_LOCALE={\nCATEGORY_DIGIT:CATEGORY_DIGIT,\nCATEGORY_NOT_DIGIT:CATEGORY_NOT_DIGIT,\nCATEGORY_SPACE:CATEGORY_SPACE,\nCATEGORY_NOT_SPACE:CATEGORY_NOT_SPACE,\nCATEGORY_WORD:CATEGORY_LOC_WORD,\nCATEGORY_NOT_WORD:CATEGORY_LOC_NOT_WORD,\nCATEGORY_LINEBREAK:CATEGORY_LINEBREAK,\nCATEGORY_NOT_LINEBREAK:CATEGORY_NOT_LINEBREAK\n}\n\nCH_UNICODE={\nCATEGORY_DIGIT:CATEGORY_UNI_DIGIT,\nCATEGORY_NOT_DIGIT:CATEGORY_UNI_NOT_DIGIT,\nCATEGORY_SPACE:CATEGORY_UNI_SPACE,\nCATEGORY_NOT_SPACE:CATEGORY_UNI_NOT_SPACE,\nCATEGORY_WORD:CATEGORY_UNI_WORD,\nCATEGORY_NOT_WORD:CATEGORY_UNI_NOT_WORD,\nCATEGORY_LINEBREAK:CATEGORY_UNI_LINEBREAK,\nCATEGORY_NOT_LINEBREAK:CATEGORY_UNI_NOT_LINEBREAK\n}\n\n\nSRE_FLAG_TEMPLATE=1\nSRE_FLAG_IGNORECASE=2\nSRE_FLAG_LOCALE=4\nSRE_FLAG_MULTILINE=8\nSRE_FLAG_DOTALL=16\nSRE_FLAG_UNICODE=32\nSRE_FLAG_VERBOSE=64\nSRE_FLAG_DEBUG=128\nSRE_FLAG_ASCII=256\n\n\nSRE_INFO_PREFIX=1\nSRE_INFO_LITERAL=2\nSRE_INFO_CHARSET=4\n\nif __name__ ==\"__main__\":\n def dump(f,d,prefix):\n  items=sorted(d.items(),key=lambda a:a[1])\n  for k,v in items:\n   f.write(\"#define %s_%s %s\\n\"%(prefix,k.upper(),v))\n f=open(\"sre_constants.h\",\"w\")\n f.write(\"\"\"\\\n/*\n * Secret Labs' Regular Expression Engine\n *\n * regular expression matching engine\n *\n * NOTE: This file is generated by sre_constants.py.  If you need\n * to change anything in here, edit sre_constants.py and run it.\n *\n * Copyright (c) 1997-2001 by Secret Labs AB.  All rights reserved.\n *\n * See the _sre.c file for information on usage and redistribution.\n */\n\n\"\"\")\n \n f.write(\"#define SRE_MAGIC %d\\n\"%MAGIC)\n \n dump(f,OPCODES,\"SRE_OP\")\n dump(f,ATCODES,\"SRE\")\n dump(f,CHCODES,\"SRE\")\n \n f.write(\"#define SRE_FLAG_TEMPLATE %d\\n\"%SRE_FLAG_TEMPLATE)\n f.write(\"#define SRE_FLAG_IGNORECASE %d\\n\"%SRE_FLAG_IGNORECASE)\n f.write(\"#define SRE_FLAG_LOCALE %d\\n\"%SRE_FLAG_LOCALE)\n f.write(\"#define SRE_FLAG_MULTILINE %d\\n\"%SRE_FLAG_MULTILINE)\n f.write(\"#define SRE_FLAG_DOTALL %d\\n\"%SRE_FLAG_DOTALL)\n f.write(\"#define SRE_FLAG_UNICODE %d\\n\"%SRE_FLAG_UNICODE)\n f.write(\"#define SRE_FLAG_VERBOSE %d\\n\"%SRE_FLAG_VERBOSE)\n \n f.write(\"#define SRE_INFO_PREFIX %d\\n\"%SRE_INFO_PREFIX)\n f.write(\"#define SRE_INFO_LITERAL %d\\n\"%SRE_INFO_LITERAL)\n f.write(\"#define SRE_INFO_CHARSET %d\\n\"%SRE_INFO_CHARSET)\n \n f.close()\n print(\"done\")\n"], "getopt": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"GetoptError\",\"error\",\"getopt\",\"gnu_getopt\"]\n\nimport os\ntry :\n from gettext import gettext as _\nexcept ImportError:\n\n def _(s):return s\n \nclass GetoptError(Exception):\n opt=''\n msg=''\n def __init__(self,msg,opt=''):\n  self.msg=msg\n  self.opt=opt\n  Exception.__init__(self,msg,opt)\n  \n def __str__(self):\n  return self.msg\n  \nerror=GetoptError\n\ndef getopt(args,shortopts,longopts=[]):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n opts=[]\n if type(longopts)==type(\"\"):\n  longopts=[longopts]\n else :\n  longopts=list(longopts)\n while args and args[0].startswith('-')and args[0]!='-':\n  if args[0]=='--':\n   args=args[1:]\n   break\n  if args[0].startswith('--'):\n   opts,args=do_longs(opts,args[0][2:],longopts,args[1:])\n  else :\n   opts,args=do_shorts(opts,args[0][1:],shortopts,args[1:])\n   \n return opts,args\n \ndef gnu_getopt(args,shortopts,longopts=[]):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n opts=[]\n prog_args=[]\n if isinstance(longopts,str):\n  longopts=[longopts]\n else :\n  longopts=list(longopts)\n  \n  \n if shortopts.startswith('+'):\n  shortopts=shortopts[1:]\n  all_options_first=True\n elif os.environ.get(\"POSIXLY_CORRECT\"):\n  all_options_first=True\n else :\n  all_options_first=False\n  \n while args:\n  if args[0]=='--':\n   prog_args +=args[1:]\n   break\n   \n  if args[0][:2]=='--':\n   opts,args=do_longs(opts,args[0][2:],longopts,args[1:])\n  elif args[0][:1]=='-'and args[0]!='-':\n   opts,args=do_shorts(opts,args[0][1:],shortopts,args[1:])\n  else :\n   if all_options_first:\n    prog_args +=args\n    break\n   else :\n    prog_args.append(args[0])\n    args=args[1:]\n    \n return opts,prog_args\n \ndef do_longs(opts,opt,longopts,args):\n try :\n  i=opt.index('=')\n except ValueError:\n  optarg=None\n else :\n  opt,optarg=opt[:i],opt[i+1:]\n  \n has_arg,opt=long_has_args(opt,longopts)\n if has_arg:\n  if optarg is None :\n   if not args:\n    raise GetoptError(_('option --%s requires argument')%opt,opt)\n   optarg,args=args[0],args[1:]\n elif optarg is not None :\n  raise GetoptError(_('option --%s must not have an argument')%opt,opt)\n opts.append(('--'+opt,optarg or''))\n return opts,args\n \n \n \n \ndef long_has_args(opt,longopts):\n possibilities=[o for o in longopts if o.startswith(opt)]\n if not possibilities:\n  raise GetoptError(_('option --%s not recognized')%opt,opt)\n  \n if opt in possibilities:\n  return False ,opt\n elif opt+'='in possibilities:\n  return True ,opt\n  \n if len(possibilities)>1:\n \n \n  raise GetoptError(_('option --%s not a unique prefix')%opt,opt)\n assert len(possibilities)==1\n unique_match=possibilities[0]\n has_arg=unique_match.endswith('=')\n if has_arg:\n  unique_match=unique_match[:-1]\n return has_arg,unique_match\n \ndef do_shorts(opts,optstring,shortopts,args):\n while optstring !='':\n  opt,optstring=optstring[0],optstring[1:]\n  if short_has_arg(opt,shortopts):\n   if optstring =='':\n    if not args:\n     raise GetoptError(_('option -%s requires argument')%opt,\n     opt)\n    optstring,args=args[0],args[1:]\n   optarg,optstring=optstring,''\n  else :\n   optarg=''\n  opts.append(('-'+opt,optarg))\n return opts,args\n \ndef short_has_arg(opt,shortopts):\n for i in range(len(shortopts)):\n  if opt ==shortopts[i]!=':':\n   return shortopts.startswith(':',i+1)\n raise GetoptError(_('option -%s not recognized')%opt,opt)\n \nif __name__ =='__main__':\n import sys\n print(getopt(sys.argv[1:],\"a:b\",[\"alpha=\",\"beta\"]))\n"], "_weakrefset": [".py", "\n\n\n\nfrom _weakref import ref\n\n__all__=['WeakSet']\n\n\nclass _IterationGuard:\n\n\n\n\n\n def __init__(self,weakcontainer):\n \n  self.weakcontainer=ref(weakcontainer)\n  \n def __enter__(self):\n  w=self.weakcontainer()\n  if w is not None :\n   w._iterating.add(self)\n  return self\n  \n def __exit__(self,e,t,b):\n  w=self.weakcontainer()\n  if w is not None :\n   s=w._iterating\n   s.remove(self)\n   if not s:\n    w._commit_removals()\n    \n    \nclass WeakSet:\n def __init__(self,data=None ):\n  self.data=set()\n  def _remove(item,selfref=ref(self)):\n   self=selfref()\n   if self is not None :\n    if self._iterating:\n     self._pending_removals.append(item)\n    else :\n     self.data.discard(item)\n  self._remove=_remove\n  \n  self._pending_removals=[]\n  self._iterating=set()\n  if data is not None :\n   self.update(data)\n   \n def _commit_removals(self):\n  l=self._pending_removals\n  discard=self.data.discard\n  while l:\n   discard(l.pop())\n   \n def __iter__(self):\n  with _IterationGuard(self):\n   for itemref in self.data:\n    item=itemref()\n    if item is not None :\n     yield item\n     \n def __len__(self):\n  return len(self.data)-len(self._pending_removals)\n  \n def __contains__(self,item):\n  try :\n   wr=ref(item)\n  except TypeError:\n   return False\n  return wr in self.data\n  \n def __reduce__(self):\n  return (self.__class__,(list(self),),\n  getattr(self,'__dict__',None ))\n  \n def add(self,item):\n  if self._pending_removals:\n   self._commit_removals()\n  self.data.add(ref(item,self._remove))\n  \n def clear(self):\n  if self._pending_removals:\n   self._commit_removals()\n  self.data.clear()\n  \n def copy(self):\n  return self.__class__(self)\n  \n def pop(self):\n  if self._pending_removals:\n   self._commit_removals()\n  while True :\n   try :\n    itemref=self.data.pop()\n   except KeyError:\n    raise KeyError('pop from empty WeakSet')\n   item=itemref()\n   if item is not None :\n    return item\n    \n def remove(self,item):\n  if self._pending_removals:\n   self._commit_removals()\n  self.data.remove(ref(item))\n  \n def discard(self,item):\n  if self._pending_removals:\n   self._commit_removals()\n  self.data.discard(ref(item))\n  \n def update(self,other):\n  if self._pending_removals:\n   self._commit_removals()\n  for element in other:\n   self.add(element)\n   \n def __ior__(self,other):\n  self.update(other)\n  return self\n  \n def difference(self,other):\n  newset=self.copy()\n  newset.difference_update(other)\n  return newset\n __sub__=difference\n \n def difference_update(self,other):\n  self.__isub__(other)\n def __isub__(self,other):\n  if self._pending_removals:\n   self._commit_removals()\n  if self is other:\n   self.data.clear()\n  else :\n   self.data.difference_update(ref(item)for item in other)\n  return self\n  \n def intersection(self,other):\n  return self.__class__(item for item in other if item in self)\n __and__=intersection\n \n def intersection_update(self,other):\n  self.__iand__(other)\n def __iand__(self,other):\n  if self._pending_removals:\n   self._commit_removals()\n  self.data.intersection_update(ref(item)for item in other)\n  return self\n  \n def issubset(self,other):\n  return self.data.issubset(ref(item)for item in other)\n __le__=issubset\n \n def __lt__(self,other):\n  return self.data <set(ref(item)for item in other)\n  \n def issuperset(self,other):\n  return self.data.issuperset(ref(item)for item in other)\n __ge__=issuperset\n \n def __gt__(self,other):\n  return self.data >set(ref(item)for item in other)\n  \n def __eq__(self,other):\n  if not isinstance(other,self.__class__):\n   return NotImplemented\n  return self.data ==set(ref(item)for item in other)\n  \n def symmetric_difference(self,other):\n  newset=self.copy()\n  newset.symmetric_difference_update(other)\n  return newset\n __xor__=symmetric_difference\n \n def symmetric_difference_update(self,other):\n  self.__ixor__(other)\n def __ixor__(self,other):\n  if self._pending_removals:\n   self._commit_removals()\n  if self is other:\n   self.data.clear()\n  else :\n   self.data.symmetric_difference_update(ref(item,self._remove)for item in other)\n  return self\n  \n def union(self,other):\n  return self.__class__(e for s in (self,other)for e in s)\n __or__=union\n \n def isdisjoint(self,other):\n  return len(self.intersection(other))==0\n"], "hashlib": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins\n\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +'=_b_[\"'+$b+'\"]')\neval($s.join(';'))\n\nvar $mod = {\n\n    __getattr__ : function(attr){\n        if (attr == 'new') return $hashlib_new;\n        return this[attr]\n    },\n    md5: function(obj) {return $hashlib_new('md5', obj)},\n    sha1: function(obj) {return $hashlib_new('sha1', obj)},\n    sha224: function(obj) {return $hashlib_new('sha224', obj)},\n    sha256: function(obj) {return $hashlib_new('sha256', obj)},\n    sha384: function(obj) {return $hashlib_new('sha384', obj)},\n    sha512: function(obj) {return $hashlib_new('sha512', obj)},\n\n    algorithms_guaranteed: ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'],\n    algorithms_available:  ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']\n}\n\n\n//todo: eventually move this function to a \"utility\" file or use ajax module?\nfunction $get_CryptoJS_lib(alg) {\n   var imp=$importer()\n   var $xmlhttp=imp[0], fake_qs=imp[1], timer=imp[2], res=null\n\n   $xmlhttp.onreadystatechange = function(){\n        if($xmlhttp.readyState==4){\n            window.clearTimeout(timer)\n            if($xmlhttp.status==200 || $xmlhttp.status==0){res=$xmlhttp.responseText}\n            else{\n                // don't throw an exception here, it will not be caught (issue #30)\n                res = Error()\n                res.name = 'NotFoundError'\n                res.message = \"No CryptoJS lib named '\"+alg+\"'\"\n            }\n        }\n   }\n\n   $xmlhttp.open('GET', $B.brython_path+'libs/crypto_js/rollups/'+alg+'.js'+fake_qs,false)\n   if('overrideMimeType' in $xmlhttp){$xmlhttp.overrideMimeType(\"text/plain\")}\n   $xmlhttp.send()\n   if(res.constructor===Error){throw res} // module not found\n\n   try{\n      eval(res + \"; $B.CryptoJS=CryptoJS;\")\n   } catch (err) { \n      throw Error(\"JS Eval Error\", \"Cannot eval CryptoJS algorithm '\" + alg + \"' : error:\" + err);\n   }\n}\n\nfunction bytes2WordArray(obj){\n    // Transform a bytes object into an instance of class WordArray\n    // defined in CryptoJS\n    if(!_b_.isinstance(obj, _b_.bytes)){\n        throw _b_.TypeError(\"expected bytes, got \"+\n            $B.get_class(obj).__name__)\n    }\n\n    var words = []\n    for(var i=0;i<obj.source.length;i+=4){\n        var word = obj.source.slice(i, i+4)\n        while(word.length<4){word.push(0)}\n        var w = word[3] +(word[2]<<8)+(word[1]<<16)+(word[0]<<24)\n        words.push(w)\n    }\n    return {words: words, sigBytes:obj.source.length}\n}\n\nfunction $hashlib_new(alg, obj) {\n\n    switch(alg) {\n      case 'md5':\n      case 'sha1':\n      case 'sha224':\n      case 'sha256':\n      case 'sha384':\n      case 'sha512':\n        var ALG=alg.toUpperCase()\n        if ($B.Crypto === undefined || \n            $B.CryptoJS.algo[ALG] === undefined) $get_CryptoJS_lib(alg)\n\n        this.hash = $B.CryptoJS.algo[ALG].create()\n        if(obj!==undefined){\n            this.hash.update(bytes2WordArray(obj))\n        }\n        break\n      default:\n        $raise('AttributeError', 'Invalid hash algorithm:' + alg)\n    }\n \n    this.__class__ = $B.$type\n\n    this.__str__ = function(){return this.hexdigest()}\n\n    this.update = function(msg){\n        this.hash.update(bytes2WordArray(msg))\n    }\n    this.copy = function(){\n        return this.hash.clone()\n    }\n    \n    this.digest = function(){\n        var obj = this.hash.clone().finalize().toString(),\n            res = []\n        for(var i=0;i<obj.length;i+=2){\n            res.push(parseInt(obj.substr(i,2), 16))\n        }\n        return _b_.bytes(res)\n    }\n\n    this.hexdigest = function() {\n        return this.hash.clone().finalize().toString()\n    }\n\n    return this\n}\n\nreturn $mod\n\n})(__BRYTHON__)\n"], "antigravity": [".py", "\nimport webbrowser\nimport hashlib\n\nwebbrowser.open(\"http://xkcd.com/353/\")\n\ndef geohash(latitude,longitude,datedow):\n ''\n\n\n\n\n \n \n h=hashlib.md5(datedow).hexdigest()\n p,q=[('%f'%float.fromhex('0.'+x))for x in (h[:16],h[16:32])]\n print('%d%s %d%s'%(latitude,p[1:],longitude,q[1:]))\n"], "logging": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\"\"\"\nLogging package for Python. Based on PEP 282 and comments thereto in\ncomp.lang.python.\n\nCopyright (C) 2001-2013 Vinay Sajip. All Rights Reserved.\n\nTo use, simply 'import logging' and log away!\n\"\"\"\n\nimport sys,os,time,io,traceback,warnings,weakref\nfrom string import Template\n\n__all__=['BASIC_FORMAT','BufferingFormatter','CRITICAL','DEBUG','ERROR',\n'FATAL','FileHandler','Filter','Formatter','Handler','INFO',\n'LogRecord','Logger','LoggerAdapter','NOTSET','NullHandler',\n'StreamHandler','WARN','WARNING','addLevelName','basicConfig',\n'captureWarnings','critical','debug','disable','error',\n'exception','fatal','getLevelName','getLogger','getLoggerClass',\n'info','log','makeLogRecord','setLoggerClass','warn','warning',\n'getLogRecordFactory','setLogRecordFactory','lastResort']\n\ntry :\n import threading\nexcept ImportError:\n threading=None\n \n__author__=\"Vinay Sajip <vinay_sajip@red-dove.com>\"\n__status__=\"production\"\n__version__=\"0.5.1.2\"\n__date__=\"07 February 2010\"\n\n\n\n\n\n\n\n\n\nif hasattr(sys,'frozen'):\n _srcfile=\"logging%s__init__%s\"%(os.sep,__file__[-4:])\nelse :\n _srcfile=__file__\n_srcfile=os.path.normcase(_srcfile)\n\n\nif hasattr(sys,'_getframe'):\n currentframe=lambda :sys._getframe(3)\nelse :\n def currentframe():\n  ''\n  try :\n   raise Exception\n  except :\n   return sys.exc_info()[2].tb_frame.f_back\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n_startTime=time.time()\n\n\n\n\n\nraiseExceptions=True\n\n\n\n\nlogThreads=True\n\n\n\n\nlogMultiprocessing=True\n\n\n\n\nlogProcesses=True\n\n\n\n\n\n\n\n\n\n\n\n\nCRITICAL=50\nFATAL=CRITICAL\nERROR=40\nWARNING=30\nWARN=WARNING\nINFO=20\nDEBUG=10\nNOTSET=0\n\n_levelNames={\nCRITICAL:'CRITICAL',\nERROR:'ERROR',\nWARNING:'WARNING',\nINFO:'INFO',\nDEBUG:'DEBUG',\nNOTSET:'NOTSET',\n'CRITICAL':CRITICAL,\n'ERROR':ERROR,\n'WARN':WARNING,\n'WARNING':WARNING,\n'INFO':INFO,\n'DEBUG':DEBUG,\n'NOTSET':NOTSET,\n}\n\ndef getLevelName(level):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n return _levelNames.get(level,(\"Level %s\"%level))\n \ndef addLevelName(level,levelName):\n ''\n\n\n\n \n _acquireLock()\n try :\n  _levelNames[level]=levelName\n  _levelNames[levelName]=level\n finally :\n  _releaseLock()\n  \ndef _checkLevel(level):\n if isinstance(level,int):\n  rv=level\n elif str(level)==level:\n  if level not in _levelNames:\n   raise ValueError(\"Unknown level: %r\"%level)\n  rv=_levelNames[level]\n else :\n  raise TypeError(\"Level not an integer or a valid string: %r\"%level)\n return rv\n \n \n \n \n \n \n \n \n \n \n \n \n \nif threading:\n _lock=threading.RLock()\nelse :\n _lock=None\n \n \ndef _acquireLock():\n ''\n\n\n\n \n if _lock:\n  _lock.acquire()\n  \ndef _releaseLock():\n ''\n\n \n if _lock:\n  _lock.release()\n  \n  \n  \n  \n  \nclass LogRecord(object):\n ''\n\n\n\n\n\n\n\n\n\n \n def __init__(self,name,level,pathname,lineno,\n msg,args,exc_info,func=None ,sinfo=None ,**kwargs):\n  ''\n\n  \n  ct=time.time()\n  self.name=name\n  self.msg=msg\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  if args and len(args)==1 and isinstance(args[0],dict)and args[0]:\n   args=args[0]\n  self.args=args\n  self.levelname=getLevelName(level)\n  self.levelno=level\n  self.pathname=pathname\n  try :\n   self.filename=os.path.basename(pathname)\n   self.module=os.path.splitext(self.filename)[0]\n  except (TypeError,ValueError,AttributeError):\n   self.filename=pathname\n   self.module=\"Unknown module\"\n  self.exc_info=exc_info\n  self.exc_text=None\n  self.stack_info=sinfo\n  self.lineno=lineno\n  self.funcName=func\n  self.created=ct\n  self.msecs=(ct -int(ct))*1000\n  self.relativeCreated=(self.created -_startTime)*1000\n  if logThreads and threading:\n   self.thread=threading.get_ident()\n   self.threadName=threading.current_thread().name\n  else :\n   self.thread=None\n   self.threadName=None\n  if not logMultiprocessing:\n   self.processName=None\n  else :\n   self.processName='MainProcess'\n   mp=sys.modules.get('multiprocessing')\n   if mp is not None :\n   \n   \n   \n   \n    try :\n     self.processName=mp.current_process().name\n    except Exception:\n     pass\n  if logProcesses and hasattr(os,'getpid'):\n   self.process=os.getpid()\n  else :\n   self.process=None\n   \n def __str__(self):\n  return'<LogRecord: %s, %s, %s, %s, \"%s\">'%(self.name,self.levelno,\n  self.pathname,self.lineno,self.msg)\n  \n def getMessage(self):\n  ''\n\n\n\n\n  \n  msg=str(self.msg)\n  if self.args:\n   msg=msg %self.args\n  return msg\n  \n  \n  \n  \n_logRecordFactory=LogRecord\n\ndef setLogRecordFactory(factory):\n ''\n\n\n\n\n \n global _logRecordFactory\n _logRecordFactory=factory\n \ndef getLogRecordFactory():\n ''\n\n \n \n return _logRecordFactory\n \ndef makeLogRecord(dict):\n ''\n\n\n\n\n \n rv=_logRecordFactory(None ,None ,\"\",0,\"\",(),None ,None )\n rv.__dict__.update(dict)\n return rv\n \n \n \n \n \nclass PercentStyle(object):\n\n default_format='%(message)s'\n asctime_format='%(asctime)s'\n asctime_search='%(asctime)'\n \n def __init__(self,fmt):\n  self._fmt=fmt or self.default_format\n  \n def usesTime(self):\n  return self._fmt.find(self.asctime_search)>=0\n  \n def format(self,record):\n  return self._fmt %record.__dict__\n  \nclass StrFormatStyle(PercentStyle):\n default_format='{message}'\n asctime_format='{asctime}'\n asctime_search='{asctime'\n \n def format(self,record):\n  return self._fmt.format(**record.__dict__)\n  \n  \nclass StringTemplateStyle(PercentStyle):\n default_format='${message}'\n asctime_format='${asctime}'\n asctime_search='${asctime}'\n \n def __init__(self,fmt):\n  self._fmt=fmt or self.default_format\n  self._tpl=Template(self._fmt)\n  \n def usesTime(self):\n  fmt=self._fmt\n  return fmt.find('$asctime')>=0 or fmt.find(self.asctime_format)>=0\n  \n def format(self,record):\n  return self._tpl.substitute(**record.__dict__)\n  \n_STYLES={\n'%':PercentStyle,\n'{':StrFormatStyle,\n'$':StringTemplateStyle\n}\n\nclass Formatter(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n converter=time.localtime\n \n def __init__(self,fmt=None ,datefmt=None ,style='%'):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if style not in _STYLES:\n   raise ValueError('Style must be one of: %s'%','.join(\n   _STYLES.keys()))\n  self._style=_STYLES[style](fmt)\n  self._fmt=self._style._fmt\n  self.datefmt=datefmt\n  \n default_time_format='%Y-%m-%d %H:%M:%S'\n default_msec_format='%s,%03d'\n \n def formatTime(self,record,datefmt=None ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  ct=self.converter(record.created)\n  if datefmt:\n   s=time.strftime(datefmt,ct)\n  else :\n   t=time.strftime(self.default_time_format,ct)\n   s=self.default_msec_format %(t,record.msecs)\n  return s\n  \n def formatException(self,ei):\n  ''\n\n\n\n\n  \n  sio=io.StringIO()\n  tb=ei[2]\n  \n  \n  \n  traceback.print_exception(ei[0],ei[1],tb,None ,sio)\n  s=sio.getvalue()\n  sio.close()\n  if s[-1:]==\"\\n\":\n   s=s[:-1]\n  return s\n  \n def usesTime(self):\n  ''\n\n  \n  return self._style.usesTime()\n  \n def formatMessage(self,record):\n  return self._style.format(record)\n  \n def formatStack(self,stack_info):\n  ''\n\n\n\n\n\n\n\n\n  \n  return stack_info\n  \n def format(self,record):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  record.message=record.getMessage()\n  if self.usesTime():\n   record.asctime=self.formatTime(record,self.datefmt)\n  s=self.formatMessage(record)\n  if record.exc_info:\n  \n  \n   if not record.exc_text:\n    record.exc_text=self.formatException(record.exc_info)\n  if record.exc_text:\n   if s[-1:]!=\"\\n\":\n    s=s+\"\\n\"\n   s=s+record.exc_text\n  if record.stack_info:\n   if s[-1:]!=\"\\n\":\n    s=s+\"\\n\"\n   s=s+self.formatStack(record.stack_info)\n  return s\n  \n  \n  \n  \n_defaultFormatter=Formatter()\n\nclass BufferingFormatter(object):\n ''\n\n \n def __init__(self,linefmt=None ):\n  ''\n\n\n  \n  if linefmt:\n   self.linefmt=linefmt\n  else :\n   self.linefmt=_defaultFormatter\n   \n def formatHeader(self,records):\n  ''\n\n  \n  return\"\"\n  \n def formatFooter(self,records):\n  ''\n\n  \n  return\"\"\n  \n def format(self,records):\n  ''\n\n  \n  rv=\"\"\n  if len(records)>0:\n   rv=rv+self.formatHeader(records)\n   for record in records:\n    rv=rv+self.linefmt.format(record)\n   rv=rv+self.formatFooter(records)\n  return rv\n  \n  \n  \n  \n  \nclass Filter(object):\n ''\n\n\n\n\n\n\n\n\n \n def __init__(self,name=''):\n  ''\n\n\n\n\n\n  \n  self.name=name\n  self.nlen=len(name)\n  \n def filter(self,record):\n  ''\n\n\n\n\n  \n  if self.nlen ==0:\n   return True\n  elif self.name ==record.name:\n   return True\n  elif record.name.find(self.name,0,self.nlen)!=0:\n   return False\n  return (record.name[self.nlen]==\".\")\n  \nclass Filterer(object):\n ''\n\n\n \n def __init__(self):\n  ''\n\n  \n  self.filters=[]\n  \n def addFilter(self,filter):\n  ''\n\n  \n  if not (filter in self.filters):\n   self.filters.append(filter)\n   \n def removeFilter(self,filter):\n  ''\n\n  \n  if filter in self.filters:\n   self.filters.remove(filter)\n   \n def filter(self,record):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  rv=True\n  for f in self.filters:\n   if hasattr(f,'filter'):\n    result=f.filter(record)\n   else :\n    result=f(record)\n   if not result:\n    rv=False\n    break\n  return rv\n  \n  \n  \n  \n  \n_handlers=weakref.WeakValueDictionary()\n_handlerList=[]\n\ndef _removeHandlerRef(wr):\n ''\n\n \n \n \n \n if (_acquireLock is not None and _handlerList is not None and\n _releaseLock is not None ):\n  _acquireLock()\n  try :\n   if wr in _handlerList:\n    _handlerList.remove(wr)\n  finally :\n   _releaseLock()\n   \ndef _addHandlerRef(handler):\n ''\n\n \n _acquireLock()\n try :\n  _handlerList.append(weakref.ref(handler,_removeHandlerRef))\n finally :\n  _releaseLock()\n  \nclass Handler(Filterer):\n ''\n\n\n\n\n\n\n \n def __init__(self,level=NOTSET):\n  ''\n\n\n  \n  Filterer.__init__(self)\n  self._name=None\n  self.level=_checkLevel(level)\n  self.formatter=None\n  \n  _addHandlerRef(self)\n  self.createLock()\n  \n def get_name(self):\n  return self._name\n  \n def set_name(self,name):\n  _acquireLock()\n  try :\n   if self._name in _handlers:\n    del _handlers[self._name]\n   self._name=name\n   if name:\n    _handlers[name]=self\n  finally :\n   _releaseLock()\n   \n name=property(get_name,set_name)\n \n def createLock(self):\n  ''\n\n  \n  if threading:\n   self.lock=threading.RLock()\n  else :\n   self.lock=None\n   \n def acquire(self):\n  ''\n\n  \n  if self.lock:\n   self.lock.acquire()\n   \n def release(self):\n  ''\n\n  \n  if self.lock:\n   self.lock.release()\n   \n def setLevel(self,level):\n  ''\n\n  \n  self.level=_checkLevel(level)\n  \n def format(self,record):\n  ''\n\n\n\n\n  \n  if self.formatter:\n   fmt=self.formatter\n  else :\n   fmt=_defaultFormatter\n  return fmt.format(record)\n  \n def emit(self,record):\n  ''\n\n\n\n\n  \n  raise NotImplementedError('emit must be implemented '\n  'by Handler subclasses')\n  \n def handle(self,record):\n  ''\n\n\n\n\n\n\n  \n  rv=self.filter(record)\n  if rv:\n   self.acquire()\n   try :\n    self.emit(record)\n   finally :\n    self.release()\n  return rv\n  \n def setFormatter(self,fmt):\n  ''\n\n  \n  self.formatter=fmt\n  \n def flush(self):\n  ''\n\n\n\n\n  \n  pass\n  \n def close(self):\n  ''\n\n\n\n\n\n\n  \n  \n  _acquireLock()\n  try :\n   if self._name and self._name in _handlers:\n    del _handlers[self._name]\n  finally :\n   _releaseLock()\n   \n def handleError(self,record):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  if raiseExceptions and sys.stderr:\n   ei=sys.exc_info()\n   try :\n    traceback.print_exception(ei[0],ei[1],ei[2],\n    None ,sys.stderr)\n    sys.stderr.write('Logged from file %s, line %s\\n'%(\n    record.filename,record.lineno))\n   except IOError:\n    pass\n   finally :\n    del ei\n    \nclass StreamHandler(Handler):\n ''\n\n\n\n \n \n terminator='\\n'\n \n def __init__(self,stream=None ):\n  ''\n\n\n\n  \n  Handler.__init__(self)\n  if stream is None :\n   stream=sys.stderr\n  self.stream=stream\n  \n def flush(self):\n  ''\n\n  \n  self.acquire()\n  try :\n   if self.stream and hasattr(self.stream,\"flush\"):\n    self.stream.flush()\n  finally :\n   self.release()\n   \n def emit(self,record):\n  ''\n\n\n\n\n\n\n\n\n  \n  try :\n   msg=self.format(record)\n   stream=self.stream\n   stream.write(msg)\n   stream.write(self.terminator)\n   self.flush()\n  except (KeyboardInterrupt,SystemExit):\n   raise\n  except :\n   self.handleError(record)\n   \nclass FileHandler(StreamHandler):\n ''\n\n \n def __init__(self,filename,mode='a',encoding=None ,delay=False ):\n  ''\n\n  \n  \n  \n  self.baseFilename=os.path.abspath(filename)\n  self.mode=mode\n  self.encoding=encoding\n  self.delay=delay\n  if delay:\n  \n  \n   Handler.__init__(self)\n   self.stream=None\n  else :\n   StreamHandler.__init__(self,self._open())\n   \n def close(self):\n  ''\n\n  \n  self.acquire()\n  try :\n   if self.stream:\n    self.flush()\n    if hasattr(self.stream,\"close\"):\n     self.stream.close()\n    StreamHandler.close(self)\n    self.stream=None\n  finally :\n   self.release()\n   \n def _open(self):\n  ''\n\n\n  \n  return open(self.baseFilename,self.mode,encoding=self.encoding)\n  \n def emit(self,record):\n  ''\n\n\n\n\n  \n  if self.stream is None :\n   self.stream=self._open()\n  StreamHandler.emit(self,record)\n  \nclass _StderrHandler(StreamHandler):\n ''\n\n\n\n \n def __init__(self,level=NOTSET):\n  ''\n\n  \n  Handler.__init__(self,level)\n  \n @property\n def stream(self):\n  return sys.stderr\n  \n  \n_defaultLastResort=_StderrHandler(WARNING)\nlastResort=_defaultLastResort\n\n\n\n\n\nclass PlaceHolder(object):\n ''\n\n\n\n \n def __init__(self,alogger):\n  ''\n\n  \n  self.loggerMap={alogger:None }\n  \n def append(self,alogger):\n  ''\n\n  \n  if alogger not in self.loggerMap:\n   self.loggerMap[alogger]=None\n   \n   \n   \n   \n_loggerClass=None\n\ndef setLoggerClass(klass):\n ''\n\n\n\n \n if klass !=Logger:\n  if not issubclass(klass,Logger):\n   raise TypeError(\"logger not derived from logging.Logger: \"\n   +klass.__name__)\n global _loggerClass\n _loggerClass=klass\n \ndef getLoggerClass():\n ''\n\n \n \n return _loggerClass\n \nclass Manager(object):\n ''\n\n\n \n def __init__(self,rootnode):\n  ''\n\n  \n  self.root=rootnode\n  self.disable=0\n  self.emittedNoHandlerWarning=False\n  self.loggerDict={}\n  self.loggerClass=None\n  self.logRecordFactory=None\n  \n def getLogger(self,name):\n  ''\n\n\n\n\n\n\n\n\n  \n  rv=None\n  if not isinstance(name,str):\n   raise TypeError('A logger name must be a string')\n  _acquireLock()\n  try :\n   if name in self.loggerDict:\n    rv=self.loggerDict[name]\n    if isinstance(rv,PlaceHolder):\n     ph=rv\n     rv=(self.loggerClass or _loggerClass)(name)\n     rv.manager=self\n     self.loggerDict[name]=rv\n     self._fixupChildren(ph,rv)\n     self._fixupParents(rv)\n   else :\n    rv=(self.loggerClass or _loggerClass)(name)\n    rv.manager=self\n    self.loggerDict[name]=rv\n    self._fixupParents(rv)\n  finally :\n   _releaseLock()\n  return rv\n  \n def setLoggerClass(self,klass):\n  ''\n\n  \n  if klass !=Logger:\n   if not issubclass(klass,Logger):\n    raise TypeError(\"logger not derived from logging.Logger: \"\n    +klass.__name__)\n  self.loggerClass=klass\n  \n def setLogRecordFactory(self,factory):\n  ''\n\n\n  \n  self.logRecordFactory=factory\n  \n def _fixupParents(self,alogger):\n  ''\n\n\n  \n  name=alogger.name\n  i=name.rfind(\".\")\n  rv=None\n  while (i >0)and not rv:\n   substr=name[:i]\n   if substr not in self.loggerDict:\n    self.loggerDict[substr]=PlaceHolder(alogger)\n   else :\n    obj=self.loggerDict[substr]\n    if isinstance(obj,Logger):\n     rv=obj\n    else :\n     assert isinstance(obj,PlaceHolder)\n     obj.append(alogger)\n   i=name.rfind(\".\",0,i -1)\n  if not rv:\n   rv=self.root\n  alogger.parent=rv\n  \n def _fixupChildren(self,ph,alogger):\n  ''\n\n\n  \n  name=alogger.name\n  namelen=len(name)\n  for c in ph.loggerMap.keys():\n  \n   if c.parent.name[:namelen]!=name:\n    alogger.parent=c.parent\n    c.parent=alogger\n    \n    \n    \n    \n    \nclass Logger(Filterer):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,name,level=NOTSET):\n  ''\n\n  \n  Filterer.__init__(self)\n  self.name=name\n  self.level=_checkLevel(level)\n  self.parent=None\n  self.propagate=True\n  self.handlers=[]\n  self.disabled=False\n  \n def setLevel(self,level):\n  ''\n\n  \n  self.level=_checkLevel(level)\n  \n def debug(self,msg,*args,**kwargs):\n  ''\n\n\n\n\n\n\n  \n  if self.isEnabledFor(DEBUG):\n   self._log(DEBUG,msg,args,**kwargs)\n   \n def info(self,msg,*args,**kwargs):\n  ''\n\n\n\n\n\n\n  \n  if self.isEnabledFor(INFO):\n   self._log(INFO,msg,args,**kwargs)\n   \n def warning(self,msg,*args,**kwargs):\n  ''\n\n\n\n\n\n\n  \n  if self.isEnabledFor(WARNING):\n   self._log(WARNING,msg,args,**kwargs)\n   \n def warn(self,msg,*args,**kwargs):\n  warnings.warn(\"The 'warn' method is deprecated, \"\n  \"use 'warning' instead\",DeprecationWarning,2)\n  self.warning(msg,*args,**kwargs)\n  \n def error(self,msg,*args,**kwargs):\n  ''\n\n\n\n\n\n\n  \n  if self.isEnabledFor(ERROR):\n   self._log(ERROR,msg,args,**kwargs)\n   \n def exception(self,msg,*args,**kwargs):\n  ''\n\n  \n  kwargs['exc_info']=True\n  self.error(msg,*args,**kwargs)\n  \n def critical(self,msg,*args,**kwargs):\n  ''\n\n\n\n\n\n\n  \n  if self.isEnabledFor(CRITICAL):\n   self._log(CRITICAL,msg,args,**kwargs)\n   \n fatal=critical\n \n def log(self,level,msg,*args,**kwargs):\n  ''\n\n\n\n\n\n\n  \n  if not isinstance(level,int):\n   if raiseExceptions:\n    raise TypeError(\"level must be an integer\")\n   else :\n    return\n  if self.isEnabledFor(level):\n   self._log(level,msg,args,**kwargs)\n   \n def findCaller(self,stack_info=False ):\n  ''\n\n\n  \n  f=currentframe()\n  \n  \n  if f is not None :\n   f=f.f_back\n  rv=\"(unknown file)\",0,\"(unknown function)\",None\n  while hasattr(f,\"f_code\"):\n   co=f.f_code\n   filename=os.path.normcase(co.co_filename)\n   if filename ==_srcfile:\n    f=f.f_back\n    continue\n   sinfo=None\n   if stack_info:\n    sio=io.StringIO()\n    sio.write('Stack (most recent call last):\\n')\n    traceback.print_stack(f,file=sio)\n    sinfo=sio.getvalue()\n    if sinfo[-1]=='\\n':\n     sinfo=sinfo[:-1]\n    sio.close()\n   rv=(co.co_filename,f.f_lineno,co.co_name,sinfo)\n   break\n  return rv\n  \n def makeRecord(self,name,level,fn,lno,msg,args,exc_info,\n func=None ,extra=None ,sinfo=None ):\n  ''\n\n\n  \n  rv=_logRecordFactory(name,level,fn,lno,msg,args,exc_info,func,\n  sinfo)\n  if extra is not None :\n   for key in extra:\n    if (key in [\"message\",\"asctime\"])or (key in rv.__dict__):\n     raise KeyError(\"Attempt to overwrite %r in LogRecord\"%key)\n    rv.__dict__[key]=extra[key]\n  return rv\n  \n def _log(self,level,msg,args,exc_info=None ,extra=None ,stack_info=False ):\n  ''\n\n\n  \n  sinfo=None\n  if _srcfile:\n  \n  \n  \n   try :\n    fn,lno,func,sinfo=self.findCaller(stack_info)\n   except ValueError:\n    fn,lno,func=\"(unknown file)\",0,\"(unknown function)\"\n  else :\n   fn,lno,func=\"(unknown file)\",0,\"(unknown function)\"\n  if exc_info:\n   if not isinstance(exc_info,tuple):\n    exc_info=sys.exc_info()\n  record=self.makeRecord(self.name,level,fn,lno,msg,args,\n  exc_info,func,extra,sinfo)\n  self.handle(record)\n  \n def handle(self,record):\n  ''\n\n\n\n\n  \n  if (not self.disabled)and self.filter(record):\n   self.callHandlers(record)\n   \n def addHandler(self,hdlr):\n  ''\n\n  \n  _acquireLock()\n  try :\n   if not (hdlr in self.handlers):\n    self.handlers.append(hdlr)\n  finally :\n   _releaseLock()\n   \n def removeHandler(self,hdlr):\n  ''\n\n  \n  _acquireLock()\n  try :\n   if hdlr in self.handlers:\n    self.handlers.remove(hdlr)\n  finally :\n   _releaseLock()\n   \n def hasHandlers(self):\n  ''\n\n\n\n\n\n\n\n  \n  c=self\n  rv=False\n  while c:\n   if c.handlers:\n    rv=True\n    break\n   if not c.propagate:\n    break\n   else :\n    c=c.parent\n  return rv\n  \n def callHandlers(self,record):\n  ''\n\n\n\n\n\n\n\n  \n  c=self\n  found=0\n  while c:\n   for hdlr in c.handlers:\n    found=found+1\n    if record.levelno >=hdlr.level:\n     hdlr.handle(record)\n   if not c.propagate:\n    c=None\n   else :\n    c=c.parent\n  if (found ==0):\n   if lastResort:\n    if record.levelno >=lastResort.level:\n     lastResort.handle(record)\n   elif raiseExceptions and not self.manager.emittedNoHandlerWarning:\n    sys.stderr.write(\"No handlers could be found for logger\"\n    \" \\\"%s\\\"\\n\"%self.name)\n    self.manager.emittedNoHandlerWarning=True\n    \n def getEffectiveLevel(self):\n  ''\n\n\n\n\n  \n  logger=self\n  while logger:\n   if logger.level:\n    return logger.level\n   logger=logger.parent\n  return NOTSET\n  \n def isEnabledFor(self,level):\n  ''\n\n  \n  if self.manager.disable >=level:\n   return False\n  return level >=self.getEffectiveLevel()\n  \n def getChild(self,suffix):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if self.root is not self:\n   suffix='.'.join((self.name,suffix))\n  return self.manager.getLogger(suffix)\n  \nclass RootLogger(Logger):\n ''\n\n\n\n \n def __init__(self,level):\n  ''\n\n  \n  Logger.__init__(self,\"root\",level)\n  \n_loggerClass=Logger\n\nclass LoggerAdapter(object):\n ''\n\n\n \n \n def __init__(self,logger,extra):\n  ''\n\n\n\n\n\n\n\n\n  \n  self.logger=logger\n  self.extra=extra\n  \n def process(self,msg,kwargs):\n  ''\n\n\n\n\n\n\n\n  \n  kwargs[\"extra\"]=self.extra\n  return msg,kwargs\n  \n  \n  \n  \n def debug(self,msg,*args,**kwargs):\n  ''\n\n  \n  self.log(DEBUG,msg,*args,**kwargs)\n  \n def info(self,msg,*args,**kwargs):\n  ''\n\n  \n  self.log(INFO,msg,*args,**kwargs)\n  \n def warning(self,msg,*args,**kwargs):\n  ''\n\n  \n  self.log(WARNING,msg,*args,**kwargs)\n  \n def warn(self,msg,*args,**kwargs):\n  warnings.warn(\"The 'warn' method is deprecated, \"\n  \"use 'warning' instead\",DeprecationWarning,2)\n  self.warning(msg,*args,**kwargs)\n  \n def error(self,msg,*args,**kwargs):\n  ''\n\n  \n  self.log(ERROR,msg,*args,**kwargs)\n  \n def exception(self,msg,*args,**kwargs):\n  ''\n\n  \n  kwargs[\"exc_info\"]=True\n  self.log(ERROR,msg,*args,**kwargs)\n  \n def critical(self,msg,*args,**kwargs):\n  ''\n\n  \n  self.log(CRITICAL,msg,*args,**kwargs)\n  \n def log(self,level,msg,*args,**kwargs):\n  ''\n\n\n  \n  if self.isEnabledFor(level):\n   msg,kwargs=self.process(msg,kwargs)\n   self.logger._log(level,msg,args,**kwargs)\n   \n def isEnabledFor(self,level):\n  ''\n\n  \n  if self.logger.manager.disable >=level:\n   return False\n  return level >=self.getEffectiveLevel()\n  \n def setLevel(self,level):\n  ''\n\n  \n  self.logger.setLevel(level)\n  \n def getEffectiveLevel(self):\n  ''\n\n  \n  return self.logger.getEffectiveLevel()\n  \n def hasHandlers(self):\n  ''\n\n  \n  return self.logger.hasHandlers()\n  \nroot=RootLogger(WARNING)\nLogger.root=root\nLogger.manager=Manager(Logger.root)\n\n\n\n\n\nBASIC_FORMAT=\"%(levelname)s:%(name)s:%(message)s\"\n\ndef basicConfig(**kwargs):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n _acquireLock()\n try :\n  if len(root.handlers)==0:\n   handlers=kwargs.get(\"handlers\")\n   if handlers is None :\n    if\"stream\"in kwargs and\"filename\"in kwargs:\n     raise ValueError(\"'stream' and 'filename' should not be \"\n     \"specified together\")\n   else :\n    if\"stream\"in kwargs or\"filename\"in kwargs:\n     raise ValueError(\"'stream' or 'filename' should not be \"\n     \"specified together with 'handlers'\")\n   if handlers is None :\n    filename=kwargs.get(\"filename\")\n    if filename:\n     mode=kwargs.get(\"filemode\",'a')\n     h=FileHandler(filename,mode)\n    else :\n     stream=kwargs.get(\"stream\")\n     h=StreamHandler(stream)\n    handlers=[h]\n   fs=kwargs.get(\"format\",BASIC_FORMAT)\n   dfs=kwargs.get(\"datefmt\",None )\n   style=kwargs.get(\"style\",'%')\n   fmt=Formatter(fs,dfs,style)\n   for h in handlers:\n    if h.formatter is None :\n     h.setFormatter(fmt)\n    root.addHandler(h)\n   level=kwargs.get(\"level\")\n   if level is not None :\n    root.setLevel(level)\n finally :\n  _releaseLock()\n  \n  \n  \n  \n  \n  \ndef getLogger(name=None ):\n ''\n\n\n\n \n if name:\n  return Logger.manager.getLogger(name)\n else :\n  return root\n  \ndef critical(msg,*args,**kwargs):\n ''\n\n\n\n \n if len(root.handlers)==0:\n  basicConfig()\n root.critical(msg,*args,**kwargs)\n \nfatal=critical\n\ndef error(msg,*args,**kwargs):\n ''\n\n\n\n \n if len(root.handlers)==0:\n  basicConfig()\n root.error(msg,*args,**kwargs)\n \ndef exception(msg,*args,**kwargs):\n ''\n\n\n\n \n kwargs['exc_info']=True\n error(msg,*args,**kwargs)\n \ndef warning(msg,*args,**kwargs):\n ''\n\n\n\n \n if len(root.handlers)==0:\n  basicConfig()\n root.warning(msg,*args,**kwargs)\n \ndef warn(msg,*args,**kwargs):\n warnings.warn(\"The 'warn' function is deprecated, \"\n \"use 'warning' instead\",DeprecationWarning,2)\n warning(msg,*args,**kwargs)\n \ndef info(msg,*args,**kwargs):\n ''\n\n\n\n \n if len(root.handlers)==0:\n  basicConfig()\n root.info(msg,*args,**kwargs)\n \ndef debug(msg,*args,**kwargs):\n ''\n\n\n\n \n if len(root.handlers)==0:\n  basicConfig()\n root.debug(msg,*args,**kwargs)\n \ndef log(level,msg,*args,**kwargs):\n ''\n\n\n\n \n if len(root.handlers)==0:\n  basicConfig()\n root.log(level,msg,*args,**kwargs)\n \ndef disable(level):\n ''\n\n \n root.manager.disable=level\n \ndef shutdown(handlerList=_handlerList):\n ''\n\n\n\n\n \n for wr in reversed(handlerList[:]):\n \n \n  try :\n   h=wr()\n   if h:\n    try :\n     h.acquire()\n     h.flush()\n     h.close()\n    except (IOError,ValueError):\n    \n    \n    \n    \n     pass\n    finally :\n     h.release()\n  except :\n   if raiseExceptions:\n    raise\n    \n    \n    \nimport atexit\natexit.register(shutdown)\n\n\n\nclass NullHandler(Handler):\n ''\n\n\n\n\n\n\n\n \n def handle(self,record):\n  ''\n  \n def emit(self,record):\n  ''\n  \n def createLock(self):\n  self.lock=None\n  \n  \n  \n_warnings_showwarning=None\n\ndef _showwarning(message,category,filename,lineno,file=None ,line=None ):\n ''\n\n\n\n\n\n \n if file is not None :\n  if _warnings_showwarning is not None :\n   _warnings_showwarning(message,category,filename,lineno,file,line)\n else :\n  s=warnings.formatwarning(message,category,filename,lineno,line)\n  logger=getLogger(\"py.warnings\")\n  if not logger.handlers:\n   logger.addHandler(NullHandler())\n  logger.warning(\"%s\",s)\n  \ndef captureWarnings(capture):\n ''\n\n\n\n \n global _warnings_showwarning\n if capture:\n  if _warnings_showwarning is None :\n   _warnings_showwarning=warnings.showwarning\n   warnings.showwarning=_showwarning\n else :\n  if _warnings_showwarning is not None :\n   warnings.showwarning=_warnings_showwarning\n   _warnings_showwarning=None\n", 1], "collections": [".py", "\n\nfrom _collections import deque,defaultdict\n\n\n\n__all__=['deque','defaultdict','namedtuple','UserDict','UserList',\n'UserString','Counter','OrderedDict']\n\n\n\n\n\n\nfrom _abcoll import MutableMapping\n\n\n\nfrom collections.abc import *\nimport collections.abc\n__all__ +=collections.abc.__all__\n\nfrom _collections import deque,defaultdict,namedtuple\nfrom operator import itemgetter as _itemgetter\nfrom keyword import iskeyword as _iskeyword\nimport sys as _sys\nimport heapq as _heapq\n\n\nfrom itertools import repeat as _repeat,chain as _chain,starmap as _starmap\nfrom reprlib import recursive_repr as _recursive_repr\n\nclass Set(set):\n pass\n \nclass Sequence(list):\n pass\n \ndef _proxy(obj):\n return obj\n \n \n \n \n \nclass _Link(object):\n __slots__='prev','next','key','__weakref__'\n \nclass OrderedDict(dict):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n def __init__(self,*args,**kwds):\n  ''\n\n\n\n  \n  if len(args)>1:\n   raise TypeError('expected at most 1 arguments, got %d'%len(args))\n  try :\n   self.__root\n  except AttributeError:\n   self.__hardroot=_Link()\n   self.__root=root=_proxy(self.__hardroot)\n   root.prev=root.next=root\n   self.__map={}\n  self.__update(*args,**kwds)\n  \n def __setitem__(self,key,value,\n dict_setitem=dict.__setitem__,proxy=_proxy,Link=_Link):\n  ''\n  \n  \n  if key not in self:\n   self.__map[key]=link=Link()\n   root=self.__root\n   last=root.prev\n   link.prev,link.next,link.key=last,root,key\n   last.next=link\n   root.prev=proxy(link)\n  dict_setitem(self,key,value)\n  \n def __delitem__(self,key,dict_delitem=dict.__delitem__):\n  ''\n  \n  \n  dict_delitem(self,key)\n  link=self.__map.pop(key)\n  link_prev=link.prev\n  link_next=link.next\n  link_prev.next=link_next\n  link_next.prev=link_prev\n  \n def __iter__(self):\n  ''\n  \n  root=self.__root\n  curr=root.next\n  while curr is not root:\n   yield curr.key\n   curr=curr.next\n   \n def __reversed__(self):\n  ''\n  \n  root=self.__root\n  curr=root.prev\n  while curr is not root:\n   yield curr.key\n   curr=curr.prev\n   \n def clear(self):\n  ''\n  root=self.__root\n  root.prev=root.next=root\n  self.__map.clear()\n  dict.clear(self)\n  \n def popitem(self,last=True ):\n  ''\n\n\n  \n  if not self:\n   raise KeyError('dictionary is empty')\n  root=self.__root\n  if last:\n   link=root.prev\n   link_prev=link.prev\n   link_prev.next=root\n   root.prev=link_prev\n  else :\n   link=root.next\n   link_next=link.next\n   root.next=link_next\n   link_next.prev=root\n  key=link.key\n  del self.__map[key]\n  value=dict.pop(self,key)\n  return key,value\n  \n def move_to_end(self,key,last=True ):\n  ''\n\n\n\n\n  \n  link=self.__map[key]\n  link_prev=link.prev\n  link_next=link.next\n  link_prev.next=link_next\n  link_next.prev=link_prev\n  root=self.__root\n  if last:\n   last=root.prev\n   link.prev=last\n   link.next=root\n   last.next=root.prev=link\n  else :\n   first=root.next\n   link.prev=root\n   link.next=first\n   root.next=first.prev=link\n   \n def __sizeof__(self):\n  sizeof=_sys.getsizeof\n  n=len(self)+1\n  size=sizeof(self.__dict__)\n  size +=sizeof(self.__map)*2\n  size +=sizeof(self.__hardroot)*n\n  size +=sizeof(self.__root)*n\n  return size\n  \n  \n update=__update=MutableMapping.update\n keys=MutableMapping.keys\n values=MutableMapping.values\n items=MutableMapping.items\n __ne__=MutableMapping.__ne__\n \n __marker=object()\n \n def pop(self,key,default=__marker):\n  ''\n\n\n\n  \n  if key in self:\n   result=self[key]\n   del self[key]\n   return result\n  if default is self.__marker:\n   raise KeyError(key)\n  return default\n  \n def setdefault(self,key,default=None ):\n  ''\n  if key in self:\n   return self[key]\n  self[key]=default\n  return default\n  \n  \n  \n def __repr__(self):\n  ''\n  if not self:\n   return'%s()'%(self.__class__.__name__,)\n  return'%s(%r)'%(self.__class__.__name__,list(self.items()))\n  \n def __reduce__(self):\n  ''\n  items=[[k,self[k]]for k in self]\n  inst_dict=vars(self).copy()\n  for k in vars(OrderedDict()):\n   inst_dict.pop(k,None )\n  if inst_dict:\n   return (self.__class__,(items,),inst_dict)\n  return self.__class__,(items,)\n  \n def copy(self):\n  ''\n  return self.__class__(self)\n  \n @classmethod\n def fromkeys(cls,iterable,value=None ):\n  ''\n\n\n  \n  self=cls()\n  for key in iterable:\n   self[key]=value\n  return self\n  \n def __eq__(self,other):\n  ''\n\n\n  \n  if isinstance(other,OrderedDict):\n   return len(self)==len(other)and   all(p ==q for p,q in zip(self.items(),other.items()))\n  return dict.__eq__(self,other)\n  \n  \n  \n  \n  \n  \n  \ndef _count_elements(mapping,iterable):\n ''\n mapping_get=mapping.get\n for elem in iterable:\n  mapping[elem]=mapping_get(elem,0)+1\n  \n  \n  \n  \n  \n  \nclass Counter(dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n def __init__(self,iterable=None ,**kwds):\n  ''\n\n\n\n\n\n\n\n\n  \n  \n  dict.__init__(self)\n  self.update(iterable,**kwds)\n  \n def __missing__(self,key):\n  ''\n  \n  return 0\n  \n def most_common(self,n=None ):\n  ''\n\n\n\n\n\n  \n  \n  if n is None :\n   return sorted(self.items(),key=_itemgetter(1),reverse=True )\n  return _heapq.nlargest(n,self.items(),key=_itemgetter(1))\n  \n def elements(self):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  return _chain.from_iterable(_starmap(_repeat,self.items()))\n  \n  \n  \n @classmethod\n def fromkeys(cls,iterable,v=None ):\n \n \n  raise NotImplementedError(\n  'Counter.fromkeys() is undefined.  Use Counter(iterable) instead.')\n  \n def update(self,iterable=None ,**kwds):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  \n  if iterable is not None :\n   if isinstance(iterable,Mapping):\n    if self:\n     self_get=self.get\n     for elem,count in iterable.items():\n      self[elem]=count+self_get(elem,0)\n    else :\n     super().update(iterable)\n   else :\n    _count_elements(self,iterable)\n  if kwds:\n   self.update(kwds)\n   \n def subtract(self,iterable=None ,**kwds):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  if iterable is not None :\n   self_get=self.get\n   if isinstance(iterable,Mapping):\n    for elem,count in iterable.items():\n     self[elem]=self_get(elem,0)-count\n   else :\n    for elem in iterable:\n     self[elem]=self_get(elem,0)-1\n  if kwds:\n   self.subtract(kwds)\n   \n def copy(self):\n  ''\n  return self.__class__(self)\n  \n def __reduce__(self):\n  return self.__class__,(dict(self),)\n  \n def __delitem__(self,elem):\n  ''\n  if elem in self:\n   super().__delitem__(elem)\n   \n def __repr__(self):\n  if not self:\n   return'%s()'%self.__class__.__name__\n  try :\n   items=', '.join(map('%r: %r'.__mod__,self.most_common()))\n   return'%s({%s})'%(self.__class__.__name__,items)\n  except TypeError:\n  \n   return'{0}({1!r})'.format(self.__class__.__name__,dict(self))\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n def __add__(self,other):\n  ''\n\n\n\n\n  \n  if not isinstance(other,Counter):\n   return NotImplemented\n  result=Counter()\n  for elem,count in self.items():\n   newcount=count+other[elem]\n   if newcount >0:\n    result[elem]=newcount\n  for elem,count in other.items():\n   if elem not in self and count >0:\n    result[elem]=count\n  return result\n  \n def __sub__(self,other):\n  ''\n\n\n\n\n  \n  if not isinstance(other,Counter):\n   return NotImplemented\n  result=Counter()\n  for elem,count in self.items():\n   newcount=count -other[elem]\n   if newcount >0:\n    result[elem]=newcount\n  for elem,count in other.items():\n   if elem not in self and count <0:\n    result[elem]=0 -count\n  return result\n  \n def __or__(self,other):\n  ''\n\n\n\n\n  \n  if not isinstance(other,Counter):\n   return NotImplemented\n  result=Counter()\n  for elem,count in self.items():\n   other_count=other[elem]\n   newcount=other_count if count <other_count else count\n   if newcount >0:\n    result[elem]=newcount\n  for elem,count in other.items():\n   if elem not in self and count >0:\n    result[elem]=count\n  return result\n  \n def __and__(self,other):\n  ''\n\n\n\n\n  \n  if not isinstance(other,Counter):\n   return NotImplemented\n  result=Counter()\n  for elem,count in self.items():\n   other_count=other[elem]\n   newcount=count if count <other_count else other_count\n   if newcount >0:\n    result[elem]=newcount\n  return result\n  \n  \n  \n  \n  \n  \nclass ChainMap(MutableMapping):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,*maps):\n  ''\n\n\n  \n  self.maps=list(maps)or [{}]\n  \n def __missing__(self,key):\n  raise KeyError(key)\n  \n def __getitem__(self,key):\n  for mapping in self.maps:\n   try :\n    return mapping[key]\n   except KeyError:\n    pass\n  return self.__missing__(key)\n  \n def get(self,key,default=None ):\n  return self[key]if key in self else default\n  \n def __len__(self):\n  return len(set().union(*self.maps))\n  \n def __iter__(self):\n  return iter(set().union(*self.maps))\n  \n def __contains__(self,key):\n  return any(key in m for m in self.maps)\n  \n def __bool__(self):\n  return any(self.maps)\n  \n  \n  \n def __repr__(self):\n  return'{0.__class__.__name__}({1})'.format(\n  self,', '.join(map(repr,self.maps)))\n  \n def __repr__(self):\n  return','.join(str(_map)for _map in self.maps)\n  \n @classmethod\n def fromkeys(cls,iterable,*args):\n  ''\n  return cls(dict.fromkeys(iterable,*args))\n  \n def copy(self):\n  ''\n  return self.__class__(self.maps[0].copy(),*self.maps[1:])\n  \n __copy__=copy\n \n def new_child(self):\n  ''\n  return self.__class__({},*self.maps)\n  \n @property\n def parents(self):\n  ''\n  return self.__class__(*self.maps[1:])\n  \n def __setitem__(self,key,value):\n  self.maps[0][key]=value\n  \n def __delitem__(self,key):\n  try :\n   del self.maps[0][key]\n  except KeyError:\n   raise KeyError('Key not found in the first mapping: {!r}'.format(key))\n   \n def popitem(self):\n  ''\n  try :\n   return self.maps[0].popitem()\n  except KeyError:\n   raise KeyError('No keys found in the first mapping.')\n   \n def pop(self,key,*args):\n  ''\n  try :\n   return self.maps[0].pop(key,*args)\n  except KeyError:\n  \n   raise KeyError('Key not found in the first mapping: %s'%key)\n   \n def clear(self):\n  ''\n  self.maps[0].clear()\n  \n  \n  \n  \n  \n  \nclass UserDict(MutableMapping):\n\n\n def __init__(self,dict=None ,**kwargs):\n  self.data={}\n  if dict is not None :\n   self.update(dict)\n  if len(kwargs):\n   self.update(kwargs)\n def __len__(self):return len(self.data)\n def __getitem__(self,key):\n  if key in self.data:\n   return self.data[key]\n  if hasattr(self.__class__,\"__missing__\"):\n   return self.__class__.__missing__(self,key)\n  raise KeyError(key)\n def __setitem__(self,key,item):self.data[key]=item\n def __delitem__(self,key):del self.data[key]\n def __iter__(self):\n  return iter(self.data)\n  \n  \n def __contains__(self,key):\n  return key in self.data\n  \n  \n def __repr__(self):return repr(self.data)\n def copy(self):\n  if self.__class__ is UserDict:\n   return UserDict(self.data.copy())\n  import copy\n  data=self.data\n  try :\n   self.data={}\n   c=copy.copy(self)\n  finally :\n   self.data=data\n  c.update(self)\n  return c\n @classmethod\n def fromkeys(cls,iterable,value=None ):\n  d=cls()\n  for key in iterable:\n   d[key]=value\n  return d\n  \n  \n  \n  \n  \nclass UserList(MutableSequence):\n ''\n def __init__(self,initlist=None ):\n  self.data=[]\n  if initlist is not None :\n  \n   if type(initlist)==type(self.data):\n    self.data[:]=initlist\n   elif isinstance(initlist,UserList):\n    self.data[:]=initlist.data[:]\n   else :\n    self.data=list(initlist)\n def __repr__(self):return repr(self.data)\n def __lt__(self,other):return self.data <self.__cast(other)\n def __le__(self,other):return self.data <=self.__cast(other)\n def __eq__(self,other):return self.data ==self.__cast(other)\n def __ne__(self,other):return self.data !=self.__cast(other)\n def __gt__(self,other):return self.data >self.__cast(other)\n def __ge__(self,other):return self.data >=self.__cast(other)\n def __cast(self,other):\n  return other.data if isinstance(other,UserList)else other\n def __contains__(self,item):return item in self.data\n def __len__(self):return len(self.data)\n def __getitem__(self,i):return self.data[i]\n def __setitem__(self,i,item):self.data[i]=item\n def __delitem__(self,i):del self.data[i]\n def __add__(self,other):\n  if isinstance(other,UserList):\n   return self.__class__(self.data+other.data)\n  elif isinstance(other,type(self.data)):\n   return self.__class__(self.data+other)\n  return self.__class__(self.data+list(other))\n def __radd__(self,other):\n  if isinstance(other,UserList):\n   return self.__class__(other.data+self.data)\n  elif isinstance(other,type(self.data)):\n   return self.__class__(other+self.data)\n  return self.__class__(list(other)+self.data)\n def __iadd__(self,other):\n  if isinstance(other,UserList):\n   self.data +=other.data\n  elif isinstance(other,type(self.data)):\n   self.data +=other\n  else :\n   self.data +=list(other)\n  return self\n def __mul__(self,n):\n  return self.__class__(self.data *n)\n __rmul__=__mul__\n def __imul__(self,n):\n  self.data *=n\n  return self\n def append(self,item):self.data.append(item)\n def insert(self,i,item):self.data.insert(i,item)\n def pop(self,i=-1):return self.data.pop(i)\n def remove(self,item):self.data.remove(item)\n def clear(self):self.data.clear()\n def copy(self):return self.__class__(self)\n def count(self,item):return self.data.count(item)\n def index(self,item,*args):return self.data.index(item,*args)\n def reverse(self):self.data.reverse()\n def sort(self,*args,**kwds):self.data.sort(*args,**kwds)\n def extend(self,other):\n  if isinstance(other,UserList):\n   self.data.extend(other.data)\n  else :\n   self.data.extend(other)\n   \n   \n   \n   \n   \n   \n   \nclass UserString(Sequence):\n def __init__(self,seq):\n  if isinstance(seq,str):\n   self.data=seq\n  elif isinstance(seq,UserString):\n   self.data=seq.data[:]\n  else :\n   self.data=str(seq)\n def __str__(self):return str(self.data)\n def __repr__(self):return repr(self.data)\n def __int__(self):return int(self.data)\n def __float__(self):return float(self.data)\n def __complex__(self):return complex(self.data)\n def __hash__(self):return hash(self.data)\n \n def __eq__(self,string):\n  if isinstance(string,UserString):\n   return self.data ==string.data\n  return self.data ==string\n def __ne__(self,string):\n  if isinstance(string,UserString):\n   return self.data !=string.data\n  return self.data !=string\n def __lt__(self,string):\n  if isinstance(string,UserString):\n   return self.data <string.data\n  return self.data <string\n def __le__(self,string):\n  if isinstance(string,UserString):\n   return self.data <=string.data\n  return self.data <=string\n def __gt__(self,string):\n  if isinstance(string,UserString):\n   return self.data >string.data\n  return self.data >string\n def __ge__(self,string):\n  if isinstance(string,UserString):\n   return self.data >=string.data\n  return self.data >=string\n  \n def __contains__(self,char):\n  if isinstance(char,UserString):\n   char=char.data\n  return char in self.data\n  \n def __len__(self):return len(self.data)\n def __getitem__(self,index):return self.__class__(self.data[index])\n def __add__(self,other):\n  if isinstance(other,UserString):\n   return self.__class__(self.data+other.data)\n  elif isinstance(other,str):\n   return self.__class__(self.data+other)\n  return self.__class__(self.data+str(other))\n def __radd__(self,other):\n  if isinstance(other,str):\n   return self.__class__(other+self.data)\n  return self.__class__(str(other)+self.data)\n def __mul__(self,n):\n  return self.__class__(self.data *n)\n __rmul__=__mul__\n def __mod__(self,args):\n  return self.__class__(self.data %args)\n  \n  \n def capitalize(self):return self.__class__(self.data.capitalize())\n def center(self,width,*args):\n  return self.__class__(self.data.center(width,*args))\n def count(self,sub,start=0,end=_sys.maxsize):\n  if isinstance(sub,UserString):\n   sub=sub.data\n  return self.data.count(sub,start,end)\n def encode(self,encoding=None ,errors=None ):\n  if encoding:\n   if errors:\n    return self.__class__(self.data.encode(encoding,errors))\n   return self.__class__(self.data.encode(encoding))\n  return self.__class__(self.data.encode())\n def endswith(self,suffix,start=0,end=_sys.maxsize):\n  return self.data.endswith(suffix,start,end)\n def expandtabs(self,tabsize=8):\n  return self.__class__(self.data.expandtabs(tabsize))\n def find(self,sub,start=0,end=_sys.maxsize):\n  if isinstance(sub,UserString):\n   sub=sub.data\n  return self.data.find(sub,start,end)\n def format(self,*args,**kwds):\n  return self.data.format(*args,**kwds)\n def index(self,sub,start=0,end=_sys.maxsize):\n  return self.data.index(sub,start,end)\n def isalpha(self):return self.data.isalpha()\n def isalnum(self):return self.data.isalnum()\n def isdecimal(self):return self.data.isdecimal()\n def isdigit(self):return self.data.isdigit()\n def isidentifier(self):return self.data.isidentifier()\n def islower(self):return self.data.islower()\n def isnumeric(self):return self.data.isnumeric()\n def isspace(self):return self.data.isspace()\n def istitle(self):return self.data.istitle()\n def isupper(self):return self.data.isupper()\n def join(self,seq):return self.data.join(seq)\n def ljust(self,width,*args):\n  return self.__class__(self.data.ljust(width,*args))\n def lower(self):return self.__class__(self.data.lower())\n def lstrip(self,chars=None ):return self.__class__(self.data.lstrip(chars))\n def partition(self,sep):\n  return self.data.partition(sep)\n def replace(self,old,new,maxsplit=-1):\n  if isinstance(old,UserString):\n   old=old.data\n  if isinstance(new,UserString):\n   new=new.data\n  return self.__class__(self.data.replace(old,new,maxsplit))\n def rfind(self,sub,start=0,end=_sys.maxsize):\n  if isinstance(sub,UserString):\n   sub=sub.data\n  return self.data.rfind(sub,start,end)\n def rindex(self,sub,start=0,end=_sys.maxsize):\n  return self.data.rindex(sub,start,end)\n def rjust(self,width,*args):\n  return self.__class__(self.data.rjust(width,*args))\n def rpartition(self,sep):\n  return self.data.rpartition(sep)\n def rstrip(self,chars=None ):\n  return self.__class__(self.data.rstrip(chars))\n def split(self,sep=None ,maxsplit=-1):\n  return self.data.split(sep,maxsplit)\n def rsplit(self,sep=None ,maxsplit=-1):\n  return self.data.rsplit(sep,maxsplit)\n def splitlines(self,keepends=False ):return self.data.splitlines(keepends)\n def startswith(self,prefix,start=0,end=_sys.maxsize):\n  return self.data.startswith(prefix,start,end)\n def strip(self,chars=None ):return self.__class__(self.data.strip(chars))\n def swapcase(self):return self.__class__(self.data.swapcase())\n def title(self):return self.__class__(self.data.title())\n def translate(self,*args):\n  return self.__class__(self.data.translate(*args))\n def upper(self):return self.__class__(self.data.upper())\n def zfill(self,width):return self.__class__(self.data.zfill(width))\n", 1], "xml.parsers.expat": [".py", "''\nimport sys\n\nfrom pyexpat import *\n\n\nsys.modules['xml.parsers.expat.model']=model\nsys.modules['xml.parsers.expat.errors']=errors\n"], "browser.websocket": [".py", "from browser import window\nimport javascript\n\nWebSocket=javascript.JSConstructor(window.WebSocket)"], "importlib._bootstrap": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_CASE_INSENSITIVE_PLATFORMS='win','cygwin','darwin'\n\n\ndef _make_relax_case():\n if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS):\n  def _relax_case():\n   ''\n   return b'PYTHONCASEOK'in _os.environ\n else :\n  def _relax_case():\n   ''\n   return False\n return _relax_case\n \n \n \ndef _w_long(x):\n ''\n\n\n\n \n x=int(x)\n int_bytes=[]\n int_bytes.append(x&0xFF)\n int_bytes.append((x >>8)&0xFF)\n int_bytes.append((x >>16)&0xFF)\n int_bytes.append((x >>24)&0xFF)\n return bytearray(int_bytes)\n \n \n \ndef _r_long(int_bytes):\n ''\n\n\n\n \n x=int_bytes[0]\n x |=int_bytes[1]<<8\n x |=int_bytes[2]<<16\n x |=int_bytes[3]<<24\n return x\n \n \ndef _path_join(*path_parts):\n ''\n new_parts=[]\n for part in path_parts:\n  if not part:\n   continue\n  new_parts.append(part)\n  if part[-1]not in path_separators:\n   new_parts.append(path_sep)\n return''.join(new_parts[:-1])\n \n \ndef _path_split(path):\n ''\n for x in reversed(path):\n  if x in path_separators:\n   sep=x\n   break\n else :\n  sep=path_sep\n front,_,tail=path.rpartition(sep)\n return front,tail\n \n \ndef _path_is_mode_type(path,mode):\n ''\n try :\n  stat_info=_os.stat(path)\n except OSError:\n  return False\n return (stat_info.st_mode&0o170000)==mode\n \n \n \ndef _path_isfile(path):\n ''\n return _path_is_mode_type(path,0o100000)\n \n \n \ndef _path_isdir(path):\n ''\n if not path:\n  path=_os.getcwd()\n return _path_is_mode_type(path,0o040000)\n \n \ndef _write_atomic(path,data,mode=0o666):\n ''\n\n \n \n path_tmp='{}.{}'.format(path,id(path))\n fd=_os.open(path_tmp,\n _os.O_EXCL |_os.O_CREAT |_os.O_WRONLY,mode&0o666)\n try :\n \n \n  with _io.FileIO(fd,'wb')as file:\n   file.write(data)\n  _os.replace(path_tmp,path)\n except OSError:\n  try :\n   _os.unlink(path_tmp)\n  except OSError:\n   pass\n  raise\n  \n  \ndef _wrap(new,old):\n ''\n for replace in ['__module__','__name__','__qualname__','__doc__']:\n  if hasattr(old,replace):\n   setattr(new,replace,getattr(old,replace))\n new.__dict__.update(old.__dict__)\n \n \n_code_type=type(_wrap.__code__)\n\n\ndef new_module(name):\n ''\n\n\n\n \n return type(_io)(name)\n \n \n \n \n \n_module_locks={}\n\n_blocking_on={}\n\n\nclass _DeadlockError(RuntimeError):\n pass\n \n \nclass _ModuleLock:\n ''\n\n\n \n \n def __init__(self,name):\n  self.lock=_thread.allocate_lock()\n  self.wakeup=_thread.allocate_lock()\n  self.name=name\n  self.owner=None\n  self.count=0\n  self.waiters=0\n  \n def has_deadlock(self):\n \n  me=_thread.get_ident()\n  tid=self.owner\n  while True :\n   lock=_blocking_on.get(tid)\n   if lock is None :\n    return False\n   tid=lock.owner\n   if tid ==me:\n    return True\n    \n def acquire(self):\n  ''\n\n\n\n  \n  tid=_thread.get_ident()\n  _blocking_on[tid]=self\n  try :\n   while True :\n    with self.lock:\n     if self.count ==0 or self.owner ==tid:\n      self.owner=tid\n      self.count +=1\n      return True\n     if self.has_deadlock():\n      raise _DeadlockError(\"deadlock detected by %r\"%self)\n     if self.wakeup.acquire(False ):\n      self.waiters +=1\n      \n    self.wakeup.acquire()\n    self.wakeup.release()\n  finally :\n   del _blocking_on[tid]\n   \n def release(self):\n  tid=_thread.get_ident()\n  with self.lock:\n   if self.owner !=tid:\n    raise RuntimeError(\"cannot release un-acquired lock\")\n   assert self.count >0\n   self.count -=1\n   if self.count ==0:\n    self.owner=None\n    if self.waiters:\n     self.waiters -=1\n     self.wakeup.release()\n     \n def __repr__(self):\n  return\"_ModuleLock(%r) at %d\"%(self.name,id(self))\n  \n  \nclass _DummyModuleLock:\n ''\n \n \n def __init__(self,name):\n  self.name=name\n  self.count=0\n  \n def acquire(self):\n  self.count +=1\n  return True\n  \n def release(self):\n  if self.count ==0:\n   raise RuntimeError(\"cannot release un-acquired lock\")\n  self.count -=1\n  \n def __repr__(self):\n  return\"_DummyModuleLock(%r) at %d\"%(self.name,id(self))\n  \n  \n  \n  \ndef _get_module_lock(name):\n ''\n\n \n lock=None\n try :\n  lock=_module_locks[name]()\n except KeyError:\n  pass\n if lock is None :\n  if _thread is None :\n   lock=_DummyModuleLock(name)\n  else :\n   lock=_ModuleLock(name)\n  def cb(_):\n   del _module_locks[name]\n  _module_locks[name]=_weakref.ref(lock,cb)\n return lock\n \ndef _lock_unlock_module(name):\n ''\n\n\n\n\n \n lock=_get_module_lock(name)\n _imp.release_lock()\n try :\n  lock.acquire()\n except _DeadlockError:\n \n \n  pass\n else :\n  lock.release()\n  \n  \n  \ndef _call_with_frames_removed(f,*args,**kwds):\n ''\n\n\n\n\n\n \n return f(*args,**kwds)\n \n \n \n \n\"\"\"Magic word to reject .pyc files generated by other Python versions.\nIt should change for each incompatible change to the bytecode.\n\nThe value of CR and LF is incorporated so if you ever read or write\na .pyc file in text mode the magic number will be wrong; also, the\nApple MPW compiler swaps their values, botching string constants.\n\nThe magic numbers must be spaced apart at least 2 values, as the\n-U interpeter flag will cause MAGIC+1 being used. They have been\nodd numbers for some time now.\n\nThere were a variety of old schemes for setting the magic number.\nThe current working scheme is to increment the previous value by\n10.\n\nStarting with the adoption of PEP 3147 in Python 3.2, every bump in magic\nnumber also includes a new \"magic tag\", i.e. a human readable string used\nto represent the magic number in __pycache__ directories.  When you change\nthe magic number, you must also set a new unique magic tag.  Generally this\ncan be named after the Python major version of the magic number bump, but\nit can really be anything, as long as it's different than anything else\nthat's come before.  The tags are included in the following table, starting\nwith Python 3.2a0.\n\nKnown values:\n Python 1.5:   20121\n Python 1.5.1: 20121\n    Python 1.5.2: 20121\n    Python 1.6:   50428\n    Python 2.0:   50823\n    Python 2.0.1: 50823\n    Python 2.1:   60202\n    Python 2.1.1: 60202\n    Python 2.1.2: 60202\n    Python 2.2:   60717\n    Python 2.3a0: 62011\n    Python 2.3a0: 62021\n    Python 2.3a0: 62011 (!)\n    Python 2.4a0: 62041\n    Python 2.4a3: 62051\n    Python 2.4b1: 62061\n    Python 2.5a0: 62071\n    Python 2.5a0: 62081 (ast-branch)\n    Python 2.5a0: 62091 (with)\n    Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)\n    Python 2.5b3: 62101 (fix wrong code: for x, in ...)\n    Python 2.5b3: 62111 (fix wrong code: x += yield)\n    Python 2.5c1: 62121 (fix wrong lnotab with for loops and\n                         storing constants that should have been removed)\n    Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)\n    Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)\n    Python 2.6a1: 62161 (WITH_CLEANUP optimization)\n    Python 3000:   3000\n                   3010 (removed UNARY_CONVERT)\n                   3020 (added BUILD_SET)\n                   3030 (added keyword-only parameters)\n                   3040 (added signature annotations)\n                   3050 (print becomes a function)\n                   3060 (PEP 3115 metaclass syntax)\n                   3061 (string literals become unicode)\n                   3071 (PEP 3109 raise changes)\n                   3081 (PEP 3137 make __file__ and __name__ unicode)\n                   3091 (kill str8 interning)\n                   3101 (merge from 2.6a0, see 62151)\n                   3103 (__file__ points to source file)\n    Python 3.0a4: 3111 (WITH_CLEANUP optimization).\n    Python 3.0a5: 3131 (lexical exception stacking, including POP_EXCEPT)\n    Python 3.1a0: 3141 (optimize list, set and dict comprehensions:\n            change LIST_APPEND and SET_ADD, add MAP_ADD)\n    Python 3.1a0: 3151 (optimize conditional branches:\n            introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)\n    Python 3.2a0: 3160 (add SETUP_WITH)\n                  tag: cpython-32\n    Python 3.2a1: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR)\n                  tag: cpython-32\n    Python 3.2a2  3180 (add DELETE_DEREF)\n    Python 3.3a0  3190 __class__ super closure changed\n    Python 3.3a0  3200 (__qualname__ added)\n                     3210 (added size modulo 2**32 to the pyc header)\n    Python 3.3a1  3220 (changed PEP 380 implementation)\n    Python 3.3a4  3230 (revert changes to implicit __class__ closure)\n\nMAGIC must change whenever the bytecode emitted by the compiler may no\nlonger be understood by older implementations of the eval loop (usually\ndue to the addition of new opcodes).\n\n\"\"\"\n_RAW_MAGIC_NUMBER=3230 |ord('\\r')<<16 |ord('\\n')<<24\n_MAGIC_BYTES=bytes(_RAW_MAGIC_NUMBER >>n&0xff for n in range(0,25,8))\n\n_PYCACHE='__pycache__'\n\nSOURCE_SUFFIXES=['.py']\n\nDEBUG_BYTECODE_SUFFIXES=['.pyc']\nOPTIMIZED_BYTECODE_SUFFIXES=['.pyo']\n\ndef cache_from_source(path,debug_override=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n \n debug=not sys.flags.optimize if debug_override is None else debug_override\n if debug:\n  suffixes=DEBUG_BYTECODE_SUFFIXES\n else :\n  suffixes=OPTIMIZED_BYTECODE_SUFFIXES\n head,tail=_path_split(path)\n base_filename,sep,_=tail.partition('.')\n tag=sys.implementation.cache_tag\n if tag is None :\n  raise NotImplementedError('sys.implementation.cache_tag is None')\n filename=''.join([base_filename,sep,tag,suffixes[0]])\n return _path_join(head,_PYCACHE,filename)\n \n \ndef source_from_cache(path):\n ''\n\n\n\n\n\n\n \n if sys.implementation.cache_tag is None :\n  raise NotImplementedError('sys.implementation.cache_tag is None')\n head,pycache_filename=_path_split(path)\n head,pycache=_path_split(head)\n if pycache !=_PYCACHE:\n  raise ValueError('{} not bottom-level directory in '\n  '{!r}'.format(_PYCACHE,path))\n if pycache_filename.count('.')!=2:\n  raise ValueError('expected only 2 dots in '\n  '{!r}'.format(pycache_filename))\n base_filename=pycache_filename.partition('.')[0]\n return _path_join(head,base_filename+SOURCE_SUFFIXES[0])\n \n \ndef _get_sourcefile(bytecode_path):\n ''\n\n\n\n\n \n if len(bytecode_path)==0:\n  return None\n rest,_,extension=bytecode_path.rpartition('.')\n if not rest or extension.lower()[-3:-1]!='py':\n  return bytecode_path\n try :\n  source_path=source_from_cache(bytecode_path)\n except (NotImplementedError,ValueError):\n  source_path=bytecode_path[:-1]\n return source_path if _path_isfile(source_path)else bytecode_path\n \n \ndef _verbose_message(message,*args,verbosity=1):\n ''\n if sys.flags.verbose >=verbosity:\n  if not message.startswith(('#','import ')):\n   message='# '+message\n  print(message.format(*args),file=sys.stderr)\n  \n  \ndef set_package(fxn):\n ''\n def set_package_wrapper(*args,**kwargs):\n  module=fxn(*args,**kwargs)\n  if getattr(module,'__package__',None )is None :\n   module.__package__=module.__name__\n   if not hasattr(module,'__path__'):\n    module.__package__=module.__package__.rpartition('.')[0]\n  return module\n _wrap(set_package_wrapper,fxn)\n return set_package_wrapper\n \n \ndef set_loader(fxn):\n ''\n def set_loader_wrapper(self,*args,**kwargs):\n  module=fxn(self,*args,**kwargs)\n  if not hasattr(module,'__loader__'):\n   module.__loader__=self\n  return module\n _wrap(set_loader_wrapper,fxn)\n return set_loader_wrapper\n \n \ndef module_for_loader(fxn):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def module_for_loader_wrapper(self,fullname,*args,**kwargs):\n  module=sys.modules.get(fullname)\n  is_reload=module is not None\n  if not is_reload:\n  \n  \n  \n   module=new_module(fullname)\n   \n   \n   module.__initializing__=True\n   sys.modules[fullname]=module\n   module.__loader__=self\n   try :\n    is_package=self.is_package(fullname)\n   except (ImportError,AttributeError):\n    pass\n   else :\n    if is_package:\n     module.__package__=fullname\n    else :\n     module.__package__=fullname.rpartition('.')[0]\n  else :\n   module.__initializing__=True\n  try :\n  \n   return fxn(self,module,*args,**kwargs)\n  except :\n   if not is_reload:\n    del sys.modules[fullname]\n   raise\n  finally :\n   module.__initializing__=False\n _wrap(module_for_loader_wrapper,fxn)\n return module_for_loader_wrapper\n \n \ndef _check_name(method):\n ''\n\n\n\n\n\n \n def _check_name_wrapper(self,name=None ,*args,**kwargs):\n  if name is None :\n   name=self.name\n  elif self.name !=name:\n   raise ImportError(\"loader cannot handle %s\"%name,name=name)\n  return method(self,name,*args,**kwargs)\n _wrap(_check_name_wrapper,method)\n return _check_name_wrapper\n \n \ndef _requires_builtin(fxn):\n ''\n def _requires_builtin_wrapper(self,fullname):\n  if fullname not in sys.builtin_module_names:\n   raise ImportError(\"{} is not a built-in module\".format(fullname),\n   name=fullname)\n  return fxn(self,fullname)\n _wrap(_requires_builtin_wrapper,fxn)\n return _requires_builtin_wrapper\n \n \ndef _requires_frozen(fxn):\n ''\n def _requires_frozen_wrapper(self,fullname):\n  if not _imp.is_frozen(fullname):\n   raise ImportError(\"{} is not a frozen module\".format(fullname),\n   name=fullname)\n  return fxn(self,fullname)\n _wrap(_requires_frozen_wrapper,fxn)\n return _requires_frozen_wrapper\n \n \ndef _find_module_shim(self,fullname):\n ''\n \n \n \n \n loader,portions=self.find_loader(fullname)\n if loader is None and len(portions):\n  msg=\"Not importing directory {}: missing __init__\"\n  _warnings.warn(msg.format(portions[0]),ImportWarning)\n return loader\n \n \n \n \n \n \nclass BuiltinImporter:\n\n ''\n\n\n\n\n \n \n @classmethod\n def module_repr(cls,module):\n  return\"<module '{}' (built-in)>\".format(module.__name__)\n  \n @classmethod\n def find_module(cls,fullname,path=None ):\n  ''\n\n\n\n  \n  if path is not None :\n   return None\n  return cls if _imp.is_builtin(fullname)else None\n  \n @classmethod\n @set_package\n @set_loader\n @_requires_builtin\n def load_module(cls,fullname):\n  ''\n  is_reload=fullname in sys.modules\n  try :\n   return _call_with_frames_removed(_imp.init_builtin,fullname)\n  except :\n   if not is_reload and fullname in sys.modules:\n    del sys.modules[fullname]\n   raise\n   \n @classmethod\n @_requires_builtin\n def get_code(cls,fullname):\n  ''\n  return None\n  \n @classmethod\n @_requires_builtin\n def get_source(cls,fullname):\n  ''\n  return None\n  \n @classmethod\n @_requires_builtin\n def is_package(cls,fullname):\n  ''\n  return False\n  \n  \nclass FrozenImporter:\n\n ''\n\n\n\n\n \n \n @classmethod\n def module_repr(cls,m):\n  return\"<module '{}' (frozen)>\".format(m.__name__)\n  \n @classmethod\n def find_module(cls,fullname,path=None ):\n  ''\n  return cls if _imp.is_frozen(fullname)else None\n  \n @classmethod\n @set_package\n @set_loader\n @_requires_frozen\n def load_module(cls,fullname):\n  ''\n  is_reload=fullname in sys.modules\n  try :\n   m=_call_with_frames_removed(_imp.init_frozen,fullname)\n   \n   del m.__file__\n   return m\n  except :\n   if not is_reload and fullname in sys.modules:\n    del sys.modules[fullname]\n   raise\n   \n @classmethod\n @_requires_frozen\n def get_code(cls,fullname):\n  ''\n  return _imp.get_frozen_object(fullname)\n  \n @classmethod\n @_requires_frozen\n def get_source(cls,fullname):\n  ''\n  return None\n  \n @classmethod\n @_requires_frozen\n def is_package(cls,fullname):\n  ''\n  return _imp.is_frozen_package(fullname)\n  \n  \nclass WindowsRegistryFinder:\n\n ''\n \n \n REGISTRY_KEY=(\n \"Software\\\\Python\\\\PythonCore\\\\{sys_version}\"\n \"\\\\Modules\\\\{fullname}\")\n REGISTRY_KEY_DEBUG=(\n \"Software\\\\Python\\\\PythonCore\\\\{sys_version}\"\n \"\\\\Modules\\\\{fullname}\\\\Debug\")\n DEBUG_BUILD=False\n \n @classmethod\n def _open_registry(cls,key):\n  try :\n   return _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,key)\n  except WindowsError:\n   return _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,key)\n   \n @classmethod\n def _search_registry(cls,fullname):\n  if cls.DEBUG_BUILD:\n   registry_key=cls.REGISTRY_KEY_DEBUG\n  else :\n   registry_key=cls.REGISTRY_KEY\n  key=registry_key.format(fullname=fullname,\n  sys_version=sys.version[:3])\n  try :\n   with cls._open_registry(key)as hkey:\n    filepath=_winreg.QueryValue(hkey,\"\")\n  except WindowsError:\n   return None\n  return filepath\n  \n @classmethod\n def find_module(cls,fullname,path=None ):\n  ''\n  filepath=cls._search_registry(fullname)\n  if filepath is None :\n   return None\n  try :\n   _os.stat(filepath)\n  except OSError:\n   return None\n  for loader,suffixes in _get_supported_file_loaders():\n   if filepath.endswith(tuple(suffixes)):\n    return loader(fullname,filepath)\n    \n    \nclass _LoaderBasics:\n\n ''\n \n \n def is_package(self,fullname):\n  ''\n  \n  filename=_path_split(self.get_filename(fullname))[1]\n  filename_base=filename.rsplit('.',1)[0]\n  tail_name=fullname.rpartition('.')[2]\n  return filename_base =='__init__'and tail_name !='__init__'\n  \n def _bytes_from_bytecode(self,fullname,data,bytecode_path,source_stats):\n  ''\n\n\n\n\n  \n  magic=data[:4]\n  raw_timestamp=data[4:8]\n  raw_size=data[8:12]\n  if magic !=_MAGIC_BYTES:\n   msg='bad magic number in {!r}: {!r}'.format(fullname,magic)\n   _verbose_message(msg)\n   raise ImportError(msg,name=fullname,path=bytecode_path)\n  elif len(raw_timestamp)!=4:\n   message='bad timestamp in {}'.format(fullname)\n   _verbose_message(message)\n   raise EOFError(message)\n  elif len(raw_size)!=4:\n   message='bad size in {}'.format(fullname)\n   _verbose_message(message)\n   raise EOFError(message)\n  if source_stats is not None :\n   try :\n    source_mtime=int(source_stats['mtime'])\n   except KeyError:\n    pass\n   else :\n    if _r_long(raw_timestamp)!=source_mtime:\n     message='bytecode is stale for {}'.format(fullname)\n     _verbose_message(message)\n     raise ImportError(message,name=fullname,\n     path=bytecode_path)\n   try :\n    source_size=source_stats['size']&0xFFFFFFFF\n   except KeyError:\n    pass\n   else :\n    if _r_long(raw_size)!=source_size:\n     raise ImportError(\n     \"bytecode is stale for {}\".format(fullname),\n     name=fullname,path=bytecode_path)\n     \n     \n  return data[12:]\n  \n @module_for_loader\n def _load_module(self,module,*,sourceless=False ):\n  ''\n  \n  name=module.__name__\n  code_object=self.get_code(name)\n  module.__file__=self.get_filename(name)\n  if not sourceless:\n   try :\n    module.__cached__=cache_from_source(module.__file__)\n   except NotImplementedError:\n    module.__cached__=module.__file__\n  else :\n   module.__cached__=module.__file__\n  module.__package__=name\n  if self.is_package(name):\n   module.__path__=[_path_split(module.__file__)[0]]\n  else :\n   module.__package__=module.__package__.rpartition('.')[0]\n  module.__loader__=self\n  _call_with_frames_removed(exec,code_object,module.__dict__)\n  return module\n  \n  \nclass SourceLoader(_LoaderBasics):\n\n def path_mtime(self,path):\n  ''\n\n  \n  raise NotImplementedError\n  \n def path_stats(self,path):\n  ''\n\n\n\n\n\n\n\n  \n  return {'mtime':self.path_mtime(path)}\n  \n def _cache_bytecode(self,source_path,cache_path,data):\n  ''\n\n\n\n\n  \n  \n  return self.set_data(cache_path,data)\n  \n def set_data(self,path,data):\n  ''\n\n\n\n  \n  raise NotImplementedError\n  \n  \n def get_source(self,fullname):\n  ''\n  import tokenize\n  path=self.get_filename(fullname)\n  try :\n   source_bytes=self.get_data(path)\n  except IOError as exc:\n   raise ImportError(\"source not available through get_data()\",\n   name=fullname)from exc\n  readsource=_io.BytesIO(source_bytes).readline\n  try :\n   encoding=tokenize.detect_encoding(readsource)\n  except SyntaxError as exc:\n   raise ImportError(\"Failed to detect encoding\",\n   name=fullname)from exc\n  newline_decoder=_io.IncrementalNewlineDecoder(None ,True )\n  try :\n   return newline_decoder.decode(source_bytes.decode(encoding[0]))\n  except UnicodeDecodeError as exc:\n   raise ImportError(\"Failed to decode source file\",\n   name=fullname)from exc\n   \n def get_code(self,fullname):\n  ''\n\n\n\n\n  \n  source_path=self.get_filename(fullname)\n  source_mtime=None\n  try :\n   bytecode_path=cache_from_source(source_path)\n  except NotImplementedError:\n   bytecode_path=None\n  else :\n   try :\n    st=self.path_stats(source_path)\n   except NotImplementedError:\n    pass\n   else :\n    source_mtime=int(st['mtime'])\n    try :\n     data=self.get_data(bytecode_path)\n    except IOError:\n     pass\n    else :\n     try :\n      bytes_data=self._bytes_from_bytecode(fullname,data,\n      bytecode_path,\n      st)\n     except (ImportError,EOFError):\n      pass\n     else :\n      _verbose_message('{} matches {}',bytecode_path,\n      source_path)\n      found=marshal.loads(bytes_data)\n      if isinstance(found,_code_type):\n       _imp._fix_co_filename(found,source_path)\n       _verbose_message('code object from {}',\n       bytecode_path)\n       return found\n      else :\n       msg=\"Non-code object in {}\"\n       raise ImportError(msg.format(bytecode_path),\n       name=fullname,path=bytecode_path)\n  source_bytes=self.get_data(source_path)\n  code_object=_call_with_frames_removed(compile,\n  source_bytes,source_path,'exec',\n  dont_inherit=True )\n  _verbose_message('code object from {}',source_path)\n  if (not sys.dont_write_bytecode and bytecode_path is not None and\n  source_mtime is not None ):\n   data=bytearray(_MAGIC_BYTES)\n   data.extend(_w_long(source_mtime))\n   data.extend(_w_long(len(source_bytes)))\n   data.extend(marshal.dumps(code_object))\n   try :\n    self._cache_bytecode(source_path,bytecode_path,data)\n    _verbose_message('wrote {!r}',bytecode_path)\n   except NotImplementedError:\n    pass\n  return code_object\n  \n def load_module(self,fullname):\n  ''\n\n\n\n\n\n  \n  return self._load_module(fullname)\n  \n  \nclass FileLoader:\n\n ''\n \n \n def __init__(self,fullname,path):\n  ''\n  \n  self.name=fullname\n  self.path=path\n  \n @_check_name\n def load_module(self,fullname):\n  ''\n  \n  \n  return super(FileLoader,self).load_module(fullname)\n  \n @_check_name\n def get_filename(self,fullname):\n  ''\n  return self.path\n  \n def get_data(self,path):\n  ''\n  with _io.FileIO(path,'r')as file:\n   return file.read()\n   \n   \nclass SourceFileLoader(FileLoader,SourceLoader):\n\n ''\n \n def path_stats(self,path):\n  ''\n  st=_os.stat(path)\n  return {'mtime':st.st_mtime,'size':st.st_size}\n  \n def _cache_bytecode(self,source_path,bytecode_path,data):\n \n  try :\n   mode=_os.stat(source_path).st_mode\n  except OSError:\n   mode=0o666\n   \n   \n  mode |=0o200\n  return self.set_data(bytecode_path,data,_mode=mode)\n  \n def set_data(self,path,data,*,_mode=0o666):\n  ''\n  parent,filename=_path_split(path)\n  path_parts=[]\n  \n  while parent and not _path_isdir(parent):\n   parent,part=_path_split(parent)\n   path_parts.append(part)\n   \n  for part in reversed(path_parts):\n   parent=_path_join(parent,part)\n   try :\n    _os.mkdir(parent)\n   except FileExistsError:\n   \n    continue\n   except OSError as exc:\n   \n   \n    _verbose_message('could not create {!r}: {!r}',parent,exc)\n    return\n  try :\n   _write_atomic(path,data,_mode)\n   _verbose_message('created {!r}',path)\n  except OSError as exc:\n  \n   _verbose_message('could not create {!r}: {!r}',path,exc)\n   \n   \nclass SourcelessFileLoader(FileLoader,_LoaderBasics):\n\n ''\n \n def load_module(self,fullname):\n  return self._load_module(fullname,sourceless=True )\n  \n def get_code(self,fullname):\n  path=self.get_filename(fullname)\n  data=self.get_data(path)\n  bytes_data=self._bytes_from_bytecode(fullname,data,path,None )\n  found=marshal.loads(bytes_data)\n  if isinstance(found,_code_type):\n   _verbose_message('code object from {!r}',path)\n   return found\n  else :\n   raise ImportError(\"Non-code object in {}\".format(path),\n   name=fullname,path=path)\n   \n def get_source(self,fullname):\n  ''\n  return None\n  \n  \n  \nEXTENSION_SUFFIXES=[]\n\n\nclass ExtensionFileLoader:\n\n ''\n\n\n\n \n \n def __init__(self,name,path):\n  self.name=name\n  self.path=path\n  \n @_check_name\n @set_package\n @set_loader\n def load_module(self,fullname):\n  ''\n  is_reload=fullname in sys.modules\n  try :\n   module=_call_with_frames_removed(_imp.load_dynamic,\n   fullname,self.path)\n   _verbose_message('extension module loaded from {!r}',self.path)\n   if self.is_package(fullname)and not hasattr(module,'__path__'):\n    module.__path__=[_path_split(self.path)[0]]\n   return module\n  except :\n   if not is_reload and fullname in sys.modules:\n    del sys.modules[fullname]\n   raise\n   \n def is_package(self,fullname):\n  ''\n  file_name=_path_split(self.path)[1]\n  return any(file_name =='__init__'+suffix\n  for suffix in EXTENSION_SUFFIXES)\n  \n def get_code(self,fullname):\n  ''\n  return None\n  \n def get_source(self,fullname):\n  ''\n  return None\n  \n  \nclass _NamespacePath:\n ''\n\n\n\n \n \n def __init__(self,name,path,path_finder):\n  self._name=name\n  self._path=path\n  self._last_parent_path=tuple(self._get_parent_path())\n  self._path_finder=path_finder\n  \n def _find_parent_path_names(self):\n  ''\n  parent,dot,me=self._name.rpartition('.')\n  if dot =='':\n  \n   return'sys','path'\n   \n   \n  return parent,'__path__'\n  \n def _get_parent_path(self):\n  parent_module_name,path_attr_name=self._find_parent_path_names()\n  return getattr(sys.modules[parent_module_name],path_attr_name)\n  \n def _recalculate(self):\n \n  parent_path=tuple(self._get_parent_path())\n  if parent_path !=self._last_parent_path:\n   loader,new_path=self._path_finder(self._name,parent_path)\n   \n   \n   if loader is None :\n    self._path=new_path\n   self._last_parent_path=parent_path\n  return self._path\n  \n def __iter__(self):\n  return iter(self._recalculate())\n  \n def __len__(self):\n  return len(self._recalculate())\n  \n def __repr__(self):\n  return\"_NamespacePath({!r})\".format(self._path)\n  \n def __contains__(self,item):\n  return item in self._recalculate()\n  \n def append(self,item):\n  self._path.append(item)\n  \n  \nclass NamespaceLoader:\n def __init__(self,name,path,path_finder):\n  self._path=_NamespacePath(name,path,path_finder)\n  \n @classmethod\n def module_repr(cls,module):\n  return\"<module '{}' (namespace)>\".format(module.__name__)\n  \n @module_for_loader\n def load_module(self,module):\n  ''\n  _verbose_message('namespace module loaded with path {!r}',self._path)\n  module.__path__=self._path\n  return module\n  \n  \n  \n  \nclass PathFinder:\n\n ''\n \n @classmethod\n def invalidate_caches(cls):\n  ''\n  \n  for finder in sys.path_importer_cache.values():\n   if hasattr(finder,'invalidate_caches'):\n    finder.invalidate_caches()\n    \n @classmethod\n def _path_hooks(cls,path):\n  ''\n\n\n\n  \n  if not sys.path_hooks:\n   _warnings.warn('sys.path_hooks is empty',ImportWarning)\n  for hook in sys.path_hooks:\n   try :\n    return hook(path)\n   except ImportError:\n    continue\n  else :\n   return None\n   \n @classmethod\n def _path_importer_cache(cls,path):\n  ''\n\n\n\n\n  \n  if path =='':\n   path='.'\n  try :\n   finder=sys.path_importer_cache[path]\n  except KeyError:\n   finder=cls._path_hooks(path)\n   sys.path_importer_cache[path]=finder\n  return finder\n  \n @classmethod\n def _get_loader(cls,fullname,path):\n  ''\n  \n  \n  namespace_path=[]\n  for entry in path:\n   if not isinstance(entry,(str,bytes)):\n    continue\n   finder=cls._path_importer_cache(entry)\n   if finder is not None :\n    if hasattr(finder,'find_loader'):\n     loader,portions=finder.find_loader(fullname)\n    else :\n     loader=finder.find_module(fullname)\n     portions=[]\n    if loader is not None :\n    \n     return loader,namespace_path\n     \n     \n     \n     \n    namespace_path.extend(portions)\n  else :\n   return None ,namespace_path\n   \n @classmethod\n def find_module(cls,fullname,path=None ):\n  ''\n  \n  if path is None :\n   path=sys.path\n  loader,namespace_path=cls._get_loader(fullname,path)\n  if loader is not None :\n   return loader\n  else :\n   if namespace_path:\n   \n   \n    return NamespaceLoader(fullname,namespace_path,cls._get_loader)\n   else :\n    return None\n    \n    \nclass FileFinder:\n\n ''\n\n\n\n\n \n \n def __init__(self,path,*loader_details):\n  ''\n\n  \n  loaders=[]\n  for loader,suffixes in loader_details:\n   loaders.extend((suffix,loader)for suffix in suffixes)\n  self._loaders=loaders\n  \n  self.path=path or'.'\n  self._path_mtime=-1\n  self._path_cache=set()\n  self._relaxed_path_cache=set()\n  \n def invalidate_caches(self):\n  ''\n  self._path_mtime=-1\n  \n find_module=_find_module_shim\n \n def find_loader(self,fullname):\n  ''\n  \n  is_namespace=False\n  tail_module=fullname.rpartition('.')[2]\n  try :\n   mtime=_os.stat(self.path).st_mtime\n  except OSError:\n   mtime=-1\n  if mtime !=self._path_mtime:\n   self._fill_cache()\n   self._path_mtime=mtime\n   \n  if _relax_case():\n   cache=self._relaxed_path_cache\n   cache_module=tail_module.lower()\n  else :\n   cache=self._path_cache\n   cache_module=tail_module\n   \n  if cache_module in cache:\n   base_path=_path_join(self.path,tail_module)\n   if _path_isdir(base_path):\n    for suffix,loader in self._loaders:\n     init_filename='__init__'+suffix\n     full_path=_path_join(base_path,init_filename)\n     if _path_isfile(full_path):\n      return (loader(fullname,full_path),[base_path])\n    else :\n    \n    \n     is_namespace=True\n     \n  for suffix,loader in self._loaders:\n   full_path=_path_join(self.path,tail_module+suffix)\n   _verbose_message('trying {}'.format(full_path),verbosity=2)\n   if cache_module+suffix in cache:\n    if _path_isfile(full_path):\n     return (loader(fullname,full_path),[])\n  if is_namespace:\n   _verbose_message('possible namespace for {}'.format(base_path))\n   return (None ,[base_path])\n  return (None ,[])\n  \n def _fill_cache(self):\n  ''\n  path=self.path\n  try :\n   contents=_os.listdir(path)\n  except (FileNotFoundError,PermissionError,NotADirectoryError):\n  \n  \n   contents=[]\n   \n   \n  if not sys.platform.startswith('win'):\n   self._path_cache=set(contents)\n  else :\n  \n  \n  \n  \n  \n   lower_suffix_contents=set()\n   for item in contents:\n    name,dot,suffix=item.partition('.')\n    if dot:\n     new_name='{}.{}'.format(name,suffix.lower())\n    else :\n     new_name=name\n    lower_suffix_contents.add(new_name)\n   self._path_cache=lower_suffix_contents\n  if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS):\n   self._relaxed_path_cache=set(fn.lower()for fn in contents)\n   \n @classmethod\n def path_hook(cls,*loader_details):\n  ''\n\n\n\n\n\n\n  \n  def path_hook_for_FileFinder(path):\n   ''\n   if not _path_isdir(path):\n    raise ImportError(\"only directories are supported\",path=path)\n   return cls(path,*loader_details)\n   \n  return path_hook_for_FileFinder\n  \n def __repr__(self):\n  return\"FileFinder(%r)\"%(self.path,)\n  \n  \n  \n  \nclass _ImportLockContext:\n\n ''\n \n def __enter__(self):\n  ''\n  _imp.acquire_lock()\n  \n def __exit__(self,exc_type,exc_value,exc_traceback):\n  ''\n  _imp.release_lock()\n  \n  \ndef _resolve_name(name,package,level):\n ''\n bits=package.rsplit('.',level -1)\n if len(bits)<level:\n  raise ValueError('attempted relative import beyond top-level package')\n base=bits[0]\n return'{}.{}'.format(base,name)if name else base\n \n \ndef _find_module(name,path):\n ''\n if not sys.meta_path:\n  _warnings.warn('sys.meta_path is empty',ImportWarning)\n for finder in sys.meta_path:\n \n \n  loader=finder.find_module(name,path)\n  \n  if loader is not None :\n  \n   if name not in sys.modules:\n    return loader\n   else :\n    return sys.modules[name].__loader__\n else :\n  return None\n  \n  \ndef _sanity_check(name,package,level):\n ''\n if not isinstance(name,str):\n  raise TypeError(\"module name must be str, not {}\".format(type(name)))\n if level <0:\n  raise ValueError('level must be >= 0')\n if package:\n  if not isinstance(package,str):\n   raise TypeError(\"__package__ not set to a string\")\n  elif package not in sys.modules:\n   msg=(\"Parent module {!r} not loaded, cannot perform relative \"\n   \"import\")\n   raise SystemError(msg.format(package))\n if not name and level ==0:\n  raise ValueError(\"Empty module name\")\n  \n  \n_ERR_MSG='No module named {!r}'\n\ndef _find_and_load_unlocked(name,import_):\n path=None\n parent=name.rpartition('.')[0]\n if parent:\n  if parent not in sys.modules:\n   _call_with_frames_removed(import_,parent)\n   \n  if name in sys.modules:\n   return sys.modules[name]\n   \n  parent_module=sys.modules[parent]\n  try :\n   path=parent_module.__path__\n  except AttributeError:\n   msg=(_ERR_MSG+'; {} is not a package').format(name,parent)\n   raise ImportError(msg,name=name)\n loader=_find_module(name,path)\n if loader is None :\n  exc=ImportError(_ERR_MSG.format(name),name=name)\n  \n  \n  exc._not_found=True\n  raise exc\n elif name not in sys.modules:\n \n  loader.load_module(name)\n  _verbose_message('import {!r} # {!r}',name,loader)\n  \n module=sys.modules[name]\n if parent:\n \n  parent_module=sys.modules[parent]\n  setattr(parent_module,name.rpartition('.')[2],module)\n  \n if getattr(module,'__package__',None )is None :\n  try :\n   module.__package__=module.__name__\n   if not hasattr(module,'__path__'):\n    module.__package__=module.__package__.rpartition('.')[0]\n  except AttributeError:\n   pass\n   \n if not hasattr(module,'__loader__'):\n  try :\n   module.__loader__=loader\n  except AttributeError:\n   pass\n return module\n \n \ndef _find_and_load(name,import_):\n ''\n try :\n  lock=_get_module_lock(name)\n finally :\n  _imp.release_lock()\n lock.acquire()\n try :\n  return _find_and_load_unlocked(name,import_)\n finally :\n  lock.release()\n  \n  \ndef _gcd_import(name,package=None ,level=0):\n ''\n\n\n\n\n\n\n \n _sanity_check(name,package,level)\n if level >0:\n  name=_resolve_name(name,package,level)\n _imp.acquire_lock()\n if name not in sys.modules:\n  return _find_and_load(name,_gcd_import)\n module=sys.modules[name]\n if module is None :\n  _imp.release_lock()\n  message=(\"import of {} halted; \"\n  \"None in sys.modules\".format(name))\n  raise ImportError(message,name=name)\n _lock_unlock_module(name)\n return module\n \ndef _handle_fromlist(module,fromlist,import_):\n ''\n\n\n\n\n\n \n \n \n if hasattr(module,'__path__'):\n  if'*'in fromlist:\n   fromlist=list(fromlist)\n   fromlist.remove('*')\n   if hasattr(module,'__all__'):\n    fromlist.extend(module.__all__)\n  for x in fromlist:\n   if not hasattr(module,x):\n    from_name='{}.{}'.format(module.__name__,x)\n    try :\n     _call_with_frames_removed(import_,from_name)\n    except ImportError as exc:\n    \n    \n    \n    \n    \n     if getattr(exc,'_not_found',False ):\n      if exc.name ==from_name:\n       continue\n     raise\n return module\n \n \ndef _calc___package__(globals):\n ''\n\n\n\n\n \n package=globals.get('__package__')\n if package is None :\n  package=globals['__name__']\n  if'__path__'not in globals:\n   package=package.rpartition('.')[0]\n return package\n \n \ndef _get_supported_file_loaders():\n ''\n\n\n \n extensions=ExtensionFileLoader,_imp.extension_suffixes()\n source=SourceFileLoader,SOURCE_SUFFIXES\n bytecode=SourcelessFileLoader,BYTECODE_SUFFIXES\n return [extensions,source,bytecode]\n \n \ndef __import__(name,globals=None ,locals=None ,fromlist=(),level=0):\n ''\n\n\n\n\n\n\n\n\n \n if level ==0:\n  module=_gcd_import(name)\n else :\n  globals_=globals if globals is not None else {}\n  package=_calc___package__(globals_)\n  module=_gcd_import(name,package,level)\n if not fromlist:\n \n \n  if level ==0:\n   return _gcd_import(name.partition('.')[0])\n  elif not name:\n   return module\n  else :\n  \n  \n   cut_off=len(name)-len(name.partition('.')[0])\n   \n   \n   return sys.modules[module.__name__[:len(module.__name__)-cut_off]]\n else :\n  return _handle_fromlist(module,fromlist,_gcd_import)\n  \n  \n  \ndef _setup(sys_module,_imp_module):\n ''\n\n\n\n\n\n \n \n global _imp,sys,BYTECODE_SUFFIXES\n _imp=_imp_module\n sys=sys_module\n \n if sys.flags.optimize:\n  BYTECODE_SUFFIXES=OPTIMIZED_BYTECODE_SUFFIXES\n else :\n  BYTECODE_SUFFIXES=DEBUG_BYTECODE_SUFFIXES\n  \n module_type=type(sys)\n for name,module in sys.modules.items():\n  if isinstance(module,module_type):\n   if not hasattr(module,'__loader__'):\n    if name in sys.builtin_module_names:\n     module.__loader__=BuiltinImporter\n     \n     \n     \n     \n self_module=sys.modules[__name__]\n for builtin_name in ('_io','_warnings','builtins'):\n  if builtin_name not in sys.modules:\n   builtin_module=BuiltinImporter.load_module(builtin_name)\n  else :\n   builtin_module=sys.modules[builtin_name]\n  setattr(self_module,builtin_name,builtin_module)\n  \n os_details=('posix',['/']),('nt',['\\\\','/']),('os2',['\\\\','/'])\n for builtin_os,path_separators in os_details:\n \n  assert all(len(sep)==1 for sep in path_separators)\n  path_sep=path_separators[0]\n  if builtin_os in sys.modules:\n   os_module=sys.modules[builtin_os]\n   break\n  else :\n   try :\n    os_module=BuiltinImporter.load_module(builtin_os)\n    \n    if builtin_os =='os2'and'EMX GCC'in sys.version:\n     path_sep=path_separators[1]\n    break\n   except ImportError:\n    continue\n else :\n  raise ImportError('importlib requires posix or nt')\n  \n try :\n  thread_module=BuiltinImporter.load_module('_thread')\n except ImportError:\n \n  thread_module=None\n weakref_module=BuiltinImporter.load_module('_weakref')\n \n if builtin_os =='nt':\n  winreg_module=BuiltinImporter.load_module('winreg')\n  setattr(self_module,'_winreg',winreg_module)\n  \n setattr(self_module,'_os',os_module)\n setattr(self_module,'_thread',thread_module)\n setattr(self_module,'_weakref',weakref_module)\n setattr(self_module,'path_sep',path_sep)\n setattr(self_module,'path_separators',set(path_separators))\n \n setattr(self_module,'_relax_case',_make_relax_case())\n EXTENSION_SUFFIXES.extend(_imp.extension_suffixes())\n if builtin_os =='nt':\n  SOURCE_SUFFIXES.append('.pyw')\n  if'_d.pyd'in EXTENSION_SUFFIXES:\n   WindowsRegistryFinder.DEBUG_BUILD=True\n   \ndef _install(sys_module,_imp_module):\n ''\n _setup(sys_module,_imp_module)\n supported_loaders=_get_supported_file_loaders()\n sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders)])\n sys.meta_path.append(BuiltinImporter)\n sys.meta_path.append(FrozenImporter)\n if _os.__name__ =='nt':\n  sys.meta_path.append(WindowsRegistryFinder)\n sys.meta_path.append(PathFinder)\n"], "inspect": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__author__=('Ka-Ping Yee <ping@lfw.org>',\n'Yury Selivanov <yselivanov@sprymix.com>')\n\nimport imp\nimport importlib.machinery\nimport itertools\nimport linecache\nimport os\nimport re\nimport sys\nimport tokenize\nimport types\nimport warnings\nimport functools\nimport builtins\nfrom operator import attrgetter\nfrom collections import namedtuple,OrderedDict\n\n\n\n\ntry :\n from dis import COMPILER_FLAG_NAMES as _flag_names\nexcept ImportError:\n CO_OPTIMIZED,CO_NEWLOCALS=0x1,0x2\n CO_VARARGS,CO_VARKEYWORDS=0x4,0x8\n CO_NESTED,CO_GENERATOR,CO_NOFREE=0x10,0x20,0x40\nelse :\n mod_dict=globals()\n for k,v in _flag_names.items():\n  mod_dict[\"CO_\"+v]=k\n  \n  \nTPFLAGS_IS_ABSTRACT=1 <<20\n\n\ndef ismodule(object):\n ''\n\n\n\n\n \n return isinstance(object,types.ModuleType)\n \ndef isclass(object):\n ''\n\n\n\n \n return isinstance(object,type)\n \ndef ismethod(object):\n ''\n\n\n\n\n\n \n return isinstance(object,types.MethodType)\n \ndef ismethoddescriptor(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if isclass(object)or ismethod(object)or isfunction(object):\n \n  return False\n tp=type(object)\n return hasattr(tp,\"__get__\")and not hasattr(tp,\"__set__\")\n \ndef isdatadescriptor(object):\n ''\n\n\n\n\n\n \n if isclass(object)or ismethod(object)or isfunction(object):\n \n  return False\n tp=type(object)\n return hasattr(tp,\"__set__\")and hasattr(tp,\"__get__\")\n \nif hasattr(types,'MemberDescriptorType'):\n\n def ismemberdescriptor(object):\n  ''\n\n\n  \n  return isinstance(object,types.MemberDescriptorType)\nelse :\n\n def ismemberdescriptor(object):\n  ''\n\n\n  \n  return False\n  \nif hasattr(types,'GetSetDescriptorType'):\n\n def isgetsetdescriptor(object):\n  ''\n\n\n  \n  return isinstance(object,types.GetSetDescriptorType)\nelse :\n\n def isgetsetdescriptor(object):\n  ''\n\n\n  \n  return False\n  \ndef isfunction(object):\n ''\n\n\n\n\n\n\n\n\n \n return isinstance(object,types.FunctionType)\n \ndef isgeneratorfunction(object):\n ''\n\n\n\n \n return bool((isfunction(object)or ismethod(object))and\n object.__code__.co_flags&CO_GENERATOR)\n \ndef isgenerator(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n return isinstance(object,types.GeneratorType)\n \ndef istraceback(object):\n ''\n\n\n\n\n\n \n return isinstance(object,types.TracebackType)\n \ndef isframe(object):\n ''\n\n\n\n\n\n\n\n\n\n \n return isinstance(object,types.FrameType)\n \ndef iscode(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return isinstance(object,types.CodeType)\n \ndef isbuiltin(object):\n ''\n\n\n\n\n \n return isinstance(object,types.BuiltinFunctionType)\n \ndef isroutine(object):\n ''\n return (isbuiltin(object)\n or isfunction(object)\n or ismethod(object)\n or ismethoddescriptor(object))\n \ndef isabstract(object):\n ''\n return bool(isinstance(object,type)and object.__flags__&TPFLAGS_IS_ABSTRACT)\n \ndef getmembers(object,predicate=None ):\n ''\n \n if isclass(object):\n  mro=(object,)+getmro(object)\n else :\n  mro=()\n results=[]\n for key in dir(object):\n \n \n  for base in mro:\n   if key in base.__dict__:\n    value=base.__dict__[key]\n    break\n  else :\n   try :\n    value=getattr(object,key)\n   except AttributeError:\n    continue\n  if not predicate or predicate(value):\n   results.append((key,value))\n results.sort()\n return results\n \nAttribute=namedtuple('Attribute','name kind defining_class object')\n\ndef classify_class_attrs(cls):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n mro=getmro(cls)\n names=dir(cls)\n result=[]\n for name in names:\n \n \n \n \n \n \n  homecls=None\n  for base in (cls,)+mro:\n   if name in base.__dict__:\n    obj=base.__dict__[name]\n    homecls=base\n    break\n  else :\n   obj=getattr(cls,name)\n   homecls=getattr(obj,\"__objclass__\",homecls)\n   \n   \n  if isinstance(obj,staticmethod):\n   kind=\"static method\"\n  elif isinstance(obj,classmethod):\n   kind=\"class method\"\n  elif isinstance(obj,property):\n   kind=\"property\"\n  elif ismethoddescriptor(obj):\n   kind=\"method\"\n  elif isdatadescriptor(obj):\n   kind=\"data\"\n  else :\n   obj_via_getattr=getattr(cls,name)\n   if (isfunction(obj_via_getattr)or\n   ismethoddescriptor(obj_via_getattr)):\n    kind=\"method\"\n   else :\n    kind=\"data\"\n   obj=obj_via_getattr\n   \n  result.append(Attribute(name,kind,homecls,obj))\n  \n return result\n \n \n \ndef getmro(cls):\n ''\n return cls.__mro__\n \n \ndef indentsize(line):\n ''\n expline=line.expandtabs()\n return len(expline)-len(expline.lstrip())\n \ndef getdoc(object):\n ''\n\n\n\n \n try :\n  doc=object.__doc__\n except AttributeError:\n  return None\n if not isinstance(doc,str):\n  return None\n return cleandoc(doc)\n \ndef cleandoc(doc):\n ''\n\n\n \n try :\n  lines=doc.expandtabs().split('\\n')\n except UnicodeError:\n  return None\n else :\n \n  margin=sys.maxsize\n  for line in lines[1:]:\n   content=len(line.lstrip())\n   if content:\n    indent=len(line)-content\n    margin=min(margin,indent)\n    \n  if lines:\n   lines[0]=lines[0].lstrip()\n  if margin <sys.maxsize:\n   for i in range(1,len(lines)):lines[i]=lines[i][margin:]\n   \n  while lines and not lines[-1]:\n   lines.pop()\n  while lines and not lines[0]:\n   lines.pop(0)\n  return'\\n'.join(lines)\n  \ndef getfile(object):\n ''\n if ismodule(object):\n  if hasattr(object,'__file__'):\n   return object.__file__\n  raise TypeError('{!r} is a built-in module'.format(object))\n if isclass(object):\n  object=sys.modules.get(object.__module__)\n  if hasattr(object,'__file__'):\n   return object.__file__\n  raise TypeError('{!r} is a built-in class'.format(object))\n if ismethod(object):\n  object=object.__func__\n if isfunction(object):\n  object=object.__code__\n if istraceback(object):\n  object=object.tb_frame\n if isframe(object):\n  object=object.f_code\n if iscode(object):\n  return object.co_filename\n raise TypeError('{!r} is not a module, class, method, '\n 'function, traceback, frame, or code object'.format(object))\n \nModuleInfo=namedtuple('ModuleInfo','name suffix mode module_type')\n\ndef getmoduleinfo(path):\n ''\n warnings.warn('inspect.getmoduleinfo() is deprecated',DeprecationWarning,\n 2)\n filename=os.path.basename(path)\n suffixes=[(-len(suffix),suffix,mode,mtype)\n for suffix,mode,mtype in imp.get_suffixes()]\n suffixes.sort()\n for neglen,suffix,mode,mtype in suffixes:\n  if filename[neglen:]==suffix:\n   return ModuleInfo(filename[:neglen],suffix,mode,mtype)\n   \ndef getmodulename(path):\n ''\n fname=os.path.basename(path)\n \n suffixes=[(-len(suffix),suffix)\n for suffix in importlib.machinery.all_suffixes()]\n suffixes.sort()\n for neglen,suffix in suffixes:\n  if fname.endswith(suffix):\n   return fname[:neglen]\n return None\n \ndef getsourcefile(object):\n ''\n\n \n filename=getfile(object)\n all_bytecode_suffixes=importlib.machinery.DEBUG_BYTECODE_SUFFIXES[:]\n all_bytecode_suffixes +=importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES[:]\n if any(filename.endswith(s)for s in all_bytecode_suffixes):\n  filename=(os.path.splitext(filename)[0]+\n  importlib.machinery.SOURCE_SUFFIXES[0])\n elif any(filename.endswith(s)for s in\n importlib.machinery.EXTENSION_SUFFIXES):\n  return None\n if os.path.exists(filename):\n  return filename\n  \n if hasattr(getmodule(object,filename),'__loader__'):\n  return filename\n  \n if filename in linecache.cache:\n  return filename\n  \ndef getabsfile(object,_filename=None ):\n ''\n\n\n \n if _filename is None :\n  _filename=getsourcefile(object)or getfile(object)\n return os.path.normcase(os.path.abspath(_filename))\n \nmodulesbyfile={}\n_filesbymodname={}\n\ndef getmodule(object,_filename=None ):\n ''\n if ismodule(object):\n  return object\n if hasattr(object,'__module__'):\n  return sys.modules.get(object.__module__)\n  \n if _filename is not None and _filename in modulesbyfile:\n  return sys.modules.get(modulesbyfile[_filename])\n  \n try :\n  file=getabsfile(object,_filename)\n except TypeError:\n  return None\n if file in modulesbyfile:\n  return sys.modules.get(modulesbyfile[file])\n  \n  \n for modname,module in list(sys.modules.items()):\n  if ismodule(module)and hasattr(module,'__file__'):\n   f=module.__file__\n   if f ==_filesbymodname.get(modname,None ):\n   \n    continue\n   _filesbymodname[modname]=f\n   f=getabsfile(module)\n   \n   modulesbyfile[f]=modulesbyfile[\n   os.path.realpath(f)]=module.__name__\n if file in modulesbyfile:\n  return sys.modules.get(modulesbyfile[file])\n  \n main=sys.modules['__main__']\n if not hasattr(object,'__name__'):\n  return None\n if hasattr(main,object.__name__):\n  mainobject=getattr(main,object.__name__)\n  if mainobject is object:\n   return main\n   \n builtin=sys.modules['builtins']\n if hasattr(builtin,object.__name__):\n  builtinobject=getattr(builtin,object.__name__)\n  if builtinobject is object:\n   return builtin\n   \ndef findsource(object):\n ''\n\n\n\n\n \n \n file=getfile(object)\n sourcefile=getsourcefile(object)\n if not sourcefile and file[:1]+file[-1:]!='<>':\n  raise IOError('source code not available')\n file=sourcefile if sourcefile else file\n \n module=getmodule(object,file)\n if module:\n  lines=linecache.getlines(file,module.__dict__)\n else :\n  lines=linecache.getlines(file)\n if not lines:\n  raise IOError('could not get source code')\n  \n if ismodule(object):\n  return lines,0\n  \n if isclass(object):\n  name=object.__name__\n  pat=re.compile(r'^(\\s*)class\\s*'+name+r'\\b')\n  \n  \n  \n  candidates=[]\n  for i in range(len(lines)):\n   match=pat.match(lines[i])\n   if match:\n   \n    if lines[i][0]=='c':\n     return lines,i\n     \n    candidates.append((match.group(1),i))\n  if candidates:\n  \n  \n   candidates.sort()\n   return lines,candidates[0][1]\n  else :\n   raise IOError('could not find class definition')\n   \n if ismethod(object):\n  object=object.__func__\n if isfunction(object):\n  object=object.__code__\n if istraceback(object):\n  object=object.tb_frame\n if isframe(object):\n  object=object.f_code\n if iscode(object):\n  if not hasattr(object,'co_firstlineno'):\n   raise IOError('could not find function definition')\n  lnum=object.co_firstlineno -1\n  pat=re.compile(r'^(\\s*def\\s)|(.*(?<!\\w)lambda(:|\\s))|^(\\s*@)')\n  while lnum >0:\n   if pat.match(lines[lnum]):break\n   lnum=lnum -1\n  return lines,lnum\n raise IOError('could not find code object')\n \ndef getcomments(object):\n ''\n\n\n \n try :\n  lines,lnum=findsource(object)\n except (IOError,TypeError):\n  return None\n  \n if ismodule(object):\n \n  start=0\n  if lines and lines[0][:2]=='#!':start=1\n  while start <len(lines)and lines[start].strip()in ('','#'):\n   start=start+1\n  if start <len(lines)and lines[start][:1]=='#':\n   comments=[]\n   end=start\n   while end <len(lines)and lines[end][:1]=='#':\n    comments.append(lines[end].expandtabs())\n    end=end+1\n   return''.join(comments)\n   \n   \n elif lnum >0:\n  indent=indentsize(lines[lnum])\n  end=lnum -1\n  if end >=0 and lines[end].lstrip()[:1]=='#'and  indentsize(lines[end])==indent:\n   comments=[lines[end].expandtabs().lstrip()]\n   if end >0:\n    end=end -1\n    comment=lines[end].expandtabs().lstrip()\n    while comment[:1]=='#'and indentsize(lines[end])==indent:\n     comments[:0]=[comment]\n     end=end -1\n     if end <0:break\n     comment=lines[end].expandtabs().lstrip()\n   while comments and comments[0].strip()=='#':\n    comments[:1]=[]\n   while comments and comments[-1].strip()=='#':\n    comments[-1:]=[]\n   return''.join(comments)\n   \nclass EndOfBlock(Exception):pass\n\nclass BlockFinder:\n ''\n def __init__(self):\n  self.indent=0\n  self.islambda=False\n  self.started=False\n  self.passline=False\n  self.last=1\n  \n def tokeneater(self,type,token,srowcol,erowcol,line):\n  if not self.started:\n  \n   if token in (\"def\",\"class\",\"lambda\"):\n    if token ==\"lambda\":\n     self.islambda=True\n    self.started=True\n   self.passline=True\n  elif type ==tokenize.NEWLINE:\n   self.passline=False\n   self.last=srowcol[0]\n   if self.islambda:\n    raise EndOfBlock\n  elif self.passline:\n   pass\n  elif type ==tokenize.INDENT:\n   self.indent=self.indent+1\n   self.passline=True\n  elif type ==tokenize.DEDENT:\n   self.indent=self.indent -1\n   \n   \n   \n   if self.indent <=0:\n    raise EndOfBlock\n  elif self.indent ==0 and type not in (tokenize.COMMENT,tokenize.NL):\n  \n  \n   raise EndOfBlock\n   \ndef getblock(lines):\n ''\n blockfinder=BlockFinder()\n try :\n  tokens=tokenize.generate_tokens(iter(lines).__next__)\n  for _token in tokens:\n   blockfinder.tokeneater(*_token)\n except (EndOfBlock,IndentationError):\n  pass\n return lines[:blockfinder.last]\n \ndef getsourcelines(object):\n ''\n\n\n\n\n\n \n lines,lnum=findsource(object)\n \n if ismodule(object):return lines,0\n else :return getblock(lines[lnum:]),lnum+1\n \ndef getsource(object):\n ''\n\n\n\n \n lines,lnum=getsourcelines(object)\n return''.join(lines)\n \n \ndef walktree(classes,children,parent):\n ''\n results=[]\n classes.sort(key=attrgetter('__module__','__name__'))\n for c in classes:\n  results.append((c,c.__bases__))\n  if c in children:\n   results.append(walktree(children[c],children,c))\n return results\n \ndef getclasstree(classes,unique=False ):\n ''\n\n\n\n\n\n\n \n children={}\n roots=[]\n for c in classes:\n  if c.__bases__:\n   for parent in c.__bases__:\n    if not parent in children:\n     children[parent]=[]\n    if c not in children[parent]:\n     children[parent].append(c)\n    if unique and parent in classes:break\n  elif c not in roots:\n   roots.append(c)\n for parent in children:\n  if parent not in classes:\n   roots.append(parent)\n return walktree(roots,children,None )\n \n \nArguments=namedtuple('Arguments','args, varargs, varkw')\n\ndef getargs(co):\n ''\n\n\n\n\n \n args,varargs,kwonlyargs,varkw=_getfullargs(co)\n return Arguments(args+kwonlyargs,varargs,varkw)\n \ndef _getfullargs(co):\n ''\n\n\n\n \n \n if not iscode(co):\n  raise TypeError('{!r} is not a code object'.format(co))\n  \n nargs=co.co_argcount\n names=co.co_varnames\n nkwargs=co.co_kwonlyargcount\n args=list(names[:nargs])\n kwonlyargs=list(names[nargs:nargs+nkwargs])\n step=0\n \n nargs +=nkwargs\n varargs=None\n if co.co_flags&CO_VARARGS:\n  varargs=co.co_varnames[nargs]\n  nargs=nargs+1\n varkw=None\n if co.co_flags&CO_VARKEYWORDS:\n  varkw=co.co_varnames[nargs]\n return args,varargs,kwonlyargs,varkw\n \n \nArgSpec=namedtuple('ArgSpec','args varargs keywords defaults')\n\ndef getargspec(func):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n args,varargs,varkw,defaults,kwonlyargs,kwonlydefaults,ann= getfullargspec(func)\n if kwonlyargs or ann:\n  raise ValueError(\"Function has keyword-only arguments or annotations\"\n  \", use getfullargspec() API which can support them\")\n return ArgSpec(args,varargs,varkw,defaults)\n \nFullArgSpec=namedtuple('FullArgSpec',\n'args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations')\n\ndef getfullargspec(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if ismethod(func):\n  func=func.__func__\n if not isfunction(func):\n  raise TypeError('{!r} is not a Python function'.format(func))\n args,varargs,kwonlyargs,varkw=_getfullargs(func.__code__)\n return FullArgSpec(args,varargs,varkw,func.__defaults__,\n kwonlyargs,func.__kwdefaults__,func.__annotations__)\n \nArgInfo=namedtuple('ArgInfo','args varargs keywords locals')\n\ndef getargvalues(frame):\n ''\n\n\n\n\n \n args,varargs,varkw=getargs(frame.f_code)\n return ArgInfo(args,varargs,varkw,frame.f_locals)\n \ndef formatannotation(annotation,base_module=None ):\n if isinstance(annotation,type):\n  if annotation.__module__ in ('builtins',base_module):\n   return annotation.__name__\n  return annotation.__module__+'.'+annotation.__name__\n return repr(annotation)\n \ndef formatannotationrelativeto(object):\n module=getattr(object,'__module__',None )\n def _formatannotation(annotation):\n  return formatannotation(annotation,module)\n return _formatannotation\n \n \ndef formatargspec(args,varargs=None ,varkw=None ,defaults=None ,\nkwonlyargs=(),kwonlydefaults={},annotations={},\nformatarg=str,\nformatvarargs=lambda name:'*'+name,\nformatvarkw=lambda name:'**'+name,\nformatvalue=lambda value:'='+repr(value),\nformatreturns=lambda text:' -> '+text,\nformatannotation=formatannotation):\n ''\n\n\n\n\n\n\n \n def formatargandannotation(arg):\n  result=formatarg(arg)\n  if arg in annotations:\n   result +=': '+formatannotation(annotations[arg])\n  return result\n specs=[]\n if defaults:\n  firstdefault=len(args)-len(defaults)\n for i,arg in enumerate(args):\n  spec=formatargandannotation(arg)\n  if defaults and i >=firstdefault:\n   spec=spec+formatvalue(defaults[i -firstdefault])\n  specs.append(spec)\n if varargs is not None :\n  specs.append(formatvarargs(formatargandannotation(varargs)))\n else :\n  if kwonlyargs:\n   specs.append('*')\n if kwonlyargs:\n  for kwonlyarg in kwonlyargs:\n   spec=formatargandannotation(kwonlyarg)\n   if kwonlydefaults and kwonlyarg in kwonlydefaults:\n    spec +=formatvalue(kwonlydefaults[kwonlyarg])\n   specs.append(spec)\n if varkw is not None :\n  specs.append(formatvarkw(formatargandannotation(varkw)))\n result='('+', '.join(specs)+')'\n if'return'in annotations:\n  result +=formatreturns(formatannotation(annotations['return']))\n return result\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \ndef _missing_arguments(f_name,argnames,pos,values):\n names=[repr(name)for name in argnames if name not in values]\n missing=len(names)\n if missing ==1:\n  s=names[0]\n elif missing ==2:\n  s=\"{} and {}\".format(*names)\n else :\n  tail=\", {} and {}\".format(names[-2:])\n  del names[-2:]\n  s=\", \".join(names)+tail\n raise TypeError(\"%s() missing %i required %s argument%s: %s\"%\n (f_name,missing,\n \"positional\"if pos else\"keyword-only\",\n \"\"if missing ==1 else\"s\",s))\n \ndef _too_many(f_name,args,kwonly,varargs,defcount,given,values):\n atleast=len(args)-defcount\n kwonly_given=len([arg for arg in kwonly if arg in values])\n if varargs:\n  plural=atleast !=1\n  sig=\"at least %d\"%(atleast,)\n elif defcount:\n  plural=True\n  sig=\"from %d to %d\"%(atleast,len(args))\n else :\n  plural=len(args)!=1\n  sig=str(len(args))\n kwonly_sig=\"\"\n if kwonly_given:\n  msg=\" positional argument%s (and %d keyword-only argument%s)\"\n  kwonly_sig=(msg %(\"s\"if given !=1 else\"\",kwonly_given,\n  \"s\"if kwonly_given !=1 else\"\"))\n raise TypeError(\"%s() takes %s positional argument%s but %d%s %s given\"%\n (f_name,sig,\"s\"if plural else\"\",given,kwonly_sig,\n \"was\"if given ==1 and not kwonly_given else\"were\"))\n \ndef getcallargs(func,*positional,**named):\n ''\n\n\n\n \n spec=getfullargspec(func)\n args,varargs,varkw,defaults,kwonlyargs,kwonlydefaults,ann=spec\n f_name=func.__name__\n arg2value={}\n \n \n if ismethod(func)and func.__self__ is not None :\n \n  positional=(func.__self__,)+positional\n num_pos=len(positional)\n num_args=len(args)\n num_defaults=len(defaults)if defaults else 0\n \n n=min(num_pos,num_args)\n for i in range(n):\n  arg2value[args[i]]=positional[i]\n if varargs:\n  arg2value[varargs]=tuple(positional[n:])\n possible_kwargs=set(args+kwonlyargs)\n if varkw:\n  arg2value[varkw]={}\n for kw,value in named.items():\n  if kw not in possible_kwargs:\n   if not varkw:\n    raise TypeError(\"%s() got an unexpected keyword argument %r\"%\n    (f_name,kw))\n   arg2value[varkw][kw]=value\n   continue\n  if kw in arg2value:\n   raise TypeError(\"%s() got multiple values for argument %r\"%\n   (f_name,kw))\n  arg2value[kw]=value\n if num_pos >num_args and not varargs:\n  _too_many(f_name,args,kwonlyargs,varargs,num_defaults,\n  num_pos,arg2value)\n if num_pos <num_args:\n  req=args[:num_args -num_defaults]\n  for arg in req:\n   if arg not in arg2value:\n    _missing_arguments(f_name,req,True ,arg2value)\n  for i,arg in enumerate(args[num_args -num_defaults:]):\n   if arg not in arg2value:\n    arg2value[arg]=defaults[i]\n missing=0\n for kwarg in kwonlyargs:\n  if kwarg not in arg2value:\n   if kwarg in kwonlydefaults:\n    arg2value[kwarg]=kwonlydefaults[kwarg]\n   else :\n    missing +=1\n if missing:\n  _missing_arguments(f_name,kwonlyargs,False ,arg2value)\n return arg2value\n \nClosureVars=namedtuple('ClosureVars','nonlocals globals builtins unbound')\n\ndef getclosurevars(func):\n ''\n\n\n\n\n\n \n \n if ismethod(func):\n  func=func.__func__\n  \n if not isfunction(func):\n  raise TypeError(\"'{!r}' is not a Python function\".format(func))\n  \n code=func.__code__\n \n \n if func.__closure__ is None :\n  nonlocal_vars={}\n else :\n  nonlocal_vars={\n  var:cell.cell_contents\n  for var,cell in zip(code.co_freevars,func.__closure__)\n  }\n  \n  \n  \n global_ns=func.__globals__\n builtin_ns=global_ns.get(\"__builtins__\",builtins.__dict__)\n if ismodule(builtin_ns):\n  builtin_ns=builtin_ns.__dict__\n global_vars={}\n builtin_vars={}\n unbound_names=set()\n for name in code.co_names:\n  if name in (\"None\",\"True\",\"False\"):\n  \n  \n   continue\n  try :\n   global_vars[name]=global_ns[name]\n  except KeyError:\n   try :\n    builtin_vars[name]=builtin_ns[name]\n   except KeyError:\n    unbound_names.add(name)\n    \n return ClosureVars(nonlocal_vars,global_vars,\n builtin_vars,unbound_names)\n \n \n \nTraceback=namedtuple('Traceback','filename lineno function code_context index')\n\ndef getframeinfo(frame,context=1):\n ''\n\n\n\n\n\n \n if istraceback(frame):\n  lineno=frame.tb_lineno\n  frame=frame.tb_frame\n else :\n  lineno=frame.f_lineno\n if not isframe(frame):\n  raise TypeError('{!r} is not a frame or traceback object'.format(frame))\n  \n filename=getsourcefile(frame)or getfile(frame)\n if context >0:\n  start=lineno -1 -context //2\n  try :\n   lines,lnum=findsource(frame)\n  except IOError:\n   lines=index=None\n  else :\n   start=max(start,1)\n   start=max(0,min(start,len(lines)-context))\n   lines=lines[start:start+context]\n   index=lineno -1 -start\n else :\n  lines=index=None\n  \n return Traceback(filename,lineno,frame.f_code.co_name,lines,index)\n \ndef getlineno(frame):\n ''\n \n return frame.f_lineno\n \ndef getouterframes(frame,context=1):\n ''\n\n\n \n framelist=[]\n while frame:\n  framelist.append((frame,)+getframeinfo(frame,context))\n  frame=frame.f_back\n return framelist\n \ndef getinnerframes(tb,context=1):\n ''\n\n\n \n framelist=[]\n while tb:\n  framelist.append((tb.tb_frame,)+getframeinfo(tb,context))\n  tb=tb.tb_next\n return framelist\n \ndef currentframe():\n ''\n return sys._getframe(1)if hasattr(sys,\"_getframe\")else None\n \ndef stack(context=1):\n ''\n return getouterframes(sys._getframe(1),context)\n \ndef trace(context=1):\n ''\n return getinnerframes(sys.exc_info()[2],context)\n \n \n \n \n_sentinel=object()\n\ndef _static_getmro(klass):\n return type.__dict__['__mro__'].__get__(klass)\n \ndef _check_instance(obj,attr):\n instance_dict={}\n try :\n  instance_dict=object.__getattribute__(obj,\"__dict__\")\n except AttributeError:\n  pass\n return dict.get(instance_dict,attr,_sentinel)\n \n \ndef _check_class(klass,attr):\n for entry in _static_getmro(klass):\n  if _shadowed_dict(type(entry))is _sentinel:\n   try :\n    return entry.__dict__[attr]\n   except KeyError:\n    pass\n return _sentinel\n \ndef _is_type(obj):\n try :\n  _static_getmro(obj)\n except TypeError:\n  return False\n return True\n \ndef _shadowed_dict(klass):\n dict_attr=type.__dict__[\"__dict__\"]\n for entry in _static_getmro(klass):\n  try :\n   class_dict=dict_attr.__get__(entry)[\"__dict__\"]\n  except KeyError:\n   pass\n  else :\n   if not (type(class_dict)is types.GetSetDescriptorType and\n   class_dict.__name__ ==\"__dict__\"and\n   class_dict.__objclass__ is entry):\n    return class_dict\n return _sentinel\n \ndef getattr_static(obj,attr,default=_sentinel):\n ''\n\n\n\n\n\n\n\n\n \n instance_result=_sentinel\n if not _is_type(obj):\n  klass=type(obj)\n  dict_attr=_shadowed_dict(klass)\n  if (dict_attr is _sentinel or\n  type(dict_attr)is types.MemberDescriptorType):\n   instance_result=_check_instance(obj,attr)\n else :\n  klass=obj\n  \n klass_result=_check_class(klass,attr)\n \n if instance_result is not _sentinel and klass_result is not _sentinel:\n  if (_check_class(type(klass_result),'__get__')is not _sentinel and\n  _check_class(type(klass_result),'__set__')is not _sentinel):\n   return klass_result\n   \n if instance_result is not _sentinel:\n  return instance_result\n if klass_result is not _sentinel:\n  return klass_result\n  \n if obj is klass:\n \n  for entry in _static_getmro(type(klass)):\n   if _shadowed_dict(type(entry))is _sentinel:\n    try :\n     return entry.__dict__[attr]\n    except KeyError:\n     pass\n if default is not _sentinel:\n  return default\n raise AttributeError(attr)\n \n \n \n \nGEN_CREATED='GEN_CREATED'\nGEN_RUNNING='GEN_RUNNING'\nGEN_SUSPENDED='GEN_SUSPENDED'\nGEN_CLOSED='GEN_CLOSED'\n\ndef getgeneratorstate(generator):\n ''\n\n\n\n\n\n\n \n if generator.gi_running:\n  return GEN_RUNNING\n if generator.gi_frame is None :\n  return GEN_CLOSED\n if generator.gi_frame.f_lasti ==-1:\n  return GEN_CREATED\n return GEN_SUSPENDED\n \n \ndef getgeneratorlocals(generator):\n ''\n\n\n\n \n \n if not isgenerator(generator):\n  raise TypeError(\"'{!r}' is not a Python generator\".format(generator))\n  \n frame=getattr(generator,\"gi_frame\",None )\n if frame is not None :\n  return generator.gi_frame.f_locals\n else :\n  return {}\n  \n  \n  \n  \n  \n  \n_WrapperDescriptor=type(type.__call__)\n_MethodWrapper=type(all.__call__)\n\n_NonUserDefinedCallables=(_WrapperDescriptor,\n_MethodWrapper,\ntypes.BuiltinFunctionType)\n\n\ndef _get_user_defined_method(cls,method_name):\n try :\n  meth=getattr(cls,method_name)\n except AttributeError:\n  return\n else :\n  if not isinstance(meth,_NonUserDefinedCallables):\n  \n  \n   return meth\n   \n   \ndef signature(obj):\n ''\n \n if not callable(obj):\n  raise TypeError('{!r} is not a callable object'.format(obj))\n  \n if isinstance(obj,types.MethodType):\n \n \n  sig=signature(obj.__func__)\n  return sig.replace(parameters=tuple(sig.parameters.values())[1:])\n  \n try :\n  sig=obj.__signature__\n except AttributeError:\n  pass\n else :\n  if sig is not None :\n   return sig\n   \n try :\n \n  wrapped=obj.__wrapped__\n except AttributeError:\n  pass\n else :\n  return signature(wrapped)\n  \n if isinstance(obj,types.FunctionType):\n  return Signature.from_function(obj)\n  \n if isinstance(obj,functools.partial):\n  sig=signature(obj.func)\n  \n  new_params=OrderedDict(sig.parameters.items())\n  \n  partial_args=obj.args or ()\n  partial_keywords=obj.keywords or {}\n  try :\n   ba=sig.bind_partial(*partial_args,**partial_keywords)\n  except TypeError as ex:\n   msg='partial object {!r} has incorrect arguments'.format(obj)\n   raise ValueError(msg)from ex\n   \n  for arg_name,arg_value in ba.arguments.items():\n   param=new_params[arg_name]\n   if arg_name in partial_keywords:\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n    new_params[arg_name]=param.replace(default=arg_value,\n    _partial_kwarg=True )\n    \n   elif (param.kind not in (_VAR_KEYWORD,_VAR_POSITIONAL)and\n   not param._partial_kwarg):\n    new_params.pop(arg_name)\n    \n  return sig.replace(parameters=new_params.values())\n  \n sig=None\n if isinstance(obj,type):\n \n \n \n \n  call=_get_user_defined_method(type(obj),'__call__')\n  if call is not None :\n   sig=signature(call)\n  else :\n  \n   new=_get_user_defined_method(obj,'__new__')\n   if new is not None :\n    sig=signature(new)\n   else :\n   \n    init=_get_user_defined_method(obj,'__init__')\n    if init is not None :\n     sig=signature(init)\n elif not isinstance(obj,_NonUserDefinedCallables):\n \n \n \n \n  call=_get_user_defined_method(type(obj),'__call__')\n  if call is not None :\n   sig=signature(call)\n   \n if sig is not None :\n \n \n  return sig.replace(parameters=tuple(sig.parameters.values())[1:])\n  \n if isinstance(obj,types.BuiltinFunctionType):\n \n  msg='no signature found for builtin function {!r}'.format(obj)\n  raise ValueError(msg)\n  \n raise ValueError('callable {!r} is not supported by signature'.format(obj))\n \n \nclass _void:\n ''\n \n \nclass _empty:\n pass\n \n \nclass _ParameterKind(int):\n def __new__(self,*args,name):\n  obj=int.__new__(self,*args)\n  obj._name=name\n  return obj\n  \n def __str__(self):\n  return self._name\n  \n def __repr__(self):\n  return'<_ParameterKind: {!r}>'.format(self._name)\n  \n  \n_POSITIONAL_ONLY=_ParameterKind(0,name='POSITIONAL_ONLY')\n_POSITIONAL_OR_KEYWORD=_ParameterKind(1,name='POSITIONAL_OR_KEYWORD')\n_VAR_POSITIONAL=_ParameterKind(2,name='VAR_POSITIONAL')\n_KEYWORD_ONLY=_ParameterKind(3,name='KEYWORD_ONLY')\n_VAR_KEYWORD=_ParameterKind(4,name='VAR_KEYWORD')\n\n\nclass Parameter:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __slots__=('_name','_kind','_default','_annotation','_partial_kwarg')\n \n POSITIONAL_ONLY=_POSITIONAL_ONLY\n POSITIONAL_OR_KEYWORD=_POSITIONAL_OR_KEYWORD\n VAR_POSITIONAL=_VAR_POSITIONAL\n KEYWORD_ONLY=_KEYWORD_ONLY\n VAR_KEYWORD=_VAR_KEYWORD\n \n empty=_empty\n \n def __init__(self,name,kind,*,default=_empty,annotation=_empty,\n _partial_kwarg=False ):\n \n  if kind not in (_POSITIONAL_ONLY,_POSITIONAL_OR_KEYWORD,\n  _VAR_POSITIONAL,_KEYWORD_ONLY,_VAR_KEYWORD):\n   raise ValueError(\"invalid value for 'Parameter.kind' attribute\")\n  self._kind=kind\n  \n  if default is not _empty:\n   if kind in (_VAR_POSITIONAL,_VAR_KEYWORD):\n    msg='{} parameters cannot have default values'.format(kind)\n    raise ValueError(msg)\n  self._default=default\n  self._annotation=annotation\n  \n  if name is None :\n   if kind !=_POSITIONAL_ONLY:\n    raise ValueError(\"None is not a valid name for a \"\n    \"non-positional-only parameter\")\n   self._name=name\n  else :\n   name=str(name)\n   if kind !=_POSITIONAL_ONLY and not name.isidentifier():\n    msg='{!r} is not a valid parameter name'.format(name)\n    raise ValueError(msg)\n   self._name=name\n   \n  self._partial_kwarg=_partial_kwarg\n  \n @property\n def name(self):\n  return self._name\n  \n @property\n def default(self):\n  return self._default\n  \n @property\n def annotation(self):\n  return self._annotation\n  \n @property\n def kind(self):\n  return self._kind\n  \n def replace(self,*,name=_void,kind=_void,annotation=_void,\n default=_void,_partial_kwarg=_void):\n  ''\n  \n  if name is _void:\n   name=self._name\n   \n  if kind is _void:\n   kind=self._kind\n   \n  if annotation is _void:\n   annotation=self._annotation\n   \n  if default is _void:\n   default=self._default\n   \n  if _partial_kwarg is _void:\n   _partial_kwarg=self._partial_kwarg\n   \n  return type(self)(name,kind,default=default,annotation=annotation,\n  _partial_kwarg=_partial_kwarg)\n  \n def __str__(self):\n  kind=self.kind\n  \n  formatted=self._name\n  if kind ==_POSITIONAL_ONLY:\n   if formatted is None :\n    formatted=''\n   formatted='<{}>'.format(formatted)\n   \n   \n  if self._annotation is not _empty:\n   formatted='{}:{}'.format(formatted,\n   formatannotation(self._annotation))\n   \n  if self._default is not _empty:\n   formatted='{}={}'.format(formatted,repr(self._default))\n   \n  if kind ==_VAR_POSITIONAL:\n   formatted='*'+formatted\n  elif kind ==_VAR_KEYWORD:\n   formatted='**'+formatted\n   \n  return formatted\n  \n def __repr__(self):\n  return'<{} at {:#x} {!r}>'.format(self.__class__.__name__,\n  id(self),self.name)\n  \n def __eq__(self,other):\n  return (issubclass(other.__class__,Parameter)and\n  self._name ==other._name and\n  self._kind ==other._kind and\n  self._default ==other._default and\n  self._annotation ==other._annotation)\n  \n def __ne__(self,other):\n  return not self.__eq__(other)\n  \n  \nclass BoundArguments:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,signature,arguments):\n  self.arguments=arguments\n  self._signature=signature\n  \n @property\n def signature(self):\n  return self._signature\n  \n @property\n def args(self):\n  args=[]\n  for param_name,param in self._signature.parameters.items():\n   if (param.kind in (_VAR_KEYWORD,_KEYWORD_ONLY)or\n   param._partial_kwarg):\n   \n   \n   \n   \n    break\n    \n   try :\n    arg=self.arguments[param_name]\n   except KeyError:\n   \n   \n    break\n   else :\n    if param.kind ==_VAR_POSITIONAL:\n    \n     args.extend(arg)\n    else :\n    \n     args.append(arg)\n     \n  return tuple(args)\n  \n @property\n def kwargs(self):\n  kwargs={}\n  kwargs_started=False\n  for param_name,param in self._signature.parameters.items():\n   if not kwargs_started:\n    if (param.kind in (_VAR_KEYWORD,_KEYWORD_ONLY)or\n    param._partial_kwarg):\n     kwargs_started=True\n    else :\n     if param_name not in self.arguments:\n      kwargs_started=True\n      continue\n      \n   if not kwargs_started:\n    continue\n    \n   try :\n    arg=self.arguments[param_name]\n   except KeyError:\n    pass\n   else :\n    if param.kind ==_VAR_KEYWORD:\n    \n     kwargs.update(arg)\n    else :\n    \n     kwargs[param_name]=arg\n     \n  return kwargs\n  \n def __eq__(self,other):\n  return (issubclass(other.__class__,BoundArguments)and\n  self.signature ==other.signature and\n  self.arguments ==other.arguments)\n  \n def __ne__(self,other):\n  return not self.__eq__(other)\n  \n  \nclass Signature:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __slots__=('_return_annotation','_parameters')\n \n _parameter_cls=Parameter\n _bound_arguments_cls=BoundArguments\n \n empty=_empty\n \n def __init__(self,parameters=None ,*,return_annotation=_empty,\n __validate_parameters__=True ):\n  ''\n\n  \n  \n  if parameters is None :\n   params=OrderedDict()\n  else :\n   if __validate_parameters__:\n    params=OrderedDict()\n    top_kind=_POSITIONAL_ONLY\n    \n    for idx,param in enumerate(parameters):\n     kind=param.kind\n     if kind <top_kind:\n      msg='wrong parameter order: {} before {}'\n      msg=msg.format(top_kind,param.kind)\n      raise ValueError(msg)\n     else :\n      top_kind=kind\n      \n     name=param.name\n     if name is None :\n      name=str(idx)\n      param=param.replace(name=name)\n      \n     if name in params:\n      msg='duplicate parameter name: {!r}'.format(name)\n      raise ValueError(msg)\n     params[name]=param\n   else :\n    params=OrderedDict(((param.name,param)\n    for param in parameters))\n    \n  self._parameters=types.MappingProxyType(params)\n  self._return_annotation=return_annotation\n  \n @classmethod\n def from_function(cls,func):\n  ''\n  \n  if not isinstance(func,types.FunctionType):\n   raise TypeError('{!r} is not a Python function'.format(func))\n   \n  Parameter=cls._parameter_cls\n  \n  \n  func_code=func.__code__\n  pos_count=func_code.co_argcount\n  arg_names=func_code.co_varnames\n  positional=tuple(arg_names[:pos_count])\n  keyword_only_count=func_code.co_kwonlyargcount\n  keyword_only=arg_names[pos_count:(pos_count+keyword_only_count)]\n  annotations=func.__annotations__\n  defaults=func.__defaults__\n  kwdefaults=func.__kwdefaults__\n  \n  if defaults:\n   pos_default_count=len(defaults)\n  else :\n   pos_default_count=0\n   \n  parameters=[]\n  \n  \n  non_default_count=pos_count -pos_default_count\n  for name in positional[:non_default_count]:\n   annotation=annotations.get(name,_empty)\n   parameters.append(Parameter(name,annotation=annotation,\n   kind=_POSITIONAL_OR_KEYWORD))\n   \n   \n  for offset,name in enumerate(positional[non_default_count:]):\n   annotation=annotations.get(name,_empty)\n   parameters.append(Parameter(name,annotation=annotation,\n   kind=_POSITIONAL_OR_KEYWORD,\n   default=defaults[offset]))\n   \n   \n  if func_code.co_flags&0x04:\n   name=arg_names[pos_count+keyword_only_count]\n   annotation=annotations.get(name,_empty)\n   parameters.append(Parameter(name,annotation=annotation,\n   kind=_VAR_POSITIONAL))\n   \n   \n  for name in keyword_only:\n   default=_empty\n   if kwdefaults is not None :\n    default=kwdefaults.get(name,_empty)\n    \n   annotation=annotations.get(name,_empty)\n   parameters.append(Parameter(name,annotation=annotation,\n   kind=_KEYWORD_ONLY,\n   default=default))\n   \n  if func_code.co_flags&0x08:\n   index=pos_count+keyword_only_count\n   if func_code.co_flags&0x04:\n    index +=1\n    \n   name=arg_names[index]\n   annotation=annotations.get(name,_empty)\n   parameters.append(Parameter(name,annotation=annotation,\n   kind=_VAR_KEYWORD))\n   \n  return cls(parameters,\n  return_annotation=annotations.get('return',_empty),\n  __validate_parameters__=False )\n  \n @property\n def parameters(self):\n  return self._parameters\n  \n @property\n def return_annotation(self):\n  return self._return_annotation\n  \n def replace(self,*,parameters=_void,return_annotation=_void):\n  ''\n\n\n  \n  \n  if parameters is _void:\n   parameters=self.parameters.values()\n   \n  if return_annotation is _void:\n   return_annotation=self._return_annotation\n   \n  return type(self)(parameters,\n  return_annotation=return_annotation)\n  \n def __eq__(self,other):\n  if (not issubclass(type(other),Signature)or\n  self.return_annotation !=other.return_annotation or\n  len(self.parameters)!=len(other.parameters)):\n   return False\n   \n  other_positions={param:idx\n  for idx,param in enumerate(other.parameters.keys())}\n  \n  for idx,(param_name,param)in enumerate(self.parameters.items()):\n   if param.kind ==_KEYWORD_ONLY:\n    try :\n     other_param=other.parameters[param_name]\n    except KeyError:\n     return False\n    else :\n     if param !=other_param:\n      return False\n   else :\n    try :\n     other_idx=other_positions[param_name]\n    except KeyError:\n     return False\n    else :\n     if (idx !=other_idx or\n     param !=other.parameters[param_name]):\n      return False\n      \n  return True\n  \n def __ne__(self,other):\n  return not self.__eq__(other)\n  \n def _bind(self,args,kwargs,*,partial=False ):\n  ''\n  \n  arguments=OrderedDict()\n  \n  parameters=iter(self.parameters.values())\n  parameters_ex=()\n  arg_vals=iter(args)\n  \n  if partial:\n  \n  \n  \n   for param_name,param in self.parameters.items():\n    if (param._partial_kwarg and param_name not in kwargs):\n    \n     kwargs[param_name]=param.default\n     \n  while True :\n  \n  \n   try :\n    arg_val=next(arg_vals)\n   except StopIteration:\n   \n    try :\n     param=next(parameters)\n    except StopIteration:\n    \n    \n     break\n    else :\n     if param.kind ==_VAR_POSITIONAL:\n     \n     \n      break\n     elif param.name in kwargs:\n      if param.kind ==_POSITIONAL_ONLY:\n       msg='{arg!r} parameter is positional only, '       'but was passed as a keyword'\n       msg=msg.format(arg=param.name)\n       raise TypeError(msg)from None\n      parameters_ex=(param,)\n      break\n     elif (param.kind ==_VAR_KEYWORD or\n     param.default is not _empty):\n     \n     \n     \n      parameters_ex=(param,)\n      break\n     else :\n      if partial:\n       parameters_ex=(param,)\n       break\n      else :\n       msg='{arg!r} parameter lacking default value'\n       msg=msg.format(arg=param.name)\n       raise TypeError(msg)from None\n   else :\n   \n    try :\n     param=next(parameters)\n    except StopIteration:\n     raise TypeError('too many positional arguments')from None\n    else :\n     if param.kind in (_VAR_KEYWORD,_KEYWORD_ONLY):\n     \n     \n      raise TypeError('too many positional arguments')\n      \n     if param.kind ==_VAR_POSITIONAL:\n     \n     \n     \n      values=[arg_val]\n      values.extend(arg_vals)\n      arguments[param.name]=tuple(values)\n      break\n      \n     if param.name in kwargs:\n      raise TypeError('multiple values for argument '\n      '{arg!r}'.format(arg=param.name))\n      \n     arguments[param.name]=arg_val\n     \n     \n     \n  kwargs_param=None\n  for param in itertools.chain(parameters_ex,parameters):\n   if param.kind ==_POSITIONAL_ONLY:\n   \n   \n   \n    raise TypeError('{arg!r} parameter is positional only, '\n    'but was passed as a keyword'.    format(arg=param.name))\n    \n   if param.kind ==_VAR_KEYWORD:\n   \n    kwargs_param=param\n    continue\n    \n   param_name=param.name\n   try :\n    arg_val=kwargs.pop(param_name)\n   except KeyError:\n   \n   \n   \n   \n    if (not partial and param.kind !=_VAR_POSITIONAL and\n    param.default is _empty):\n     raise TypeError('{arg!r} parameter lacking default value'.     format(arg=param_name))from None\n     \n   else :\n    arguments[param_name]=arg_val\n    \n  if kwargs:\n   if kwargs_param is not None :\n   \n    arguments[kwargs_param.name]=kwargs\n   else :\n    raise TypeError('too many keyword arguments')\n    \n  return self._bound_arguments_cls(self,arguments)\n  \n def bind(__bind_self,*args,**kwargs):\n  ''\n\n\n  \n  return __bind_self._bind(args,kwargs)\n  \n def bind_partial(__bind_self,*args,**kwargs):\n  ''\n\n\n  \n  return __bind_self._bind(args,kwargs,partial=True )\n  \n def __str__(self):\n  result=[]\n  render_kw_only_separator=True\n  for idx,param in enumerate(self.parameters.values()):\n   formatted=str(param)\n   \n   kind=param.kind\n   if kind ==_VAR_POSITIONAL:\n   \n   \n    render_kw_only_separator=False\n   elif kind ==_KEYWORD_ONLY and render_kw_only_separator:\n   \n   \n   \n    result.append('*')\n    \n    \n    render_kw_only_separator=False\n    \n   result.append(formatted)\n   \n  rendered='({})'.format(', '.join(result))\n  \n  if self.return_annotation is not _empty:\n   anno=formatannotation(self.return_annotation)\n   rendered +=' -> {}'.format(anno)\n   \n  return rendered\n"], "codecs": [".py", "''\n\n\n\n\n\n\n\n\nimport builtins,sys\n\n\n\ntry :\n from _codecs import *\nexcept ImportError as why:\n raise SystemError('Failed to load the builtin codecs: %s'%why)\n \n__all__=[\"register\",\"lookup\",\"open\",\"EncodedFile\",\"BOM\",\"BOM_BE\",\n\"BOM_LE\",\"BOM32_BE\",\"BOM32_LE\",\"BOM64_BE\",\"BOM64_LE\",\n\"BOM_UTF8\",\"BOM_UTF16\",\"BOM_UTF16_LE\",\"BOM_UTF16_BE\",\n\"BOM_UTF32\",\"BOM_UTF32_LE\",\"BOM_UTF32_BE\",\n\"strict_errors\",\"ignore_errors\",\"replace_errors\",\n\"xmlcharrefreplace_errors\",\n\"register_error\",\"lookup_error\"]\n\n\n\n\n\n\n\n\n\n\nBOM_UTF8=b'\\xef\\xbb\\xbf'\n\n\nBOM_LE=BOM_UTF16_LE=b'\\xff\\xfe'\n\n\nBOM_BE=BOM_UTF16_BE=b'\\xfe\\xff'\n\n\nBOM_UTF32_LE=b'\\xff\\xfe\\x00\\x00'\n\n\nBOM_UTF32_BE=b'\\x00\\x00\\xfe\\xff'\n\nif sys.byteorder =='little':\n\n\n BOM=BOM_UTF16=BOM_UTF16_LE\n \n \n BOM_UTF32=BOM_UTF32_LE\n \nelse :\n\n\n BOM=BOM_UTF16=BOM_UTF16_BE\n \n \n BOM_UTF32=BOM_UTF32_BE\n \n \nBOM32_LE=BOM_UTF16_LE\nBOM32_BE=BOM_UTF16_BE\nBOM64_LE=BOM_UTF32_LE\nBOM64_BE=BOM_UTF32_BE\n\n\n\n\nclass CodecInfo(tuple):\n\n def __new__(cls,encode,decode,streamreader=None ,streamwriter=None ,\n incrementalencoder=None ,incrementaldecoder=None ,name=None ):\n  self=tuple.__new__(cls,(encode,decode,streamreader,streamwriter))\n  self.name=name\n  self.encode=encode\n  self.decode=decode\n  self.incrementalencoder=incrementalencoder\n  self.incrementaldecoder=incrementaldecoder\n  self.streamwriter=streamwriter\n  self.streamreader=streamreader\n  return self\n  \n def __repr__(self):\n  return\"<%s.%s object for encoding %s at 0x%x>\"%  (self.__class__.__module__,self.__class__.__name__,\n  self.name,id(self))\n  \nclass Codec:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def encode(self,input,errors='strict'):\n \n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  raise NotImplementedError\n  \n def decode(self,input,errors='strict'):\n \n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  raise NotImplementedError\n  \nclass IncrementalEncoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n  ''\n\n\n\n\n\n  \n  self.errors=errors\n  self.buffer=\"\"\n  \n def encode(self,input,final=False ):\n  ''\n\n  \n  raise NotImplementedError\n  \n def reset(self):\n  ''\n\n  \n  \n def getstate(self):\n  ''\n\n  \n  return 0\n  \n def setstate(self,state):\n  ''\n\n\n  \n  \nclass BufferedIncrementalEncoder(IncrementalEncoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n  IncrementalEncoder.__init__(self,errors)\n  \n  self.buffer=\"\"\n  \n def _buffer_encode(self,input,errors,final):\n \n \n  raise NotImplementedError\n  \n def encode(self,input,final=False ):\n \n  data=self.buffer+input\n  (result,consumed)=self._buffer_encode(data,self.errors,final)\n  \n  self.buffer=data[consumed:]\n  return result\n  \n def reset(self):\n  IncrementalEncoder.reset(self)\n  self.buffer=\"\"\n  \n def getstate(self):\n  return self.buffer or 0\n  \n def setstate(self,state):\n  self.buffer=state or\"\"\n  \nclass IncrementalDecoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n  ''\n\n\n\n\n\n  \n  self.errors=errors\n  \n def decode(self,input,final=False ):\n  ''\n\n  \n  raise NotImplementedError\n  \n def reset(self):\n  ''\n\n  \n  \n def getstate(self):\n  ''\n\n\n\n\n\n\n\n\n\n  \n  return (b\"\",0)\n  \n def setstate(self,state):\n  ''\n\n\n\n\n  \n  \nclass BufferedIncrementalDecoder(IncrementalDecoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n  IncrementalDecoder.__init__(self,errors)\n  \n  self.buffer=b\"\"\n  \n def _buffer_decode(self,input,errors,final):\n \n \n  raise NotImplementedError\n  \n def decode(self,input,final=False ):\n \n  data=self.buffer+input\n  (result,consumed)=self._buffer_decode(data,self.errors,final)\n  \n  self.buffer=data[consumed:]\n  return result\n  \n def reset(self):\n  IncrementalDecoder.reset(self)\n  self.buffer=b\"\"\n  \n def getstate(self):\n \n  return (self.buffer,0)\n  \n def setstate(self,state):\n \n  self.buffer=state[0]\n  \n  \n  \n  \n  \n  \n  \n  \nclass StreamWriter(Codec):\n\n def __init__(self,stream,errors='strict'):\n \n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self.stream=stream\n  self.errors=errors\n  \n def write(self,object):\n \n  ''\n  \n  data,consumed=self.encode(object,self.errors)\n  self.stream.write(data)\n  \n def writelines(self,list):\n \n  ''\n\n  \n  self.write(''.join(list))\n  \n def reset(self):\n \n  ''\n\n\n\n\n\n\n  \n  pass\n  \n def seek(self,offset,whence=0):\n  self.stream.seek(offset,whence)\n  if whence ==0 and offset ==0:\n   self.reset()\n   \n def __getattr__(self,name,\n getattr=getattr):\n \n  ''\n  \n  return getattr(self.stream,name)\n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,type,value,tb):\n  self.stream.close()\n  \n  \n  \nclass StreamReader(Codec):\n\n charbuffertype=str\n \n def __init__(self,stream,errors='strict'):\n \n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self.stream=stream\n  self.errors=errors\n  self.bytebuffer=b\"\"\n  self._empty_charbuffer=self.charbuffertype()\n  self.charbuffer=self._empty_charbuffer\n  self.linebuffer=None\n  \n def decode(self,input,errors='strict'):\n  raise NotImplementedError\n  \n def read(self,size=-1,chars=-1,firstline=False ):\n \n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  if self.linebuffer:\n   self.charbuffer=self._empty_charbuffer.join(self.linebuffer)\n   self.linebuffer=None\n   \n   \n  while True :\n  \n   if chars <0:\n    if size <0:\n     if self.charbuffer:\n      break\n    elif len(self.charbuffer)>=size:\n     break\n   else :\n    if len(self.charbuffer)>=chars:\n     break\n     \n   if size <0:\n    newdata=self.stream.read()\n   else :\n    newdata=self.stream.read(size)\n    \n   data=self.bytebuffer+newdata\n   try :\n    newchars,decodedbytes=self.decode(data,self.errors)\n   except UnicodeDecodeError as exc:\n    if firstline:\n     newchars,decodedbytes=     self.decode(data[:exc.start],self.errors)\n     lines=newchars.splitlines(keepends=True )\n     if len(lines)<=1:\n      raise\n    else :\n     raise\n     \n   self.bytebuffer=data[decodedbytes:]\n   \n   self.charbuffer +=newchars\n   \n   if not newdata:\n    break\n  if chars <0:\n  \n   result=self.charbuffer\n   self.charbuffer=self._empty_charbuffer\n  else :\n  \n   result=self.charbuffer[:chars]\n   self.charbuffer=self.charbuffer[chars:]\n  return result\n  \n def readline(self,size=None ,keepends=True ):\n \n  ''\n\n\n\n\n\n  \n  \n  \n  if self.linebuffer:\n   line=self.linebuffer[0]\n   del self.linebuffer[0]\n   if len(self.linebuffer)==1:\n   \n   \n    self.charbuffer=self.linebuffer[0]\n    self.linebuffer=None\n   if not keepends:\n    line=line.splitlines(keepends=False )[0]\n   return line\n   \n  readsize=size or 72\n  line=self._empty_charbuffer\n  \n  while True :\n   data=self.read(readsize,firstline=True )\n   if data:\n   \n   \n   \n    if (isinstance(data,str)and data.endswith(\"\\r\"))or    (isinstance(data,bytes)and data.endswith(b\"\\r\")):\n     data +=self.read(size=1,chars=1)\n     \n   line +=data\n   lines=line.splitlines(keepends=True )\n   if lines:\n    if len(lines)>1:\n    \n    \n     line=lines[0]\n     del lines[0]\n     if len(lines)>1:\n     \n      lines[-1]+=self.charbuffer\n      self.linebuffer=lines\n      self.charbuffer=None\n     else :\n     \n      self.charbuffer=lines[0]+self.charbuffer\n     if not keepends:\n      line=line.splitlines(keepends=False )[0]\n     break\n    line0withend=lines[0]\n    line0withoutend=lines[0].splitlines(keepends=False )[0]\n    if line0withend !=line0withoutend:\n    \n     self.charbuffer=self._empty_charbuffer.join(lines[1:])+     self.charbuffer\n     if keepends:\n      line=line0withend\n     else :\n      line=line0withoutend\n     break\n     \n   if not data or size is not None :\n    if line and not keepends:\n     line=line.splitlines(keepends=False )[0]\n    break\n   if readsize <8000:\n    readsize *=2\n  return line\n  \n def readlines(self,sizehint=None ,keepends=True ):\n \n  ''\n\n\n\n\n\n\n\n\n  \n  data=self.read()\n  return data.splitlines(keepends)\n  \n def reset(self):\n \n  ''\n\n\n\n\n\n  \n  self.bytebuffer=b\"\"\n  self.charbuffer=self._empty_charbuffer\n  self.linebuffer=None\n  \n def seek(self,offset,whence=0):\n  ''\n\n\n  \n  self.stream.seek(offset,whence)\n  self.reset()\n  \n def __next__(self):\n \n  ''\n  line=self.readline()\n  if line:\n   return line\n  raise StopIteration\n  \n def __iter__(self):\n  return self\n  \n def __getattr__(self,name,\n getattr=getattr):\n \n  ''\n  \n  return getattr(self.stream,name)\n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,type,value,tb):\n  self.stream.close()\n  \n  \n  \nclass StreamReaderWriter:\n\n ''\n\n\n\n\n\n\n \n \n encoding='unknown'\n \n def __init__(self,stream,Reader,Writer,errors='strict'):\n \n  ''\n\n\n\n\n\n\n\n\n\n  \n  self.stream=stream\n  self.reader=Reader(stream,errors)\n  self.writer=Writer(stream,errors)\n  self.errors=errors\n  \n def read(self,size=-1):\n \n  return self.reader.read(size)\n  \n def readline(self,size=None ):\n \n  return self.reader.readline(size)\n  \n def readlines(self,sizehint=None ):\n \n  return self.reader.readlines(sizehint)\n  \n def __next__(self):\n \n  ''\n  return next(self.reader)\n  \n def __iter__(self):\n  return self\n  \n def write(self,data):\n \n  return self.writer.write(data)\n  \n def writelines(self,list):\n \n  return self.writer.writelines(list)\n  \n def reset(self):\n \n  self.reader.reset()\n  self.writer.reset()\n  \n def seek(self,offset,whence=0):\n  self.stream.seek(offset,whence)\n  self.reader.reset()\n  if whence ==0 and offset ==0:\n   self.writer.reset()\n   \n def __getattr__(self,name,\n getattr=getattr):\n \n  ''\n  \n  return getattr(self.stream,name)\n  \n  \n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,type,value,tb):\n  self.stream.close()\n  \n  \n  \nclass StreamRecoder:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data_encoding='unknown'\n file_encoding='unknown'\n \n def __init__(self,stream,encode,decode,Reader,Writer,\n errors='strict'):\n \n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  self.stream=stream\n  self.encode=encode\n  self.decode=decode\n  self.reader=Reader(stream,errors)\n  self.writer=Writer(stream,errors)\n  self.errors=errors\n  \n def read(self,size=-1):\n \n  data=self.reader.read(size)\n  data,bytesencoded=self.encode(data,self.errors)\n  return data\n  \n def readline(self,size=None ):\n \n  if size is None :\n   data=self.reader.readline()\n  else :\n   data=self.reader.readline(size)\n  data,bytesencoded=self.encode(data,self.errors)\n  return data\n  \n def readlines(self,sizehint=None ):\n \n  data=self.reader.read()\n  data,bytesencoded=self.encode(data,self.errors)\n  return data.splitlines(keepends=True )\n  \n def __next__(self):\n \n  ''\n  data=next(self.reader)\n  data,bytesencoded=self.encode(data,self.errors)\n  return data\n  \n def __iter__(self):\n  return self\n  \n def write(self,data):\n \n  data,bytesdecoded=self.decode(data,self.errors)\n  return self.writer.write(data)\n  \n def writelines(self,list):\n \n  data=''.join(list)\n  data,bytesdecoded=self.decode(data,self.errors)\n  return self.writer.write(data)\n  \n def reset(self):\n \n  self.reader.reset()\n  self.writer.reset()\n  \n def __getattr__(self,name,\n getattr=getattr):\n \n  ''\n  \n  return getattr(self.stream,name)\n  \n def __enter__(self):\n  return self\n  \n def __exit__(self,type,value,tb):\n  self.stream.close()\n  \n  \n  \ndef open(filename,mode='rb',encoding=None ,errors='strict',buffering=1):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if encoding is not None and 'b'not in mode:\n \n  mode=mode+'b'\n file=builtins.open(filename,mode,buffering)\n if encoding is None :\n  return file\n info=lookup(encoding)\n srw=StreamReaderWriter(file,info.streamreader,info.streamwriter,errors)\n \n srw.encoding=encoding\n return srw\n \ndef EncodedFile(file,data_encoding,file_encoding=None ,errors='strict'):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if file_encoding is None :\n  file_encoding=data_encoding\n data_info=lookup(data_encoding)\n file_info=lookup(file_encoding)\n sr=StreamRecoder(file,data_info.encode,data_info.decode,\n file_info.streamreader,file_info.streamwriter,errors)\n \n sr.data_encoding=data_encoding\n sr.file_encoding=file_encoding\n return sr\n \n \n \ndef getencoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).encode\n \ndef getdecoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).decode\n \ndef getincrementalencoder(encoding):\n\n ''\n\n\n\n\n\n \n encoder=lookup(encoding).incrementalencoder\n if encoder is None :\n  raise LookupError(encoding)\n return encoder\n \ndef getincrementaldecoder(encoding):\n\n ''\n\n\n\n\n\n \n decoder=lookup(encoding).incrementaldecoder\n if decoder is None :\n  raise LookupError(encoding)\n return decoder\n \ndef getreader(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamreader\n \ndef getwriter(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamwriter\n \ndef iterencode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n encoder=getincrementalencoder(encoding)(errors,**kwargs)\n for input in iterator:\n  output=encoder.encode(input)\n  if output:\n   yield output\n output=encoder.encode(\"\",True )\n if output:\n  yield output\n  \ndef iterdecode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n decoder=getincrementaldecoder(encoding)(errors,**kwargs)\n for input in iterator:\n  output=decoder.decode(input)\n  if output:\n   yield output\n output=decoder.decode(b\"\",True )\n if output:\n  yield output\n  \n  \n  \ndef make_identity_dict(rng):\n\n ''\n\n\n\n\n \n return {i:i for i in rng}\n \ndef make_encoding_map(decoding_map):\n\n ''\n\n\n\n\n\n\n\n\n\n \n m={}\n for k,v in decoding_map.items():\n  if not v in m:\n   m[v]=k\n  else :\n   m[v]=None\n return m\n \n \n \ntry :\n strict_errors=lookup_error(\"strict\")\n ignore_errors=lookup_error(\"ignore\")\n replace_errors=lookup_error(\"replace\")\n xmlcharrefreplace_errors=lookup_error(\"xmlcharrefreplace\")\n backslashreplace_errors=lookup_error(\"backslashreplace\")\nexcept LookupError:\n\n strict_errors=None\n ignore_errors=None\n replace_errors=None\n xmlcharrefreplace_errors=None\n backslashreplace_errors=None\n \n \n \n_false=0\nif _false:\n import encodings\n \n \n \nif __name__ =='__main__':\n\n\n sys.stdout=EncodedFile(sys.stdout,'latin-1','utf-8')\n \n \n sys.stdin=EncodedFile(sys.stdin,'utf-8','latin-1')\n"], "encodings.cp500": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n  return codecs.charmap_encode(input,errors,encoding_table)\n  \n def decode(self,input,errors='strict'):\n  return codecs.charmap_decode(input,errors,decoding_table)\n  \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n  return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n  \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n  return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n  \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp500',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xf1'\n'['\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n']'\n'$'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'\\xc7'\n'\\xd1'\n'\\xa6'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'`'\n':'\n'#'\n'@'\n\"'\"\n'='\n'\"'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'\\xf0'\n'\\xfd'\n'\\xfe'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'~'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n'\\xd0'\n'\\xdd'\n'\\xde'\n'\\xae'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xac'\n'|'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'{'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'}'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\xfc'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\\\'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'\\xd6'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\\xdc'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "logging.handlers": [".py", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\"\"\"\nAdditional handlers for the logging package for Python. The core package is\nbased on PEP 282 and comments thereto in comp.lang.python.\n\nCopyright (C) 2001-2013 Vinay Sajip. All Rights Reserved.\n\nTo use, simply 'import logging.handlers' and log away!\n\"\"\"\n\nimport errno,logging,socket,os,pickle,struct,time,re\nfrom codecs import BOM_UTF8\nfrom stat import ST_DEV,ST_INO,ST_MTIME\nimport queue\ntry :\n import threading\nexcept ImportError:\n threading=None\n \n \n \n \n \nDEFAULT_TCP_LOGGING_PORT=9020\nDEFAULT_UDP_LOGGING_PORT=9021\nDEFAULT_HTTP_LOGGING_PORT=9022\nDEFAULT_SOAP_LOGGING_PORT=9023\nSYSLOG_UDP_PORT=514\nSYSLOG_TCP_PORT=514\n\n_MIDNIGHT=24 *60 *60\n\nclass BaseRotatingHandler(logging.FileHandler):\n ''\n\n\n\n \n def __init__(self,filename,mode,encoding=None ,delay=False ):\n  ''\n\n  \n  logging.FileHandler.__init__(self,filename,mode,encoding,delay)\n  self.mode=mode\n  self.encoding=encoding\n  self.namer=None\n  self.rotator=None\n  \n def emit(self,record):\n  ''\n\n\n\n\n  \n  try :\n   if self.shouldRollover(record):\n    self.doRollover()\n   logging.FileHandler.emit(self,record)\n  except (KeyboardInterrupt,SystemExit):\n   raise\n  except :\n   self.handleError(record)\n   \n def rotation_filename(self,default_name):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  if not callable(self.namer):\n   result=default_name\n  else :\n   result=self.namer(default_name)\n  return result\n  \n def rotate(self,source,dest):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n  \n  if not callable(self.rotator):\n  \n   if os.path.exists(source):\n    os.rename(source,dest)\n  else :\n   self.rotator(source,dest)\n   \nclass RotatingFileHandler(BaseRotatingHandler):\n ''\n\n\n \n def __init__(self,filename,mode='a',maxBytes=0,backupCount=0,encoding=None ,delay=False ):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  if maxBytes >0:\n   mode='a'\n  BaseRotatingHandler.__init__(self,filename,mode,encoding,delay)\n  self.maxBytes=maxBytes\n  self.backupCount=backupCount\n  \n def doRollover(self):\n  ''\n\n  \n  if self.stream:\n   self.stream.close()\n   self.stream=None\n  if self.backupCount >0:\n   for i in range(self.backupCount -1,0,-1):\n    sfn=self.rotation_filename(\"%s.%d\"%(self.baseFilename,i))\n    dfn=self.rotation_filename(\"%s.%d\"%(self.baseFilename,\n    i+1))\n    if os.path.exists(sfn):\n     if os.path.exists(dfn):\n      os.remove(dfn)\n     os.rename(sfn,dfn)\n   dfn=self.rotation_filename(self.baseFilename+\".1\")\n   if os.path.exists(dfn):\n    os.remove(dfn)\n   self.rotate(self.baseFilename,dfn)\n  if not self.delay:\n   self.stream=self._open()\n   \n def shouldRollover(self,record):\n  ''\n\n\n\n\n  \n  if self.stream is None :\n   self.stream=self._open()\n  if self.maxBytes >0:\n   msg=\"%s\\n\"%self.format(record)\n   self.stream.seek(0,2)\n   if self.stream.tell()+len(msg)>=self.maxBytes:\n    return 1\n  return 0\n  \nclass TimedRotatingFileHandler(BaseRotatingHandler):\n ''\n\n\n\n\n\n \n def __init__(self,filename,when='h',interval=1,backupCount=0,encoding=None ,delay=False ,utc=False ):\n  BaseRotatingHandler.__init__(self,filename,'a',encoding,delay)\n  self.when=when.upper()\n  self.backupCount=backupCount\n  self.utc=utc\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  if self.when =='S':\n   self.interval=1\n   self.suffix=\"%Y-%m-%d_%H-%M-%S\"\n   self.extMatch=r\"^\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}(\\.\\w+)?$\"\n  elif self.when =='M':\n   self.interval=60\n   self.suffix=\"%Y-%m-%d_%H-%M\"\n   self.extMatch=r\"^\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}(\\.\\w+)?$\"\n  elif self.when =='H':\n   self.interval=60 *60\n   self.suffix=\"%Y-%m-%d_%H\"\n   self.extMatch=r\"^\\d{4}-\\d{2}-\\d{2}_\\d{2}(\\.\\w+)?$\"\n  elif self.when =='D'or self.when =='MIDNIGHT':\n   self.interval=60 *60 *24\n   self.suffix=\"%Y-%m-%d\"\n   self.extMatch=r\"^\\d{4}-\\d{2}-\\d{2}(\\.\\w+)?$\"\n  elif self.when.startswith('W'):\n   self.interval=60 *60 *24 *7\n   if len(self.when)!=2:\n    raise ValueError(\"You must specify a day for weekly rollover from 0 to 6 (0 is Monday): %s\"%self.when)\n   if self.when[1]<'0'or self.when[1]>'6':\n    raise ValueError(\"Invalid day specified for weekly rollover: %s\"%self.when)\n   self.dayOfWeek=int(self.when[1])\n   self.suffix=\"%Y-%m-%d\"\n   self.extMatch=r\"^\\d{4}-\\d{2}-\\d{2}(\\.\\w+)?$\"\n  else :\n   raise ValueError(\"Invalid rollover interval specified: %s\"%self.when)\n   \n  self.extMatch=re.compile(self.extMatch,re.ASCII)\n  self.interval=self.interval *interval\n  if os.path.exists(filename):\n   t=os.stat(filename)[ST_MTIME]\n  else :\n   t=int(time.time())\n  self.rolloverAt=self.computeRollover(t)\n  \n def computeRollover(self,currentTime):\n  ''\n\n  \n  result=currentTime+self.interval\n  \n  \n  \n  \n  \n  \n  \n  if self.when =='MIDNIGHT'or self.when.startswith('W'):\n  \n   if self.utc:\n    t=time.gmtime(currentTime)\n   else :\n    t=time.localtime(currentTime)\n   currentHour=t[3]\n   currentMinute=t[4]\n   currentSecond=t[5]\n   \n   r=_MIDNIGHT -((currentHour *60+currentMinute)*60+\n   currentSecond)\n   result=currentTime+r\n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   \n   if self.when.startswith('W'):\n    day=t[6]\n    if day !=self.dayOfWeek:\n     if day <self.dayOfWeek:\n      daysToWait=self.dayOfWeek -day\n     else :\n      daysToWait=6 -day+self.dayOfWeek+1\n     newRolloverAt=result+(daysToWait *(60 *60 *24))\n     if not self.utc:\n      dstNow=t[-1]\n      dstAtRollover=time.localtime(newRolloverAt)[-1]\n      if dstNow !=dstAtRollover:\n       if not dstNow:\n        addend=-3600\n       else :\n        addend=3600\n       newRolloverAt +=addend\n     result=newRolloverAt\n  return result\n  \n def shouldRollover(self,record):\n  ''\n\n\n\n\n  \n  t=int(time.time())\n  if t >=self.rolloverAt:\n   return 1\n  return 0\n  \n def getFilesToDelete(self):\n  ''\n\n\n\n  \n  dirName,baseName=os.path.split(self.baseFilename)\n  fileNames=os.listdir(dirName)\n  result=[]\n  prefix=baseName+\".\"\n  plen=len(prefix)\n  for fileName in fileNames:\n   if fileName[:plen]==prefix:\n    suffix=fileName[plen:]\n    if self.extMatch.match(suffix):\n     result.append(os.path.join(dirName,fileName))\n  result.sort()\n  if len(result)<self.backupCount:\n   result=[]\n  else :\n   result=result[:len(result)-self.backupCount]\n  return result\n  \n def doRollover(self):\n  ''\n\n\n\n\n\n  \n  if self.stream:\n   self.stream.close()\n   self.stream=None\n   \n  currentTime=int(time.time())\n  dstNow=time.localtime(currentTime)[-1]\n  t=self.rolloverAt -self.interval\n  if self.utc:\n   timeTuple=time.gmtime(t)\n  else :\n   timeTuple=time.localtime(t)\n   dstThen=timeTuple[-1]\n   if dstNow !=dstThen:\n    if dstNow:\n     addend=3600\n    else :\n     addend=-3600\n    timeTuple=time.localtime(t+addend)\n  dfn=self.rotation_filename(self.baseFilename+\".\"+\n  time.strftime(self.suffix,timeTuple))\n  if os.path.exists(dfn):\n   os.remove(dfn)\n  self.rotate(self.baseFilename,dfn)\n  if self.backupCount >0:\n   for s in self.getFilesToDelete():\n    os.remove(s)\n  if not self.delay:\n   self.stream=self._open()\n  newRolloverAt=self.computeRollover(currentTime)\n  while newRolloverAt <=currentTime:\n   newRolloverAt=newRolloverAt+self.interval\n   \n  if (self.when =='MIDNIGHT'or self.when.startswith('W'))and not self.utc:\n   dstAtRollover=time.localtime(newRolloverAt)[-1]\n   if dstNow !=dstAtRollover:\n    if not dstNow:\n     addend=-3600\n    else :\n     addend=3600\n    newRolloverAt +=addend\n  self.rolloverAt=newRolloverAt\n  \nclass WatchedFileHandler(logging.FileHandler):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,filename,mode='a',encoding=None ,delay=False ):\n  logging.FileHandler.__init__(self,filename,mode,encoding,delay)\n  self.dev,self.ino=-1,-1\n  self._statstream()\n  \n def _statstream(self):\n  if self.stream:\n   sres=os.fstat(self.stream.fileno())\n   self.dev,self.ino=sres[ST_DEV],sres[ST_INO]\n   \n def emit(self,record):\n  ''\n\n\n\n\n\n  \n  \n  \n  \n  \n  try :\n  \n   sres=os.stat(self.baseFilename)\n  except OSError as err:\n   if err.errno ==errno.ENOENT:\n    sres=None\n   else :\n    raise\n    \n  if not sres or sres[ST_DEV]!=self.dev or sres[ST_INO]!=self.ino:\n   if self.stream is not None :\n   \n    self.stream.flush()\n    self.stream.close()\n    \n    self.stream=self._open()\n    self._statstream()\n  logging.FileHandler.emit(self,record)\n  \n  \nclass SocketHandler(logging.Handler):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,host,port):\n  ''\n\n\n\n\n\n  \n  logging.Handler.__init__(self)\n  self.host=host\n  self.port=port\n  self.sock=None\n  self.closeOnError=False\n  self.retryTime=None\n  \n  \n  \n  self.retryStart=1.0\n  self.retryMax=30.0\n  self.retryFactor=2.0\n  \n def makeSocket(self,timeout=1):\n  ''\n\n\n  \n  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n  if hasattr(s,'settimeout'):\n   s.settimeout(timeout)\n  try :\n   s.connect((self.host,self.port))\n   return s\n  except socket.error:\n   s.close()\n   raise\n   \n def createSocket(self):\n  ''\n\n\n\n  \n  now=time.time()\n  \n  \n  \n  if self.retryTime is None :\n   attempt=True\n  else :\n   attempt=(now >=self.retryTime)\n  if attempt:\n   try :\n    self.sock=self.makeSocket()\n    self.retryTime=None\n   except socket.error:\n   \n    if self.retryTime is None :\n     self.retryPeriod=self.retryStart\n    else :\n     self.retryPeriod=self.retryPeriod *self.retryFactor\n     if self.retryPeriod >self.retryMax:\n      self.retryPeriod=self.retryMax\n    self.retryTime=now+self.retryPeriod\n    \n def send(self,s):\n  ''\n\n\n\n\n  \n  if self.sock is None :\n   self.createSocket()\n   \n   \n   \n  if self.sock:\n   try :\n    if hasattr(self.sock,\"sendall\"):\n     self.sock.sendall(s)\n    else :\n     sentsofar=0\n     left=len(s)\n     while left >0:\n      sent=self.sock.send(s[sentsofar:])\n      sentsofar=sentsofar+sent\n      left=left -sent\n   except socket.error:\n    self.sock.close()\n    self.sock=None\n    \n def makePickle(self,record):\n  ''\n\n\n  \n  ei=record.exc_info\n  if ei:\n  \n   dummy=self.format(record)\n   \n   \n   \n  d=dict(record.__dict__)\n  d['msg']=record.getMessage()\n  d['args']=None\n  d['exc_info']=None\n  s=pickle.dumps(d,1)\n  slen=struct.pack(\">L\",len(s))\n  return slen+s\n  \n def handleError(self,record):\n  ''\n\n\n\n\n\n  \n  if self.closeOnError and self.sock:\n   self.sock.close()\n   self.sock=None\n  else :\n   logging.Handler.handleError(self,record)\n   \n def emit(self,record):\n  ''\n\n\n\n\n\n\n  \n  try :\n   s=self.makePickle(record)\n   self.send(s)\n  except (KeyboardInterrupt,SystemExit):\n   raise\n  except :\n   self.handleError(record)\n   \n def close(self):\n  ''\n\n  \n  self.acquire()\n  try :\n   if self.sock:\n    self.sock.close()\n    self.sock=None\n   logging.Handler.close(self)\n  finally :\n   self.release()\n   \nclass DatagramHandler(SocketHandler):\n ''\n\n\n\n\n\n\n\n\n \n def __init__(self,host,port):\n  ''\n\n  \n  SocketHandler.__init__(self,host,port)\n  self.closeOnError=False\n  \n def makeSocket(self):\n  ''\n\n\n  \n  s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)\n  return s\n  \n def send(self,s):\n  ''\n\n\n\n\n\n  \n  if self.sock is None :\n   self.createSocket()\n  self.sock.sendto(s,(self.host,self.port))\n  \nclass SysLogHandler(logging.Handler):\n ''\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n LOG_EMERG=0\n LOG_ALERT=1\n LOG_CRIT=2\n LOG_ERR=3\n LOG_WARNING=4\n LOG_NOTICE=5\n LOG_INFO=6\n LOG_DEBUG=7\n \n \n LOG_KERN=0\n LOG_USER=1\n LOG_MAIL=2\n LOG_DAEMON=3\n LOG_AUTH=4\n LOG_SYSLOG=5\n LOG_LPR=6\n LOG_NEWS=7\n LOG_UUCP=8\n LOG_CRON=9\n LOG_AUTHPRIV=10\n LOG_FTP=11\n \n \n LOG_LOCAL0=16\n LOG_LOCAL1=17\n LOG_LOCAL2=18\n LOG_LOCAL3=19\n LOG_LOCAL4=20\n LOG_LOCAL5=21\n LOG_LOCAL6=22\n LOG_LOCAL7=23\n \n priority_names={\n \"alert\":LOG_ALERT,\n \"crit\":LOG_CRIT,\n \"critical\":LOG_CRIT,\n \"debug\":LOG_DEBUG,\n \"emerg\":LOG_EMERG,\n \"err\":LOG_ERR,\n \"error\":LOG_ERR,\n \"info\":LOG_INFO,\n \"notice\":LOG_NOTICE,\n \"panic\":LOG_EMERG,\n \"warn\":LOG_WARNING,\n \"warning\":LOG_WARNING,\n }\n \n facility_names={\n \"auth\":LOG_AUTH,\n \"authpriv\":LOG_AUTHPRIV,\n \"cron\":LOG_CRON,\n \"daemon\":LOG_DAEMON,\n \"ftp\":LOG_FTP,\n \"kern\":LOG_KERN,\n \"lpr\":LOG_LPR,\n \"mail\":LOG_MAIL,\n \"news\":LOG_NEWS,\n \"security\":LOG_AUTH,\n \"syslog\":LOG_SYSLOG,\n \"user\":LOG_USER,\n \"uucp\":LOG_UUCP,\n \"local0\":LOG_LOCAL0,\n \"local1\":LOG_LOCAL1,\n \"local2\":LOG_LOCAL2,\n \"local3\":LOG_LOCAL3,\n \"local4\":LOG_LOCAL4,\n \"local5\":LOG_LOCAL5,\n \"local6\":LOG_LOCAL6,\n \"local7\":LOG_LOCAL7,\n }\n \n \n \n \n \n priority_map={\n \"DEBUG\":\"debug\",\n \"INFO\":\"info\",\n \"WARNING\":\"warning\",\n \"ERROR\":\"error\",\n \"CRITICAL\":\"critical\"\n }\n \n def __init__(self,address=('localhost',SYSLOG_UDP_PORT),\n facility=LOG_USER,socktype=None ):\n  ''\n\n\n\n\n\n  \n  logging.Handler.__init__(self)\n  \n  self.address=address\n  self.facility=facility\n  self.socktype=socktype\n  \n  if isinstance(address,str):\n   self.unixsocket=True\n   self._connect_unixsocket(address)\n  else :\n   self.unixsocket=False\n   if socktype is None :\n    socktype=socket.SOCK_DGRAM\n   self.socket=socket.socket(socket.AF_INET,socktype)\n   if socktype ==socket.SOCK_STREAM:\n    self.socket.connect(address)\n   self.socktype=socktype\n  self.formatter=None\n  \n def _connect_unixsocket(self,address):\n  use_socktype=self.socktype\n  if use_socktype is None :\n   use_socktype=socket.SOCK_DGRAM\n  self.socket=socket.socket(socket.AF_UNIX,use_socktype)\n  try :\n   self.socket.connect(address)\n   \n   self.socktype=use_socktype\n  except socket.error:\n   self.socket.close()\n   if self.socktype is not None :\n   \n    raise\n   use_socktype=socket.SOCK_STREAM\n   self.socket=socket.socket(socket.AF_UNIX,use_socktype)\n   try :\n    self.socket.connect(address)\n    \n    self.socktype=use_socktype\n   except socket.error:\n    self.socket.close()\n    raise\n    \n def encodePriority(self,facility,priority):\n  ''\n\n\n\n\n  \n  if isinstance(facility,str):\n   facility=self.facility_names[facility]\n  if isinstance(priority,str):\n   priority=self.priority_names[priority]\n  return (facility <<3)|priority\n  \n def close(self):\n  ''\n\n  \n  self.acquire()\n  try :\n   self.socket.close()\n   logging.Handler.close(self)\n  finally :\n   self.release()\n   \n def mapPriority(self,levelName):\n  ''\n\n\n\n\n\n  \n  return self.priority_map.get(levelName,\"warning\")\n  \n ident=''\n append_nul=True\n \n def emit(self,record):\n  ''\n\n\n\n\n  \n  msg=self.format(record)\n  if self.ident:\n   msg=self.ident+msg\n  if self.append_nul:\n   msg +='\\000'\n  ''\n\n\n  \n  prio='<%d>'%self.encodePriority(self.facility,\n  self.mapPriority(record.levelname))\n  prio=prio.encode('utf-8')\n  \n  msg=msg.encode('utf-8')\n  msg=prio+msg\n  try :\n   if self.unixsocket:\n    try :\n     self.socket.send(msg)\n    except socket.error:\n     self.socket.close()\n     self._connect_unixsocket(self.address)\n     self.socket.send(msg)\n   elif self.socktype ==socket.SOCK_DGRAM:\n    self.socket.sendto(msg,self.address)\n   else :\n    self.socket.sendall(msg)\n  except (KeyboardInterrupt,SystemExit):\n   raise\n  except :\n   self.handleError(record)\n   \nclass SMTPHandler(logging.Handler):\n ''\n\n \n def __init__(self,mailhost,fromaddr,toaddrs,subject,\n credentials=None ,secure=None ,timeout=5.0):\n  ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  \n  logging.Handler.__init__(self)\n  if isinstance(mailhost,tuple):\n   self.mailhost,self.mailport=mailhost\n  else :\n   self.mailhost,self.mailport=mailhost,None\n  if isinstance(credentials,tuple):\n   self.username,self.password=credentials\n  else :\n   self.username=None\n  self.fromaddr=fromaddr\n  if isinstance(toaddrs,str):\n   toaddrs=[toaddrs]\n  self.toaddrs=toaddrs\n  self.subject=subject\n  self.secure=secure\n  self.timeout=timeout\n  \n def getSubject(self,record):\n  ''\n\n\n\n\n  \n  return self.subject\n  \n def emit(self,record):\n  ''\n\n\n\n  \n  try :\n   import smtplib\n   from email.utils import formatdate\n   port=self.mailport\n   if not port:\n    port=smtplib.SMTP_PORT\n   smtp=smtplib.SMTP(self.mailhost,port,timeout=self.timeout)\n   msg=self.format(record)\n   msg=\"From: %s\\r\\nTo: %s\\r\\nSubject: %s\\r\\nDate: %s\\r\\n\\r\\n%s\"%(\n   self.fromaddr,\n   \",\".join(self.toaddrs),\n   self.getSubject(record),\n   formatdate(),msg)\n   if self.username:\n    if self.secure is not None :\n     smtp.ehlo()\n     smtp.starttls(*self.secure)\n     smtp.ehlo()\n    smtp.login(self.username,self.password)\n   smtp.sendmail(self.fromaddr,self.toaddrs,msg)\n   smtp.quit()\n  except (KeyboardInterrupt,SystemExit):\n   raise\n  except :\n   self.handleError(record)\n   \nclass NTEventLogHandler(logging.Handler):\n ''\n\n\n\n\n\n\n\n \n def __init__(self,appname,dllname=None ,logtype=\"Application\"):\n  logging.Handler.__init__(self)\n  try :\n   import win32evtlogutil,win32evtlog\n   self.appname=appname\n   self._welu=win32evtlogutil\n   if not dllname:\n    dllname=os.path.split(self._welu.__file__)\n    dllname=os.path.split(dllname[0])\n    dllname=os.path.join(dllname[0],r'win32service.pyd')\n   self.dllname=dllname\n   self.logtype=logtype\n   self._welu.AddSourceToRegistry(appname,dllname,logtype)\n   self.deftype=win32evtlog.EVENTLOG_ERROR_TYPE\n   self.typemap={\n   logging.DEBUG:win32evtlog.EVENTLOG_INFORMATION_TYPE,\n   logging.INFO:win32evtlog.EVENTLOG_INFORMATION_TYPE,\n   logging.WARNING:win32evtlog.EVENTLOG_WARNING_TYPE,\n   logging.ERROR:win32evtlog.EVENTLOG_ERROR_TYPE,\n   logging.CRITICAL:win32evtlog.EVENTLOG_ERROR_TYPE,\n   }\n  except ImportError:\n   print(\"The Python Win32 extensions for NT (service, event \"   \"logging) appear not to be available.\")\n   self._welu=None\n   \n def getMessageID(self,record):\n  ''\n\n\n\n\n\n  \n  return 1\n  \n def getEventCategory(self,record):\n  ''\n\n\n\n\n  \n  return 0\n  \n def getEventType(self,record):\n  ''\n\n\n\n\n\n\n\n\n  \n  return self.typemap.get(record.levelno,self.deftype)\n  \n def emit(self,record):\n  ''\n\n\n\n\n  \n  if self._welu:\n   try :\n    id=self.getMessageID(record)\n    cat=self.getEventCategory(record)\n    type=self.getEventType(record)\n    msg=self.format(record)\n    self._welu.ReportEvent(self.appname,id,cat,type,[msg])\n   except (KeyboardInterrupt,SystemExit):\n    raise\n   except :\n    self.handleError(record)\n    \n def close(self):\n  ''\n\n\n\n\n\n\n\n  \n  \n  logging.Handler.close(self)\n  \nclass HTTPHandler(logging.Handler):\n ''\n\n\n \n def __init__(self,host,url,method=\"GET\",secure=False ,credentials=None ):\n  ''\n\n\n  \n  logging.Handler.__init__(self)\n  method=method.upper()\n  if method not in [\"GET\",\"POST\"]:\n   raise ValueError(\"method must be GET or POST\")\n  self.host=host\n  self.url=url\n  self.method=method\n  self.secure=secure\n  self.credentials=credentials\n  \n def mapLogRecord(self,record):\n  ''\n\n\n\n  \n  return record.__dict__\n  \n def emit(self,record):\n  ''\n\n\n\n  \n  try :\n   import http.client,urllib.parse\n   host=self.host\n   if self.secure:\n    h=http.client.HTTPSConnection(host)\n   else :\n    h=http.client.HTTPConnection(host)\n   url=self.url\n   data=urllib.parse.urlencode(self.mapLogRecord(record))\n   if self.method ==\"GET\":\n    if (url.find('?')>=0):\n     sep='&'\n    else :\n     sep='?'\n    url=url+\"%c%s\"%(sep,data)\n   h.putrequest(self.method,url)\n   \n   \n   i=host.find(\":\")\n   if i >=0:\n    host=host[:i]\n   h.putheader(\"Host\",host)\n   if self.method ==\"POST\":\n    h.putheader(\"Content-type\",\n    \"application/x-www-form-urlencoded\")\n    h.putheader(\"Content-length\",str(len(data)))\n   if self.credentials:\n    import base64\n    s=('u%s:%s'%self.credentials).encode('utf-8')\n    s='Basic '+base64.b64encode(s).strip()\n    h.putheader('Authorization',s)\n   h.endheaders()\n   if self.method ==\"POST\":\n    h.send(data.encode('utf-8'))\n   h.getresponse()\n  except (KeyboardInterrupt,SystemExit):\n   raise\n  except :\n   self.handleError(record)\n   \nclass BufferingHandler(logging.Handler):\n ''\n\n\n\n \n def __init__(self,capacity):\n  ''\n\n  \n  logging.Handler.__init__(self)\n  self.capacity=capacity\n  self.buffer=[]\n  \n def shouldFlush(self,record):\n  ''\n\n\n\n\n  \n  return (len(self.buffer)>=self.capacity)\n  \n def emit(self,record):\n  ''\n\n\n\n\n  \n  self.buffer.append(record)\n  if self.shouldFlush(record):\n   self.flush()\n   \n def flush(self):\n  ''\n\n\n\n  \n  self.acquire()\n  try :\n   self.buffer=[]\n  finally :\n   self.release()\n   \n def close(self):\n  ''\n\n\n\n  \n  self.flush()\n  logging.Handler.close(self)\n  \nclass MemoryHandler(BufferingHandler):\n ''\n\n\n\n \n def __init__(self,capacity,flushLevel=logging.ERROR,target=None ):\n  ''\n\n\n\n\n\n  \n  BufferingHandler.__init__(self,capacity)\n  self.flushLevel=flushLevel\n  self.target=target\n  \n def shouldFlush(self,record):\n  ''\n\n  \n  return (len(self.buffer)>=self.capacity)or  (record.levelno >=self.flushLevel)\n  \n def setTarget(self,target):\n  ''\n\n  \n  self.target=target\n  \n def flush(self):\n  ''\n\n\n\n\n\n  \n  self.acquire()\n  try :\n   if self.target:\n    for record in self.buffer:\n     self.target.handle(record)\n    self.buffer=[]\n  finally :\n   self.release()\n   \n def close(self):\n  ''\n\n  \n  self.flush()\n  self.acquire()\n  try :\n   self.target=None\n   BufferingHandler.close(self)\n  finally :\n   self.release()\n   \n   \nclass QueueHandler(logging.Handler):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,queue):\n  ''\n\n  \n  logging.Handler.__init__(self)\n  self.queue=queue\n  \n def enqueue(self,record):\n  ''\n\n\n\n\n\n  \n  self.queue.put_nowait(record)\n  \n def prepare(self,record):\n  ''\n\n\n\n\n\n\n\n\n\n\n  \n  \n  \n  \n  \n  \n  \n  self.format(record)\n  record.msg=record.message\n  record.args=None\n  record.exc_info=None\n  return record\n  \n def emit(self,record):\n  ''\n\n\n\n  \n  try :\n   self.enqueue(self.prepare(record))\n  except (KeyboardInterrupt,SystemExit):\n   raise\n  except :\n   self.handleError(record)\n   \nif threading:\n class QueueListener(object):\n  ''\n\n\n\n  \n  _sentinel=None\n  \n  def __init__(self,queue,*handlers):\n   ''\n\n\n   \n   self.queue=queue\n   self.handlers=handlers\n   self._stop=threading.Event()\n   self._thread=None\n   \n  def dequeue(self,block):\n   ''\n\n\n\n\n   \n   return self.queue.get(block)\n   \n  def start(self):\n   ''\n\n\n\n\n   \n   self._thread=t=threading.Thread(target=self._monitor)\n   t.setDaemon(True )\n   t.start()\n   \n  def prepare(self,record):\n   ''\n\n\n\n\n\n   \n   return record\n   \n  def handle(self,record):\n   ''\n\n\n\n\n   \n   record=self.prepare(record)\n   for handler in self.handlers:\n    handler.handle(record)\n    \n  def _monitor(self):\n   ''\n\n\n\n\n\n   \n   q=self.queue\n   has_task_done=hasattr(q,'task_done')\n   while not self._stop.isSet():\n    try :\n     record=self.dequeue(True )\n     if record is self._sentinel:\n      break\n     self.handle(record)\n     if has_task_done:\n      q.task_done()\n    except queue.Empty:\n     pass\n     \n   while True :\n    try :\n     record=self.dequeue(False )\n     if record is self._sentinel:\n      break\n     self.handle(record)\n     if has_task_done:\n      q.task_done()\n    except queue.Empty:\n     break\n     \n  def enqueue_sentinel(self):\n   ''\n\n\n\n\n\n   \n   self.queue.put_nowait(self._sentinel)\n   \n  def stop(self):\n   ''\n\n\n\n\n\n   \n   self._stop.set()\n   self.enqueue_sentinel()\n   self._thread.join()\n   self._thread=None\n"], "_testcapi": [".py", "\nCHAR_MAX=127\n\nCHAR_MIN=-128\n\nDBL_MAX=1.7976931348623157e+308\n\nDBL_MIN=2.2250738585072014e-308\n\nFLT_MAX=3.4028234663852886e+38\n\nFLT_MIN=1.1754943508222875e-38\n\nINT_MAX=2147483647\n\nINT_MIN=-2147483648\n\nLLONG_MAX=9223372036854775807\n\nLLONG_MIN=-9223372036854775808\n\nLONG_MAX=2147483647\n\nLONG_MIN=-2147483648\n\nPY_SSIZE_T_MAX=2147483647\n\nPY_SSIZE_T_MIN=-2147483648\n\nSHRT_MAX=32767\n\nSHRT_MIN=-32768\n\nSIZEOF_PYGC_HEAD=16\n\nUCHAR_MAX=255\n\nUINT_MAX=4294967295\n\nULLONG_MAX=18446744073709551615\n\nULONG_MAX=4294967295\n\nUSHRT_MAX=65535\n\n__loader__=\"<_frozen_importlib.ExtensionFileLoader object at 0x00C98DD0>\"\n\ndef _pending_threadfunc(*args,**kw):\n pass\n \nclass _test_structmembersType(object):\n pass\n \ndef _test_thread_state(*args,**kw):\n pass\n \ndef argparsing(*args,**kw):\n pass\n \ndef code_newempty(*args,**kw):\n pass\n \ndef codec_incrementaldecoder(*args,**kw):\n pass\n \ndef codec_incrementalencoder(*args,**kw):\n pass\n \ndef crash_no_current_thread(*args,**kw):\n pass\n \nclass error(Exception):\n pass\n \ndef exception_print(*args,**kw):\n pass\n \ndef getargs_B(*args,**kw):\n pass\n \ndef getargs_H(*args,**kw):\n pass\n \ndef getargs_I(*args,**kw):\n pass\n \ndef getargs_K(*args,**kw):\n pass\n \ndef getargs_L(*args,**kw):\n pass\n \ndef getargs_Z(*args,**kw):\n pass\n \ndef getargs_Z_hash(*args,**kw):\n pass\n \ndef getargs_b(*args,**kw):\n pass\n \ndef getargs_c(*args,**kw):\n pass\n \ndef getargs_h(*args,**kw):\n pass\n \ndef getargs_i(*args,**kw):\n pass\n \ndef getargs_k(*args,**kw):\n pass\n \ndef getargs_keyword_only(*args,**kw):\n pass\n \ndef getargs_keywords(*args,**kw):\n pass\n \ndef getargs_l(*args,**kw):\n pass\n \ndef getargs_n(*args,**kw):\n pass\n \ndef getargs_p(*args,**kw):\n pass\n \ndef getargs_s(*args,**kw):\n pass\n \ndef getargs_s_hash(*args,**kw):\n pass\n \ndef getargs_s_star(*args,**kw):\n pass\n \ndef getargs_tuple(*args,**kw):\n pass\n \ndef getargs_u(*args,**kw):\n pass\n \ndef getargs_u_hash(*args,**kw):\n pass\n \ndef getargs_w_star(*args,**kw):\n pass\n \ndef getargs_y(*args,**kw):\n pass\n \ndef getargs_y_hash(*args,**kw):\n pass\n \ndef getargs_y_star(*args,**kw):\n pass\n \ndef getargs_z(*args,**kw):\n pass\n \ndef getargs_z_hash(*args,**kw):\n pass\n \ndef getargs_z_star(*args,**kw):\n pass\n \nclass instancemethod(object):\n pass\n \ndef make_exception_with_doc(*args,**kw):\n pass\n \ndef make_memoryview_from_NULL_pointer(*args,**kw):\n pass\n \ndef parse_tuple_and_keywords(*args,**kw):\n pass\n \ndef pytime_object_to_time_t(*args,**kw):\n pass\n \ndef pytime_object_to_timespec(*args,**kw):\n pass\n \ndef pytime_object_to_timeval(*args,**kw):\n pass\n \ndef raise_exception(*args,**kw):\n pass\n \ndef raise_memoryerror(*args,**kw):\n pass\n \ndef run_in_subinterp(*args,**kw):\n pass\n \ndef set_exc_info(*args,**kw):\n pass\n \ndef test_L_code(*args,**kw):\n pass\n \ndef test_Z_code(*args,**kw):\n pass\n \ndef test_capsule(*args,**kw):\n pass\n \ndef test_config(*args,**kw):\n pass\n \ndef test_datetime_capi(*args,**kw):\n pass\n \ndef test_dict_iteration(*args,**kw):\n pass\n \ndef test_empty_argparse(*args,**kw):\n pass\n \ndef test_k_code(*args,**kw):\n pass\n \ndef test_lazy_hash_inheritance(*args,**kw):\n pass\n \ndef test_list_api(*args,**kw):\n pass\n \ndef test_long_and_overflow(*args,**kw):\n pass\n \ndef test_long_api(*args,**kw):\n pass\n \ndef test_long_as_double(*args,**kw):\n pass\n \ndef test_long_as_size_t(*args,**kw):\n pass\n \ndef test_long_long_and_overflow(*args,**kw):\n pass\n \ndef test_long_numbits(*args,**kw):\n pass\n \ndef test_longlong_api(*args,**kw):\n pass\n \ndef test_null_strings(*args,**kw):\n pass\n \ndef test_s_code(*args,**kw):\n pass\n \ndef test_string_from_format(*args,**kw):\n pass\n \ndef test_string_to_double(*args,**kw):\n pass\n \ndef test_u_code(*args,**kw):\n pass\n \ndef test_unicode_compare_with_ascii(*args,**kw):\n pass\n \ndef test_widechar(*args,**kw):\n pass\n \ndef test_with_docstring(*args,**kw):\n ''\n pass\n \ndef traceback_print(*args,**kw):\n pass\n \ndef unicode_aswidechar(*args,**kw):\n pass\n \ndef unicode_aswidecharstring(*args,**kw):\n pass\n \ndef unicode_encodedecimal(*args,**kw):\n pass\n \ndef unicode_transformdecimaltoascii(*args,**kw):\n pass\n"]};

